STM32CubeMX之定时器PWM输出
STM32CubeMX之定时器PWM输出
脉冲宽度调制模式(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(复用推挽输出)。 定时器4 基本配置及PWM模式配置
3.参数说明
4. 代码生成
TIM4基本功能配置 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 进入仿真模式: 查看引脚电平变化波形: 波形效果: