学习笔记:
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
将通用定时器分为四个部分:
1-选择时钟 2-时基电路 3-输入捕获 4-输出比较
实践1-pwm-led闪烁
要求产生周期为200ms,占空比为50%的PWM信号来控制led灯。
1.cubemax配置
由原理图可知,led引脚复用为tim5
周期为200ms,占空比为50%,Tim5挂在APB1总线上,CLK = 84MHZ;假设PSC =8399,根据公式ARR = 1999,CRR = 1000.
生成代码
main.c 添加
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim5,TIM_CHANNEL_1); //启动定时器5通道1输出周期为200ms,占空比50%得PWM信号。
/* USER CODE END 2 */
将代码下载到开发板中,实验结果led每隔100ms闪烁。
实践2-PWM-呼吸灯
周期改为20ms,因为大于50hz使人眼不会察觉出闪烁现象。
占空比从0%-100%反复,从而实现呼吸灯。
根据公式可得,PSC=8399,ARR=199。
占空比从0%开始,所以CRR 的初值为 0,根据公式计算CCR = 200时,占空比为100%。
生成代码
mian.c 修改
/* USER CODE BEGIN 2 */
uint16_t i =0; //CCR
uint16_t step = 10; //步进值,使呼吸效果明显
HAL_TIM_PWM_Start(&htim5,TIM_CHANNEL_1);//启动定时器5的通道1产生PWM
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
//知识点:在for/while等循环内部定义的变量属于局部变量,当for循环结束以后,局部变量就会被销毁
for(i=0;i<=200;i = i+step)
{
__HAL_TIM_SET_COMPARE(&htim5,TIM_CHANNEL_1,i);
HAL_Delay(200);
}
/* USER CODE BEGIN 3 */
}
实验现象,出现呼吸灯效果并反复。
上一篇:STM32时钟与GPIO分析 基于STM32的LED灯开发
下一篇:STM32定时器有什么功能?STM32的用法详解
推荐阅读最新更新时间:2024-10-23 13:51
设计资源 培训 开发板 精华推荐
- DC2138A,使用 LT8301 42VIN 微功率隔离反激式转换器和 65V/1.2A 开关的演示板
- LT6656AIS6-4.096 的典型应用,用于基本连接的 4.096V 电压基准
- VG7050ECN-EVB、VG7050ECN 评估板,通过 I2C 总线设置寄存器
- 双路输出非隔离式 Flybuck 参考设计
- 实践周作业综合1810300524 王靖涵
- LTM4650AIY 2 相、1V、50A 设计的典型应用电路
- MIKROE-3191,基于 S25FL512S 512 Mbit SPI 闪存模块的闪存 4 Click 板
- 使用 ON Semiconductor 的 NCP2815 的参考设计
- 使用 NXP Semiconductors 的 TDA8933 的参考设计
- 莱洛三角V2.3-DRV8313[已验证]