目录
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.设置定时器
3.配置工程
4.编写代码
uint16_t pwmVal = 0;//调整PWN占空比
uint8_t dir = 1; //设置改变方向,1:越来越亮;0:越来越暗
MX_GPIO_Init();
MX_TIM4_Init();
使能 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;
else if(pwmVal == 0)
dir = 1;
//修改比较值,来修改占空比
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, pwmVal);
}