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.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
实验名称: STM32 定时器和PWM 操作
## 1. 实验内容
通过定时器/PWM面实现LED的亮度调整和呼吸灯效果。
开发板使用Key1和Key2( 图中1所示的位置) 来控制灯的明暗, 控制RGB( 图中2所示的位置) 灯。

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