贴块 STM32 用高级定时器 T1 生成CH1 CH4 的PWM 的初始化程序,大家小走弯路
RCC->APB2ENR|=1<<11; //TIM1时钟使能
////////////////////////////////////////
GPIOA->CRH&=0XFFFF0FF0;//PA8 11 输出
GPIOA->CRH|=0X0000B00B;//复用功能输出
////////////////////////////////////////
TIM1->BDTR |=0xC0; //ARPE使能
TIM1->ARR=arr;//设定计数器自动重装值
TIM1->
SC=psc;//预分频器不分频
TIM1->CCMR1|=6<<4; //CH2 PWM2模式 CH1/2
TIM1->CCMR1|=1<<3; //CH2预装载使能
TIM1->CCMR2|=6<<12; //CH2 PWM2模式 CH3/4
TIM1->CCMR2|=1<<11; //CH2预装载使能
TIM1->CCER|=1<<0; //OC2 输出使能
TIM1->CCER|=1<<12; //OC2 输出使能
TIM1->CR1 |=0x80; //ARPE使能
TIM1->CR1|=0x01; //使能定时器1
TIM1->BDTR|=0x8000; //使能定时器1输出
T1 和其它的定时器不一样,T2 T3 T4 都不需要最后这一句, 而调T1时,没有最后的这个BDTR,死活不出PWM。感谢 正点原子的指导。
确实不行 仿真也不能输出波形,楼主用的是比较输出波形吧 修改如下即可
void Tim1_init(u16 arr,u16 psc)
{
RCC->APB2ENR|=1<<11; //TIM1时钟使能
////////////////////////////////////////
GPIOA->CRH&=0XFFFF0FF0;//PA8 11 输出
GPIOA->CRH|=0X0000B00B;//复用功能输出
////////////////////////////////////////
TIM1->BDTR |=0xC0; //ARPE使能
TIM1->ARR=arr;//设定计数器自动重装值
TIM1->SC=psc;//预分频器不分频
TIM1->CCMR1|=6<<4; //CH2 PWM2模式 CH1/2
TIM1->CCMR1|=1<<3; //CH2预装载使能
TIM1->CCMR2|=6<<12; //CH2 PWM2模式 CH3/4
TIM1->CCMR2|=1<<11; //CH2预装载使能
TIM1->CCER|=1<<0; //OC2 输出使能
TIM1->CCER|=1<<12; //OC2 输出使能
TIM1->CCR1=3000;
TIM1->CCR4=4000;
TIM1->CR1 |=0x80; //ARPE使能
TIM1->CR1|=0x01; //使能定时器1
TIM1->BDTR|=0x8000; //使能定时器1输出
}
TIM1->CCMR1|=6<<4; //CH2 WM2模式 CH1/2
TIM1->CCMR1|=1<<3; //CH2预装载使能
TIM1->CCMR2|=6<<12; //CH2 WM2模式 CH3/4
TIM1->CCMR2|=1<<11; //CH2预装载使能
这里是不是应该改成这样子
TIM1->CCMR1|=7<<4; //CH2 WM2模式 CH1
TIM1->CCMR1|=1<<3; //CH2预装载使能
TIM1->CCMR1|=7<<12; //CH2 WM2模式 CH2
TIM1->CCMR1|=1<<11; //CH2预装载使能
TIM1->CCMR2|=7<<4; //CH2 WM2模式 CH3
TIM1->CCMR2|=1<<3; //CH2预装载使能
TIM1->CCMR2|=7<<12; //CH2 WM2模式 CH3
TIM1->CCMR2|=1<<11; //CH2预装载使能
一周热门 更多>