STM32 —— PWM 呼吸灯
STM32 —— PWM 呼吸灯
实验目的
使用 TIM3 和 TIM4 ,分别输出一个 PWM 波形,PWM 的占空比随时间变化,去驱动你外接的一个 LED 以及最小开发板上已焊接的LED(固定接在 PC13 GPIO 端口),实现 2 个 LED 呼吸灯的效果。
实验原理
前面我们已经介绍过了什么时 PWM 波,请看我的博客:STM32 —— PWM 入门,这里就不再介绍 PWM 波了,直接对实验原理进行介绍
实验要求我们输出呼吸灯,那么我们就要考虑呼吸灯与什么有关,我们在点亮小灯泡时,是通过控制小灯泡对应引脚上的输出电平进行点亮,那么我们实现呼吸灯也能通过控制电平进行输入和输出的控制
在 STM32 —— PWM 入门 中我们提到过,PWM 是通过把脉冲序列利用相同数量的等幅而不等宽的矩形脉冲代替,使矩形脉冲的中点和相应正弦波部分的中点重合,且使矩形脉冲和相应的正弦波部分面积(冲量)相等,就能模拟出一个正弦波的正半周,由于我们这里不需要正弦的负半周,所以这里不做介绍,原理与正半周相同
其实 PWM 波形并不是一个完整的正弦波的正半周,而是通过控制脉宽和周期,来达到模拟的效果,人看不到小灯泡闪烁是因为小灯泡在不同亮度的闪烁频率已经远远超过了人类用眼睛可以看见的范围,所以我们看到小灯泡是程呼吸灯亮度逐渐改变的状态
HAL 库方法
CubeMX 项目配置
RCC 配置
时钟配置
TIM2 配置
TIM3 配置
SYS 配置
NVIC 配置
引脚配置
代码设计
首先需要在 main 函数中开启 TIM2 并输出 PWM 波形,使用频道2,代码如下:
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);
然后可以直接改变 CCR 值,即改变占空比,只需要在循环中循环执行该变 CCR 数值的代码即可,代码如下:
for(uint16_t i=1;i<500;i++){
htim2.Instance->CCR2 = i;
HAL_Delay(5);
}
for(uint16_t i=499;i>=1;i--){
htim2.Instance->CCR2 = i;
HAL_Delay(5);
}
HAL_Delay(25);
然后我们需要根据要求实现板载小灯泡做呼吸灯,代码与上面的相似,只需要修改一下输出端口即可,然后我们只需要在接线的时候把输出pwm信号的端口接到板载灯泡对应的端口上即可实现
标准库方法
寄存器方法
运行测试
虚拟串口测试
这里没有输出,所以不需要虚拟串口输出测试,直接进行 Proteus 仿真测试
Proteus 仿真模拟
这里测试还有问题,后续会更新测试结果
接线示例
运行结果
波形检测
该实验做波形分析无意义
错误解决方法
目前为发生报错,后续有报错会持续更新