打印
[应用相关]

STM32CubeMX教程-PWM呼吸灯

[复制链接]
楼主: 远芳侵古道
手机看帖
扫描二维码
随时随地手机跟帖
21
远芳侵古道|  楼主 | 2022-4-29 18:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
Mode   选择PWM模式1

Pulse(占空比值)  先给0

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

PWM 极性:   设置为低电平        PS:  由于LED是低电平点亮,所以我们把极性设置为low

使用特权

评论回复
22
远芳侵古道|  楼主 | 2022-4-29 18:26 | 只看该作者

使用特权

评论回复
23
远芳侵古道|  楼主 | 2022-4-29 18:26 | 只看该作者
在 Parameter Settings 页配置预分频系数为 71,计数周期(自动加载值)为 499,定时器溢出频率,即PWM的周期,就是 72MHz/(71 1)/(499 1) = 2kHz。

使用特权

评论回复
24
远芳侵古道|  楼主 | 2022-4-29 18:27 | 只看该作者
PWM频率:

Fpwm =Tclk / ((arr 1)*(psc 1))(单位:Hz)
arr 是计数器值
psc 是预分频值

使用特权

评论回复
25
远芳侵古道|  楼主 | 2022-4-29 18:27 | 只看该作者
占空比:

duty circle = TIM3->CCR1 / arr  //(单位:%)
TIM3->CCR1   //用户设定值

使用特权

评论回复
26
远芳侵古道|  楼主 | 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可以修改频率。

使用特权

评论回复
27
远芳侵古道|  楼主 | 2022-4-29 18:40 | 只看该作者
3.时钟源设置

使用特权

评论回复
28
远芳侵古道|  楼主 | 2022-4-29 18:40 | 只看该作者
32的时钟树框图  如果不懂的话请看《【STM32】系统时钟RCC详解(超详细,超全面)》

1选择外部时钟HSE 8MHz   

2PLL锁相环倍频72倍

3系统时钟来源选择为PLL

4设置APB1分频器为 /2

使用特权

评论回复
29
远芳侵古道|  楼主 | 2022-4-29 18:41 | 只看该作者
4.项目文件设置

使用特权

评论回复
30
远芳侵古道|  楼主 | 2022-4-29 18:42 | 只看该作者
1 设置项目名称

2 设置存储路径

3 选择所用IDE

使用特权

评论回复
31
远芳侵古道|  楼主 | 2022-4-29 18:42 | 只看该作者

使用特权

评论回复
32
远芳侵古道|  楼主 | 2022-4-29 18:43 | 只看该作者
5.创建工程文件

    点击GENERATE CODE  创建工程。

    新建的工程所有配置都是默认的  我们需要自行选择下载模式,勾选上下载后复位运行。

使用特权

评论回复
33
远芳侵古道|  楼主 | 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->即可访问与定时器相关寄存器

使用特权

评论回复
34
远芳侵古道|  楼主 | 2022-4-29 18:44 | 只看该作者
实验现象如下:

使用特权

评论回复
35
qbwww| | 2022-10-2 16:14 | 只看该作者
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

使用特权

评论回复
36
Pulitzer| | 2022-10-8 09:21 | 只看该作者

HSI、HSE以及PLLCLK经过分频或者倍频作为系统时钟SYSCLK来使用。

使用特权

评论回复
37
Uriah| | 2022-10-8 16:22 | 只看该作者

TIM4只是做基本时钟,不涉及外面其它硬件,

使用特权

评论回复
38
Bblythe| | 2022-10-8 19:21 | 只看该作者

这么简单,那么程序员大概率就要失业了

使用特权

评论回复
39
童雨竹| | 2023-7-1 08:18 | 只看该作者

128以上的某些地址为特殊寄存器使用,不能给程序用

使用特权

评论回复
40
Pulitzer| | 2023-7-1 09:21 | 只看该作者

主定时器为TIM1,通道2配置为PWM输出

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则