利用STM32的定时器输出PWM(1)

2019-04-15 19:24发布

data/attach/1904/anss4sg8959zk6xzz83kshivn8pd3968.jpgdata/attach/1904/aoqel8rcptfumdl6rmvk5pgl3qwub32t.jpgdata/attach/1904/9575wx379dzkbcvin8laslcuo0pfpspv.jpgdata/attach/1904/0xn09e6w1ms938y3a5gz7fuz6r3hav0f.jpgdata/attach/1904/qh0qfjm8lp10px87rkpexdt63bbgjvwx.jpgdata/attach/1904/1qume17t34i4k6vh5ktjb2dpivtw5qu5.jpgdata/attach/1904/lfqun2o35v31czfybmr38hfea6fm3fyl.jpg 使用芯片:STM32F103ZET6 目的:利用stm32的定时器3输出PWM 所用寄存器及相应位(参考STM32参考手册): (1)控制寄存器1(TIM1_CR1)
0CEN:计数器使能位;通过函数void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState)  来实现
4DIR:计数方式,默认向上,也可以设置为向下计数; 5、6CMS:设置计数对齐方式; 7ARPE:自动重装载预装载允许位,为0TIMx_ARR没有缓冲,为1TIMx_ARR被装入缓冲器 8、9CKD设置定时器的时钟分频因子为1、2、4。
(2)DMA/中断使能寄存器(TIMx_DIER)
0UIE更新中断允许位,为0时表示禁止更新中断,为1时表示运行更新中断。通过函数TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState )函数来实现。
(3)预分频寄存器(TIMx_PSC)
全部位:预分频器的值。计数器的时钟频率CK_CNT=fCK_PSC/(PSC[15:0]+1)。PSC包含了当更新事件产生时装入当前预分频器寄存器的值。用来设置时钟分频因子,再提供给计数器,作为计数器的时钟
(4)自动重装载寄存器(TIMx_ARR)
全部位:自动重装载的值,包含了将要传送至实际的自动重装载寄存器的数值。当自动重装载的值为空时,计数器不工作。
(5)计数器(TIMx_CNT)
全部位:计数器的值
(6)状态寄存器(TIMx_SR)

该定时器用来标记当前与定时器相关的各种事件/中断是否发生0UIF更新中断标记。当产生更新事件时该位由硬件置“1”,由软件清“0”。 0时表示无更新事件产生;为1时更新中断等待响应。当寄存器被更新时该位由硬件置“1”。
(7)捕获/比较模式寄存器(TIMx_CCMR1/2)  
TIMx_CCMR1控制CH1CH2,TIMx_CCMR2控制CH3CH44-6、12-14OCxM模式设置位,总共可配置成7种模式PWM模式要将这三位设置成110/111两种PWM模式的区别就是输出电平的极性相反。
(8)捕获/比较使能寄存器(TIMx_CCER)
CCxE位:输入/捕获x输出使能,这里CCx通道要配置为输出:该位为0表示关闭,OC1禁止输出;为1时开启,OCx信号输出到对应的输出引脚。
(9)捕获/比较寄存器(TIMx_CCR1~4)
四个寄存器类似,以CCR1为例。 分别对应4个输出通道CH1~CH4输出模式下,该寄存器的值与CNT的值比较,并在OCx端口上产生输出信号。可通过调用函数void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2)修改占空比