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)
第0
位CEN:计数器使能位;通过函数void
TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState) 来实现。
第4
位DIR:计数方式,默认向上,也可以设置为向下计数;
第5、6
位CMS:设置计数对齐方式;
第7
位ARPE:自动重装载预装载允许位,为0
时TIMx_ARR没有缓冲,为1
时TIMx_ARR被装入缓冲器
第8、9
位CKD:
设置定时器的时钟分频因子为1、2、4。
(2)
DMA/中断使能寄存器(TIMx_DIER)
第0
位UIE:
更新中断允许位,为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)
该定时器用来标记当前与定时器相关的各种事件/中断是否发生。
第0
位UIF:
更新中断标记。当产生更新事件时该位由硬件置“1”
,由软件清“0”。
为0
时表示无更新事件产生;为1
时更新中断等待响应。当寄存器被更新时该位由硬件置“1”。
(7)
捕获/比较模式寄存器(TIMx_CCMR1/2)
TIMx_CCMR1控制C
H1和CH2,TIMx_CCMR2控制CH3和CH4。
第4-6、12-14位OCxM:
模式设置位,总共可配置成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)修改占空比。