PWM初始化部分代码如下:
void PWM_Init(u16 arr,u16 psc)
{
#if 0
//此部分需手动修改IO口设置
RCC->APB1ENR|=1<<1; //TIM3时钟使能
RCC->APB2ENR|=1<<2; //使能PORTA口时钟
GPIOA->CRH&=0XFFFFFFF0;//PA8输出
GPIOA->CRH|=0X00000004;//浮空输入
GPIOA->CRL&=0X00FFFFFF;//PA6,7输出
GPIOA->CRL|=0XBB000000;//复用功能输出
GPIOA->ODR|=((1<<6)|(1<<7));//PA7上拉
#else
/******** 部分重映像 *********/
//此部分需手动修改IO口设置
RCC->APB1ENR|=1<<1; //TIM3时钟使能
RCC->APB2ENR|=1<<3; //使能PORTB时钟
//端口映射
RCC->APB2ENR|=1<<0; //AFIO时钟使能
AFIO->MAPR &= ~(0x3<<10); // TIM3_REMAP[1:0] = 10,部分重映射
// AFIO->MAPR |= ((0x2<<10)|(1<<28)); // TIM3_REMAP[1:0] = 10,部分重映射
AFIO->MAPR |= (0x2<<10); // TIM3_REMAP[1:0] = 10,部分重映射
GPIOB->CRL&=0XFF00FFFF;//PB 4,5 输出
GPIOB->CRL|=0X00BB0000;//复用功能输出
GPIOB->ODR|=((1<<4)|(1<<5));//PB 4,5 上拉
#endif
TIM3->ARR=arr;//设定计数器自动重装值
TIM3->  SC=psc;//预分频器不分频
TIM3->CCMR1|=7<<12; //CH2 PWM2模式
TIM3->CCMR1|=1<<11; //CH2预装载使能
TIM3->CCMR1|=7<<4; //CH1 PWM2模式
TIM3->CCMR1|=1<<7; //CH1预装载使能
TIM3->CCER|=((1<<0)|(1<<4)); //OC2 输出使能
TIM3->CR1=0x8000; //ARPE使能
TIM3->CR1|=0x01; //使能定时器3
TIM3->CCR2 = 300;
TIM3->CCR1 = 300;
}
当我使用PA口时两路PWM输出正常,当改用PB口时PB5口即CH2无输出,找了好几遍都找不出代码纯在什么问题,求解???
代码是基于原子例程 “ALIENTEK MINISTM32 实验8 PWM输出实验”改的,初始化参数为:
PWM_Init(1000,36); //36分频 t=0.5us。PWM频率=72000/(1000*36)=2Khz
知道的情帮我指点下,谢谢。 |