开发环境:VSCODE(gcc编译链)+STM32CubeMX(也可以使用HUAWEI-LiteOS-Studio) 。 代码:链接:https://pan.baidu.com/s/1uXfIR0GFQOBZPl1NfQP08w
提取码:6b0c
PWM介绍
PWM定义:脉冲宽度调制(PulseWidthModulation,PWM)简称脉宽调制。通俗讲,PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。
占空比定义:占空比就是高电平所占整个周期的时间,如下图所示:
1.选择TIM3
2.设置定时器时钟源为内部时钟源
设置定时器CH1为PWM模式
3.对应管脚自动设置为复用模式
4.可自行选择是否开启定时器中断
Channel1~4 就是设置定时器通道的功能 (输入捕获、输出比较、PWM输出、单脉冲模式)
Mode 选择PWM模式1
Pulse(占空比值) 先给0
Fast Mode PWM脉冲快速模式 : 和我们配置无关,不使能
PWM 极性: 设置为低电平 PS: 由于LED是低电平点亮,所以我们把极性设置为low
#include "pwm_led.h"
uint16_t pwmVal=0; //PWM占空
void TimCH_Config(void)
{
// HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);
// HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3);
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);
}
void TIMCH_PWM_LED(void)
{
while(pwmVal<2000)
{
pwmVal ++;
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_2, pwmVal); //PWM CH2
//__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_3, pwmVal); //PWM CH3
//__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_4, pwmVal); //PWM CH4
HAL_Delay(1);
}
while(pwmVal)
{
pwmVal --;
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_2, pwmVal); //PWM CH2
//__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_3, pwmVal); //PWM CH3
//__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_4, pwmVal); //PWM CH4
HAL_Delay(1);
}
HAL_Delay(200);
}
|