[应用相关] STM32CubeMX教程-PWM呼吸灯

[复制链接]
1981|55
 楼主| 远芳侵古道 发表于 2022-4-29 18:25 | 显示全部楼层
Mode   选择PWM模式1

Pulse(占空比值)  先给0

Fast Mode   PWM脉冲快速模式    :  和我们配置无关,不使能

PWM 极性:   设置为低电平        PS:  由于LED是低电平点亮,所以我们把极性设置为low
 楼主| 远芳侵古道 发表于 2022-4-29 18:26 | 显示全部楼层
 楼主| 远芳侵古道 发表于 2022-4-29 18:26 | 显示全部楼层
在 Parameter Settings 页配置预分频系数为 71,计数周期(自动加载值)为 499,定时器溢出频率,即PWM的周期,就是 72MHz/(71 1)/(499 1) = 2kHz。
 楼主| 远芳侵古道 发表于 2022-4-29 18:27 | 显示全部楼层
PWM频率:

Fpwm =Tclk / ((arr 1)*(psc 1))(单位:Hz)
arr 是计数器值
psc 是预分频值
 楼主| 远芳侵古道 发表于 2022-4-29 18:27 | 显示全部楼层
占空比:

duty circle = TIM3->CCR1 / arr  //(单位:%)
TIM3->CCR1   //用户设定值
 楼主| 远芳侵古道 发表于 2022-4-29 18:29 | 显示全部楼层
比如:

定时器频率Tclk = 72Mhz,arr=499,psc=71,那么PWM频率就是720000/500/72=  2000Hz,即2KHz。

如果arr=499,TIM3->CCR1=250,则pwm的占空比为50%。改CCR1可以修改占空比,修改arr可以修改频率。
 楼主| 远芳侵古道 发表于 2022-4-29 18:40 | 显示全部楼层
3.时钟源设置
95412626bbe04afc7a.png
 楼主| 远芳侵古道 发表于 2022-4-29 18:40 | 显示全部楼层
32的时钟树框图  如果不懂的话请看《【STM32】系统时钟RCC详解(超详细,超全面)》

1选择外部时钟HSE 8MHz   

2PLL锁相环倍频72倍

3系统时钟来源选择为PLL

4设置APB1分频器为 /2
 楼主| 远芳侵古道 发表于 2022-4-29 18:41 | 显示全部楼层
4.项目文件设置
73445626bc0e15f9dc.png
 楼主| 远芳侵古道 发表于 2022-4-29 18:42 | 显示全部楼层
1 设置项目名称

2 设置存储路径

3 选择所用IDE
 楼主| 远芳侵古道 发表于 2022-4-29 18:42 | 显示全部楼层
 楼主| 远芳侵古道 发表于 2022-4-29 18:43 | 显示全部楼层
5.创建工程文件

    点击GENERATE CODE  创建工程。

    新建的工程所有配置都是默认的  我们需要自行选择下载模式,勾选上下载后复位运行。
3931626bc14d7e86b.png
 楼主| 远芳侵古道 发表于 2022-4-29 18:44 | 显示全部楼层
例程

    这里我们创建一个呼吸灯的例程

定义变量:

/* USER CODE BEGIN 1 */
uint16_t pwmVal=0; //PWM占空比
uint8_t dir=1;
/* USER CODE END 1 */
使能TIM3的PWM Channel1 输出:

/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
/* USER CODE END 2 */
在while循环中添加代码:

while (1)
{
/* USER CODE END WHILE */


/* USER CODE BEGIN 3 */


while (pwmVal< 500)
{
pwmVal ;
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwmVal); //修改比较值,修改占空比
// TIM3->CCR1 = pwmVal; 与上方相同
HAL_Delay(1);
}
while (pwmVal)
{
pwmVal--;
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwmVal); //修改比较值,修改占空比
// TIM3->CCR1 = pwmVal; 与上方相同
HAL_Delay(1);
}
HAL_Delay(200);


/* USER CODE END 3 */
}
或者直接修改CCRx寄存器的值:

htim3.Instance->CCR1 = 300; //通过 htim3.Instance->即可访问与定时器相关寄存器
 楼主| 远芳侵古道 发表于 2022-4-29 18:44 | 显示全部楼层
实验现象如下:
32366626bc1a6d1bc1.png
qbwww 发表于 2022-10-2 16:14 | 显示全部楼层
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
Pulitzer 发表于 2022-10-8 09:21 | 显示全部楼层

HSI、HSE以及PLLCLK经过分频或者倍频作为系统时钟SYSCLK来使用。
Uriah 发表于 2022-10-8 16:22 | 显示全部楼层

TIM4只是做基本时钟,不涉及外面其它硬件,
Bblythe 发表于 2022-10-8 19:21 | 显示全部楼层

这么简单,那么程序员大概率就要失业了
童雨竹 发表于 2023-7-1 08:18 | 显示全部楼层

128以上的某些地址为特殊寄存器使用,不能给程序用
Pulitzer 发表于 2023-7-1 09:21 | 显示全部楼层

主定时器为TIM1,通道2配置为PWM输出
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部