一、MX的配置
通用定時器設置,選擇時鐘源爲內部時鐘,預分頻7200得到10KHz的計數頻率(以系統時鐘72MHz爲例),計數重裝值爲5000-1,則每0.5s會從0計數到4999產生一次更新。開啓更新中斷響應,即可利用中斷每隔0.5s執行相應任務。下圖爲中斷配置:
TIM1和TIM8爲高級定時器,這裏我們只用到了更新中斷。
利用TIM2產生PWM在對應引腳輸出的配置:
預分頻爲0,重裝數爲1892,大約能產生38KHz的脈衝。其中Pulse爲佔空,可以填寫小於重裝數的任意數字。佔空比位Pulse值除以重裝數。
附:判斷一個引腳是否具有定時器輸出的功能可以在軟件中左鍵點擊引腳,如下圖:
例如PA8可以看到可以配置到TIM1的通道1。選中之後,TIM配置裏同樣也會有選中。在代碼生成後,引腳複用的配置也會自動生成(HAL_TIM_MspPostInit)。關於引腳複用的map表可以在STM32參考手冊的<通用和複用功能 GPIO/AFIO>中查閱。
二、生成的代碼
TIM1初始化函數
牽扯到的中斷響應配置:
其中中斷響應函數也已經有了,在<stm32f1xx_it.c>內
TIM2的配置
硬件底層配置:
三、用戶代碼
對於TIM1的定時中斷及響應
1. 開啓
HAL_TIM_Base_Start_IT(&htim1);
2. 中斷回調函數
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim==(&htim1))
{
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);//LED循環1秒亮滅一次
}
}
3. 關閉
HAL_TIM_Base_Stop_IT(&htim1);
TIM2產生PWM並輸出
1. 重設PWM佔空比函數
void user_pwm1_setvalue(uint16_t value)
{
TIM_OC_InitTypeDef sConfigOC;
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = value;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
}
2. 調用
user_pwm1_setvalue(946);
3. 停止
HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_1);