摘要
本文章基于国信长天CT1117E-M4开发板,讲述了STM32G431芯片 TIM定时器输出PWM的步骤,以及设置PWM频率和占空比的方法,祝各位学生蓝桥杯比赛取得好成绩!
M4开发板 可用作PWM输出的引脚
由上图开发板引出的引脚可以看出,很多引脚都可以用作PWM输出。查阅芯片资料,可以得知部分引脚与PWM通道的对应关系如下表:
TIM PWM输出的 使用步骤
下文将以赛方提供的示例代码HAL_06_LCD
为基础,为大家讲解使用PA7
引脚输出PWM的步骤:
① 将 PA7
初始化为定时器输输出通道模式
双击工程目录下的HAL_06_LCD.ioc
,使用STM32CubeMX软件打开工程配置。
点击PA7
,可以看到该引脚的功能可设置为TIM17_CH1,TIM3_CH2等等,这里我们将该引脚设为 TIM3_CH2
。并且点击左边的Timer
,将TIM3
的Channel 2
设为PWM Generation CH2
,下面的Parameter Setting
中将Prescaler
设为79
,Counter Period
设为1000
。
上面这两个参数将决定定时器的定时周期,从而决定PWM的频率,具体的频率计算公式为:
频率 = 80M/((Prescaler +1) * Counter Period )
继续下拉Parameter Setting
选项卡,将最下面的Pulse
参数设为500
,其他参数默认即可,如下图所示,设置完成后点击右上角的GENERATE CODE
生成代码。
PWM的占空比将由Counter Period
和Pulse
这两个参数共同决定,具体的计算公式为:
占空比 = Pulse / Counter Period
同学们尝试计算下上诉设置中PWM的占空比和频率分别是多少?
② PWM的开始与停止
刚刚生成的代码还不能输出我们想要的PWM,需要我们在代码中手动开启PWM的输出,使用下列代码可开启或停止某个定时器通道的输出:
HAL_TIM_PWM_Start_IT(&htim3, TIM_CHANNEL_2);//启动定时器3通道2的PWM输出
HAL_TIM_PWM_Stop_IT(&htim3, TIM_CHANNEL_2);//停止定时器3通道2的PWM输出
③ PWM频率及占空比的调节
配置完定时器及引脚的参数后,启动定时器通道的PWM输出,即可以在相关的引脚上产生PWM,PWM的初始频率和占空比由生成代码时填写的参数决定。当然也可以在代码中动态的调节PWM的频率和占空比:
//将定时器3通道2的比较值设为100,如果Counter Period为1000,则占空比为10%
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_2, 100);
//将定时器3的计数周期设为500,则此时频率为2000,占空比为20%
htim3.Init.Period = 500;
HAL_TIM_Base_Init(&htim3);
④ 应用示例
使用Keil打开刚刚生成的代码,在主函数中添加如下内容:
HAL_TIM_PWM_Start_IT(&htim3, TIM_CHANNEL_2);//启动定时器3通道2PWM输出
htim3.Init.Period = 500;
HAL_TIM_Base_Init(&htim3);//频率设为2000Hz
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_2, 200); //占空比设为40%
HAL_Delay(1000);
htim3.Init.Period = 800;
HAL_TIM_Base_Init(&htim3);//频率设为1250Hz
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_2, 200); //占空比设为25%
HAL_Delay(1000);
HAL_TIM_PWM_Stop_IT(&htim3, TIM_CHANNEL_2);//关闭定时器3通道2PWM输出
HAL_Delay(1000);
代码截图如下,将会在PA7引脚上2000Hz方波持续输出1S,1250Hz方波持续输出1S,低电平持续输出1S。
总结
定时器PWM输出使用步骤总结如下:
- 将对应引脚设为定时器通道模式,并设置定时器参数
- 启动PWM输出
- 按照要求修改PWM的频率及占空比
同学们参考上面代码,尝试使用其他定时器,其他引脚,实现呼吸灯
的效果。
如果此文章对你有帮助,欢迎点赞
关注
收藏
转发
.
学习过程中遇到问题可以在评论区留言… …
下图鹏老师设计的蓝桥杯练习板,功能和蓝桥杯赛方指定的设备功能完全兼容。