PWM 原理分析
1,
RCC->APB1ENR |= 0x00000002;//使能Tim3 时钟
RCC->APB2ENR |= 0x00000011;//使能管脚C
2、使能C端口:使用PIN7,输出模式:复用推挽输出
频率:50MHZ。
10:复用功能推挽输出模式
11:输出模式,最大速度50MHz
GPIOC->CRL |= 0xB0000000;
3、配置时钟Tim3,
必须设置的便量
频率=72000/900=8Khz
设置用来作为TIMx时钟频率预分频值,100Khz计数频率
设置时钟分割:TDTS = Tck_tim
TIM向上计数模式
对应寄存器操作:
TIM3->CR1
控制寄存器操作,
位0 CEN:使能计数器 (Counter enable)
位4 DIR:方向 (Direction)
位9:8 CKD[1:0]: 时钟分频因子 (Clock division)
TIM3->CR1 = 0x00000000 //暂时未安排使能
TIM3->ARR
自动重装载寄存器(TIMx_ARR)
TIM3->ARR = 0x00000385
TIMx->PSC
预分频器(TIMx_PSC)
PSC[15:0]:预分频器的值 (Prescaler value)
TIM3->PSC = 0x00000000;
TIMx->EGR
事件产生寄存器(TIMx_EGR)
UG: 产生更新事件 (Update generation)
0:无动作;
1:重新初始化计数器,并产生一个更新事件。注意预分频器的计数器也被清’0’(但是预分频系数不变)。若在中心对称模式下或DIR=0(向上计数)则计数器被清’0’;若DIR=1(向下计数)则计数器取TIMx_ARR的值。
TIMx->EGR = 0x0001
4、改变指定管脚的映射
AFIO->MAPR
复用重映射
位11:10 TIM3_REMAP[1:0]:定时器3的重映像 (TIM3 remapping)
AFIO->MAPR = 0x00000C00
5、PWM初始化
TIM3->CCER
捕获/比较使能寄存器(TIMx_CCER)
位5 CC2P:输入/捕获2输出极性 (Capture/Compare 2 output polarity)
位4 CC2E:输入/捕获2输出使能 (Capture/Compare 2 output enable)
TIM3->CCER = 0x0030
TIM3->CR2
控制寄存器2
TIM3->CR2 = 0x0000;
TIM3->CCMR1
捕获/比较模式寄存器1
位14:12 OC2M[2:0]:输出比较2模式 (Output Compare 2 mode 110
位11 OC2PE:输出比较2预装载使能 (Output Compare 2 preload enable)
TIM3->CCMR1 = 0x6800;
TIM3->CCR2
捕获/比较寄存器2
TIM3->CCR2 = 0x0000;
TIM3->CR1
控制寄存器操作,
位0 CEN:计数器使能 (Counter enable)
1:使能计数器
TIM3->CR1 |= 0x0001