STM32F103C8T6 PWM资源:
高级定时器(TIM1):7路
通用定时器(TIM2~TIM4):各4路
PWM输出模式:
PWM模式1:在向上计数时,一旦 CNT < CCRx 时输出为有效电平,否则为无效电平; 在向 下计数时,一旦 CNT > CCRx 时输出为无效电平,否则为有效电平。
PWM模式2:在向上计数时,一旦 CNT < CCRx 时输出为无效电平,否则为有效电平; 在向 下计数时,一旦 CNT > CCRx 时输出为有效电平,否则为无效电平。
PWM周期与频率:
PWM占空比:
由TIMx_CCRx寄存器决定。
PWM实验
需求:使用PWM点亮LED1实现呼吸灯效果
LED灯为什么可以越来越亮,越来越暗?
这是由不同的占空比决定的。
如何计算周期/频率?
假如频率为 2kHz ,则:PSC=71,ARR=499
LED1连接到哪个定时器的哪一路?
学会看产品手册:
开始实战!
1. 设置时钟
2. 设置定时器
记得把极性设置为Low,因为LED灯是低电平才亮。
3. 配置工程
以前讲过哈哈哈哈
4. 业务代码
// 定义变量
uint16_t pwmVal = 0; //调整PWM占空比
uint8_t dir = 1; //设置改变方向。1:占空比越来越大;0:占空比越来越小
// 使能 Timer4 第3通道 PWM 输出
HAL_TIM_PWM_Start( & htim4, TIM_CHANNEL_3);
// while循环实现呼吸灯效果
while (1) {
HAL_Delay(1);
if (dir) pwmVal++;
else pwmVal--;
if (pwmVal > 500) dir = 0;
if (pwmVal == 0) dir = 1;
//修改比较值,修改占空比
__HAL_TIM_SetCompare( & htim4, TIM_CHANNEL_3, pwmVal);
}