脉冲宽度调制模式(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
进入仿真模式:
查看引脚电平变化波形:
波形效果:
|