STM32 TIM1的PWM没有输出

来源:互联网 发布:破解软件的app 编辑:程序博客网 时间:2024/05/21 21:35

设置了TIM1的CHN1及CHN4输出PWM,代码如下,但是仿真的波形不对,上设备也不正确:

 

RCC->APB2ENR|=1<<11;       //TIM1时钟使能       RCC->APB2ENR|=1<<2;    //使能PORTA时钟  GPIOA->CRH&=0XFFFFFFF0;//PA8输出GPIOA->CRH|=0X0000000B;//通用推挽输出   GPIOA->ODR|=1<<8;//PA8上拉GPIOA->CRH&=0XFFFF0FFF;//PA11输出GPIOA->CRH|=0X0000B000;//通用推挽输出   GPIOA->ODR|=1<<11;//PA11上拉TIM1->ARR=arr;//设定计数器自动重装值 TIM1->PSC=psc;//预分频器不分频TIM4->ARR=arr;//设定计数器自动重装值 TIM4->PSC=psc;//预分频器不分频TIM1->CCMR1|=6<<4;  //CH1 PWM2模式 TIM1->CCMR1|=1<<3;  //CH1预装载使能   TIM1->CCMR2|=7<<12; //CH4 PWM2模式 TIM1->CCMR2|=1<<11; //CH4预装载使能   TIM1->CCER|= pwdState << 0;   //OC1 输出使能   TIM1->CCER|= pwdState << 12;   //OC1 输出使能      TIM1->CR1=0x8000;   //ARPE使能 TIM1->CR1|=0x01;    //使能定时器1   

查寄存器手册,发现TIM1有一个MOE位,控制了TIM1的输出:MOE: 主输出使能 (Main output enable) 位15 一旦刹车输入有效,该位被硬件异步清’0’。根据AOE位的设置值,该位可以由软件清’0’或被自动置1。它仅对配置为输出的通道有效。 0:禁止OC和OCN输出或强制为空闲状态; 1:如果设置了相应的使能位(TIMx_CCER寄存器的CCxE、CCxNE位),则开启OC和OCN输出。 有关OC/OCN使能的细节,参见13.4.9TIM1和TIM8捕获/比较使能寄存器(TIMx_CCER)。

加上下面这句代码,输出就正常了:        

                     TIM1->BDTR |= 1<<15;