一、基本配置
首先来基本的配置
1.将debug 改为 模拟输出
3.开始配置引脚
4.配置时钟树(省略)
这里我设置72HZ
5.最后的收尾设置(前面一期有讲)
正式开始PWM的配置
1、PWM的设置需要 定时器的时钟 来控制频率(具体的可以看另一期文章)
这里以TIM3的Channel1为例介绍。
2、先开启内部时钟,然后选择PWM的模式一
可以看到PA6被设置 TIM_CH1
3、接着配置参数
前面提到时钟树72MHZ ,也就是7200万脉冲每秒,为了方便计算,可以将它72分频,这样定时器便是每秒计数1000000次。
可以将自动重装载值设置为数100次,每秒就会有一万次从0数到99的过程,也就是说一秒钟就会输出1万组PWM波形,这就是PWM的频率,10000HZ。
从0数到99这一过程所用的时间也就是PWM的周期,万分之一秒,0.1ms。
由于自动重装值设置为了100-1,所以比较寄存器的值只能在0-99中赋值。
比如这里给50。那么初始的占空比,就是50/100=50%.
之后写代码改变 比较寄存器 的值时候,改的就是这个 50.
如果ARR给2000-1,那么你的比较寄存器的值就是在0-1999之间设置。占空比计算同理。
4、NVIC使能(图略)
至此基本配置结束。后面再收尾生成代码即可。
二、在keil5中编写代码 改变PWM的占空比
找中断服务函数和回调函数的过程不在赘述,在前面 定时器中断 那里有介绍。
这里也是利用 定时器内部中断的方式 来控制PWM的占空比。
这是使能的代码。
下面来看具体的函数实现部分。
int i = 0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim -> Instance == TIM3)
{
__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_3,i+=20);
if(i == 100)
{
i = 0;
}
}
}
这样就可以实现 一个定时器产生中断,每秒触发一次中断,在中断服务程序中,改变PWM的占空比,实现LED亮度的周期性变化。
这里提一下,LED的引脚 应该负极接地,正极链接到PWM的输出口。
---------------------------------------------------------------------------------------------------------------
文章结束,记录stm32学习。
标签:定时器,配置,STM32CubeMX,TIM,占空比,100,PWM From: https://blog.csdn.net/2403_87830841/article/details/143116910