本项目采用CubeMX+Keil5,利用HAL库进行开发。
配置PWM计数周期为105。为啥是105呢?这是因为培训讲师参考的是别人的博客,那个博主用的系统频率是84MHz,我们用1/84MHz,然后乘以105,等于1.25us。刚好和WS2812手册中,WS2812的800kHz的通信速率是吻合的。但本项目采用的是72MHz,不分频,确定了定时器计数一次大概为13ns,周期105+1=106,106x13ns=1.378us。
1.378usx0.78=1.078us,1.378usx0.32=0.44us,虽然和手册不太吻合,但是也大概差不多。其实只要周期设置的不太大,不要超过1.5us,大致都是可以的。也可以选择配置成89,这样的话,1/72MHz,然后乘以90,等于1.25us。所以这个WS2812比较神奇,你可以按照自己的想法来配置,基本不会出问题。
定时器2用来实现氛围灯的回落(即一盏一盏的熄灭)
72MHz,7199+1=7200分频,定时器计数一次为7200/72MHz=10^-4秒。
定时器2计数周期为9,即从0到9计数10次产生溢出。所以定时器2每10*10^-4秒=1毫秒产生一次溢出中断。
我们还需要配置STM32的串口,用来和HC-04进行串口通信。
配置串口要配置波特率,本项目配置成115200。
HC-04接收到数据后通过串口传给STM32,需要利用串口中断来实现灯带模式切换,下面要配置串口中断
最后,设置好代码输出