文章目录

  • 前言
  • 一、HAL库配置定时器
  • 1.CubeMx配置
  • 2.函数相互调用逻辑
  • 总结



前言

基于定时器输出不同占空比的PWM波,再作为led灯的输入,关于不同占空比如何改变led灯的亮度,我自己想的是类似于高中物理讲的最大电压和有效电压的区别,有效电压是指在单位时间电流所做功的平均值,高电平保持时间越长,有效电压就越高。不过这样有点解释不通PWM频率的用处了,所以可能这样理解也有点小问题。


一、HAL库配置定时器

1.CubeMx配置

stm32l151 freemodbus主机 stm32l071rb_输入模式


还是首先配置时钟,鉴于我非常的懒,所以还是默认内部高速时钟;然后回来配置定时器,时钟来源:内部时钟;通道一选择产生PWM波,预分频系数15,预装载值499,所以一次PWM波的周期为5*10^-4秒,即PWM的频率为2000HZ;关于PWM模式1还是PWM模式2的解释建议还是百度一下,比较麻烦,不过我觉得可以固定一个常用模式,就不容易出错,这里选择的是模式1,向上计数,当CNT(当前计数值)<CCR(比较计数值)时,输出有效电平,极性设置为low(根据板子原理图,管脚为低电平时灯被点亮)故当CNT<CCR时,PWM波输出低电平,灯被点亮。这里刚开始占空比为0,但后面程序会不断更改占空比。最后记得打开led灯的引脚,配置为输入模式。

2.函数相互调用逻辑

stm32l151 freemodbus主机 stm32l071rb_main函数_02


跟定时器中断的代码差不多,main函数调用MX_TIM3_Init()函数来进行初始化,完成用户在CubeMx中的配置,MX_TIM3_Init()函数原型如下

stm32l151 freemodbus主机 stm32l071rb_main函数_03


然后定时器就被配置完成了,但是老规矩我们还是需要在main()函数中调用HAL_TIM_PWM_Start()函数来开启PWM波的输出;然后就是通过while循环来更改占空比了,不过有一说一,这个更改占空比的函数我没有看懂,等我有空去请教一下老师。

stm32l151 freemodbus主机 stm32l071rb_相互调用_04


最后再把PWM波的输出排针跟led灯的输入排针接上,就可以看见呼吸灯的效果了。

总结

嗯,也蛮简单的。