一、环境配置
软件:STM32CubeMX:6.6.1 Keil 5.31 mcuisp 硬件:STM32F103C8T6核心板
二、PWM简介
PWM含义: PWM(Pulse Width Modulation)即脉冲宽度调制,简称脉宽调制。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术;它是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。
PWM基本原理: PWM就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也可以这样理解,PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。只要带宽足够,任何模拟值都可以使用 PWM 进行编码。
PWM优点及应用范围: 由于其控制简单、灵活和动态响应好等优点而成为电力电子技术应用最广泛的控制方式,其应用领域包括测量,通信, 功率控制与变换,电动机控制、伺服控制、调光、开关电源,甚至某些音频放大器,因此学习PWM具有十分重要的现实意义。
三、使用STM32CubeMX配置工程
1、新建工程,进行基本配置。通过点击“ACCESS TO MCU SELECTOR”来创建一个新的工程: 
2.搜索型号,选择合适的型号进行工程建立  3.设置RCC 
4.设置SYS 
5.配置定时器3。如图: 
6.配置定时器4。如图: 
7.先点击“Clock Configuration”页面,按照下面红色框中的值,从左到右进行配置即可。 
8.在工程管理页面“Project Manager”,先点击“Code Generator”,选择如下配置: 
9.再点击 “Project” ,进行如下配置: 
四、使用Keil配置代码
打开main.在如下图地区分别添加指定代码:
uint16_t duty_num1 = 10;
uint16_t duty_num2 = 20;

HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_2);

while (1)
{
HAL_Delay(50);
duty_num1=duty_num1+10;
duty_num2=duty_num2+20;
if(duty_num1>500)
{
duty_num1=0;
}
__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_2,duty_num1);
if(duty_num2>500)
{
duty_num2=0;
}
__HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_2,duty_num2);
}

五、运行效果
六、用Keil自带的逻辑仿真器观察占空比
配置这里不再讲解,可参考另一篇博客: https://blog.csdn.net/qq_55894922/article/details/127232999?spm=1001.2014.3001.5501 观察结果:
七、总结
本次实验成功完成了用STM32CubeMX完成输出PWM波形并实现呼吸灯。了解到了很多关于PWM的知识,又积累了一点嵌入式的知识。
八、参考资料
http://www.mcublog.cn/stm32/2021_01/stm32cubemx-pwm-huxideng/ https://blog.csdn.net/qq_45237293/article/details/111997424 https://blog.csdn.net/zmhDD/article/details/111942507 https://blog.csdn.net/qq_55894922/article/details/127232999?spm=1001.2014.3001.5501
|