目录
题目
设置STM32CubeMX
手搓代码
开启PWM函数
PWM占空比可调函数
正文
题目
第十一届省赛关于PWM的题目要求如下:
要求我们用PA6和PA7输出两种不同频率的占空比可调节的脉冲信号,频率的设置是由定时器中的预分频系数和重装载值来决定的
设置STM32CubeMX
首先我们要给PA6和PA7引脚选一个定时器,下图中我们可以看到PA6由四个定时器可选,分别是TIM16_CH1,TIM1_BKIN,TIM3_CH1,TIM8_BKIN,但是我们只能选择后缀为CH1的定时器,至于为什么可以点此了解。因为我们在前几篇文章中给按键设置的定时器为TIM3_CH1,所以在这里我们给PA6选择TIM16_CH1,同样的,我们给PA7选择TIM17_CH1。
引脚设置完成后,我们转到左边来,如下图,先给定时器使能,选择通道Output Compare CH1,
TIM16是PA6的定时器,要求是100Hz,时钟原本的频率是80MHz,计算出分频系数和重装载值后填入即可(如何计算上面有相关链接)。
如何往下翻,找到Pulse,设置占空比,为20.这样PA6的脉冲信号解设置好啦,PA7同理设置即可。
手搓代码
开启PWM函数
以下是打开PWM的函数,第一个参数是定时器,第二个参数是通道。
HAL_TIM_PWM_Start(&htim16,TIM_CHANNEL_1); //开启PWM HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1);
PWM占空比可调函数
这里使用按键来对PWM的占空比进行改变,每按一次占空比加10,等于100时跳转回10。
PWM的占空比改变的实现函数如下,第一个参数是定时器,第二个参数是通道,第三个参数是占空比的比例,如10就是10%的高电平。
_HAL_TIM_SetCompare(&htim16,TIM_CHANNEL_1,pa6_duty);
以下就是完整的改变PWM的完整函数
if(key[1].key_flag == 1) { pa6_duty+=10; if(pa6_duty > 90) { pa6_duty=10; } _HAL_TIM_SetCompare(&htim16,TIM_CHANNEL_1,pa6_duty); //设置占空比pa6_duty key[1].key_flag = 0; } if(key[2].key_flag == 1) { pa7_duty+=10; if(pa7_duty > 90) { pa7_duty=10; } __HAL_TIM_SetCompare(&htim17,TIM_CHANNEL_1,pa7_duty); //设置占空比pa6_duty key[2].key_flag = 0; }