嵌入式学习之定时器的PWM输出
配置步骤:
(1)使能定时器以及输出引脚的时钟(若用到重映射则使能AFIO时钟)。
(2)初始化GPIO,若没有重映射仅有复用则按照8.1.11配置就行了,若有重映射即打开重映射。例如:
重映射都是固定的,比如上图你使能了TIM3的部分重映射,我们肯定是在确定要用到PB5或者PB4之后我们才去使能重映射。
(3)配置要用到的定时器的时钟来源以及时基单元:
注意:若我们使用内部时钟CK_INT作为时钟来源,应注意手册中的一句话:“这里的 CK_INT时钟是从APB1倍频的来的,STM32中除非APB1的时钟分频数设置为1,否则通用定时器TIMx的时钟是 APB1 时钟的 2 倍,当 APB1 的时钟不分频的时候,通用定时器 TIMx 的时钟就等于APB1 的时钟。”
(4)初始化pwm输出比较参数:见附2
①选择pwm输出模式
输出模式1:当计数器的值小于比较器的值时有效(无论是向上向下计数)
输出模式1:当计数器的值大于比较器的值时有效(无论是向上向下计数)
②选择输出极性
用来设置有效的信号是输出1还是0
③使能相应通道(对应引脚)的输出
④设置比较值
(5)设置时基单元的自动重装载和比较寄存器的自动重装载
注意:怎样理解计数器的ARPE位(怎样理解自动重装载):
假如ARR原值是300,修改为100:
ARPE写0时,无缓冲,直接写入影子寄存器。CNT本次跑到新值100就溢出。
ARPE写1时,等到CNT跑到原值300溢出后,才写入影子寄存器,下次跑到新值100溢出。
(6)使能相应的计时器
(7)通过库函数TIM_SetCompare1();操作寄存器CCR1改变比较值从而改变占空比,见附1.
注意:PWM输出的周期(也可以说频率)与时基单元的计数器有关,PWM输出的占空比(就是指正电平在一个周期内所占的时间比率)与比较器的值有关。
附1.PWM工作过程
附2.相应的寄存器