目录
前言
本篇博客,使用TIM3和TIM4,分别输出一个PWM波形,PWM的占空比随时间变化,去驱动你外接的一个LED以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LED呼吸灯的效果。
一、PWM
- 含义
PWM(Pulse Width Modulation)即脉冲宽度调制,简称脉宽调制。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术;它是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。 - 基本原理
占空比:是一个脉冲周期内,高电平的时间与整个周期时间的比例。
在一定的频率下,通过不同的占空比 即可得到不同的输出模拟电压。
PWM就是在合适的信号频率下,通过一个周期里改变占空比的方式来改变输出的有效电压。
频率很高时,看不到闪烁,占空比越大,LED越亮;
频率很低时,可看到闪烁,占空比越大,LED越亮。
所以,在频率一定下,可以用不同占空比改变LED灯的亮度。 使其达到一个呼吸灯的效果。
二、工程代码
1.用STM32CubeMx创建工程
创建新项目
点击ACCESS TO MCU SELECTOR,在Part Number里选择我们的核心板(STM32F103C8)
配置RCC和SYS
配置定时器TIME3
勾选Internal Clock(内部时钟)
通道1选择:PWM Generation CH1(PWM输出通道1)
Prtscaler (定时器分频系数) : 71
Counter Mode(计数模式):Up(向上计数模式)
Counter Period(自动重装载值) : 500
CKD(时钟分频因子) :No Division (不分频 )
配置定时器TIM4
与TIME3相同
配置时钟
点击CLOCK CONFIGURATION,然后将HCLK改为72Mhz,点击回车
生成项目
2.用Keil编写代码
在main.c中定义一个全局变量
uint16_t pwm=0; //占空比
打开PWM通道:
在主函数中添加两行代码
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_1);
在while循环中写入调用代码
while (pwm< 500)
{
pwm++;
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwm);
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_1, pwm);
HAL_Delay(1);
}
while (pwm)
{
pwm--;
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwm);
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_1, pwm);
HAL_Delay(1);
}
HAL_Delay(200);
3.硬件连接
USB转TTL
3V3 —> 3V3
GND —> GND
RXD —> A9
TXD —> A10
LED灯连接
LED灯短脚 —> A6
LED灯长脚 —> 3V3
PB6 —> PC13