You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.0 KiB
2.0 KiB
实验名称:STM32 定时器和PWM 操作
1. 实验内容
通过定时器/PWM面实现LED的亮度调整和呼吸灯效果。
开发板使用Key1和Key2(图中1所示的位置)来控制灯的明暗,控制RGB(图中2所示的位置)灯。
LED的PIN是PA6、PA7、PB0,分别对应TIM3的CH1~CH3通道。
2. 基本要求
- 使用按键控制PWM的占空比,从而控制一个LED灯的明暗;一个按键每次让占空比降低一定值,一个按键让占空比每次升高一定值;
- 通过另外一个定时器,实现定时调整占空比;占空比数秒内从1升高到99%,在从99%降低到1;这样就能实现呼吸灯的效果;建议使用TIM3或者TIM4作为定时器,因为TIM3作为LED的PWM被占用。
3. 进阶要求
- 使用TIM3同时生成3路PMM,控制三个灯的呼吸效果;
- 如果三路PWM的呼吸周期不一样,将产生绚丽的7彩效果。就像使用RGB来进行调色;
- 在LED灯上面用打印纸做个灯罩效果更好,注意灯罩距离LED最好有一定的距离。
多路PWM请参考:https://blog.csdn.net/ASWaterbenben/article/details/93402119
4. 其他说明
- 中断方式下,如果需要访问全局变量,最好把全局变量使用 volatile 来进行修饰,避免编译器对该变量进行优化。具体参考 https://blog.csdn.net/dengjin20104042056/article/details/107716564 。主函数和中断处理函数相当于两个线程,因为编译器的优化,在一个线程中改变一个全局变量的值,另外一个线程读取到的可能是没有改变前的值,因此需要用 volatile 来标识这个变量,让编译器不优化这个变量的存储(这个变量的值可能因为编译器的优化在寄存器中进行改变,而不是在真正的内存区间)。这个问题书上在中断这部分也说明了。
5. 实验报告要求
按照群中的实验报告的模板,以及模板中的说明进行。