脈沖寬度調制模式(PWM)可以產生一個由TIMx_ARR寄存器確定頻率、由TIMx_CCRx寄存器確定占空比的信號。
??本示例實現 IO 輸出模式–PWM 波形輸出。 以 LED 驅動為例, 使用定時器高級功能(PWM 模式), 實現呼吸燈效果。
1.硬件接口
??本硬件平臺有3個LED燈分別為LED2、LED3、LED4LED2接PA1,LED2接PB8,LED4接PB9,硬件原理圖如下:
根據STM32引腳定義手冊或者STM32CUbeMX軟件我們可得知定時器4的CH1和CH2對應外部引腳PB8和PB9。
2 軟件設計
??打開STM32CubeMX工具,配置定時器4,將PB8配置為定時器4通道3(復用推挽輸出),PB9配置為定時器4通道4(復用推挽輸出)。
3.參數說明
模式 | 說明 |
Input capture direct mode | 輸入捕獲直接模式 |
Input capture indirectmode | 輸入捕獲間接模式 |
Input capture triggered by TRC | 輸入捕獲觸發器模式 |
Output compare no output | 輸出比較(凍結模式000 ) |
Output compare CH3 | 輸出比較(001) |
PWM Generation No output | PWM產生無輸出 |
PWM Generation CH3 | PWM輸出到CH3 |
CH3 Combined channels | 聯合通道 |
xor activation | 定時器輸入異或模式 |
4. 代碼生成
PWM模式配置:
PB8、PB9引腳配置和PWM模式使能
HAL_TIM_PWM_Start(timHandle,TIM_CHANNEL_3);//初始化通道3
HAL_TIM_PWM_Start(timHandle,TIM_CHANNEL_4);//初始化通道4
引腳模式配置及PWM初始化
4.呼吸燈主函數示例
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
/*實現呼吸燈*/
if(flag==0)i++;
else i--;
if(i>=300)flag=1;
if(i==0)flag=0;
HAL_Delay(3);
htim4.Instance->CCR3=i;//調節占空比
htim4.Instance->CCR4=i;
}
5.HAL庫定時器常用函數介紹
HAL庫中定時器基本功能函數源碼均在stm32f1xx_hal_tim.c中,高級功能函數在stm32f1xx_hal_tim_ex.c中,本小節主要介紹幾個常用函數。(以下列舉函數可能需要用戶調用或修改)。
/*硬件層初始化:時鐘、中斷,DMA*/
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim);
/*中斷方式開啟定時器*/
HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);
/*DMA方式開啟定時器*/
HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length);
/*開啟定時器PWM模式*/
HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
/*獲取狀態*/
HAL_TIM_StateTypeDef HAL_TIM_Base_GetState(TIM_HandleTypeDef *htim);
/*中斷方式開啟定時器輸入捕獲功能*/
HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
6.軟件仿真效果展示
??通過KEIL軟件仿真,查看引腳電平變化,KEIL軟件相關設置:
CPU DLL:SARMCM3.DLL
Dialog DLL:DARMSTM.DLL Parameter:-pSTM32F103C8
進入仿真模式:
查看引腳電平變化波形:
波形效果:
-
PWM
+關注
關注
114文章
5181瀏覽量
213796 -
STM32
+關注
關注
2270文章
10895瀏覽量
355729 -
定時器
+關注
關注
23文章
3246瀏覽量
114719 -
呼吸燈
+關注
關注
10文章
110瀏覽量
42722 -
kell
+關注
關注
0文章
3瀏覽量
2032
發布評論請先 登錄
相關推薦
評論