void MiniBalance_PWM_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1; //TIM3时钟使能
RCC->APB2ENR|=1<<3; //PORTB时钟使能
GPIOB->CRL&=0XFFFFFF00; //PORTB0 1复用输出
GPIOB->CRL|=0X000000BB; //PORTB0 1复用输出
TIM3->ARR=arr;//设定计数器自动重装值
TIM3->PSC=psc;//预分频器不分频
TIM3->CCMR2|=6<<12;//CH4 PWM1模式
TIM3->CCMR2|=6<<4; //CH3 PWM1模式
TIM3->CCMR2|=1<<11;//CH4预装载使能
TIM3->CCMR2|=1<<3; //CH3预装载使能
TIM3->CCER|=1<<12; //CH4输出使能
TIM3->CCER|=1<<8; //CH3输出使能
TIM3->CR1=0x8000; //ARPE使能
TIM3->CR1|=0x01; //使能定时器3
}
需要更改pwm时候应该对哪个寄存器进行操作:
#define PWMA TIM3->CCR4 //倒立摆仅使用一路驱动 使用的A路
main
{
MiniBalance_PWM_Init(7199,0); //=====初始化PWM 10KHZ,用于驱动电机
while(1)
{
PWMA=3000; //0~7200
}
}
1.
110: PWM模式1- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为 无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否 则为有效电平(OC1REF=1)。 111: PWM模式2- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为 有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电 平。 |
2.
其中TIMX_EGR寄存器的UG位初始化所有寄存器没有设置是因为在寄存器版的程序里面的stm32f10x.c中已经定义为了‘1’:
重新初始化计数器,并产生一个更新事件 |
3.
OCx的极性可以通过软件在TIMx_CCER寄存器中的CCxP位设置,它可以设置为高电平有效或
低电平有效。
CC1P:输入/捕获1输出极性 (Capture/Compare 1 output polarity) CC1通道配置为输出: 0: OC1高电平有效 1: OC1低电平有效 CC1通道配置为输入: 该位选择是IC1还是IC1的反相信号作为触发或捕获信号。 0:不反相:捕获发生在IC1的上升沿;当用作外部触发器时, IC1不反相。 1:反相:捕获发生在IC1的下降沿;当用作外部触发器时, IC1反相。 |
这里没有设置是因为默认是‘1’。