看过了好多原子哥的例程,查了好久还是查不出原因,我接上电机编码器到PA15(TIM2 CH1)和PB3
(TIM2 CH2),转电机有反应,TIM2->CNT的值只在0和ARR这两个值变化。复用这些问题都考虑过了。
下图是我在转电机时,TIM2定时器的变化,最左栏代表TIM2->CNT,(arr设置的是0X270F),第二栏代表TIM2->CR1,第三栏代表TIM2->SR。
下面是我的初始化函数
void Timer2_Init()//PA15 PB3 两相编码器输入
{ RCC->APB1ENR|=1<<0; //TIM2时钟使能,左轮
RCC->APB2ENR|=1<<3; //GPIOB端口时钟
RCC->APB2ENR|=1<<2; //GPIOA端口时钟
RCC->APB2ENR|=1<<0;
AFIO->MAPR&=0XF8FFFFFF;
AFIO->MAPR|=0X04000000; //关闭PA15 JTAG功能
AFIO->MAPR&=0XFFFFFCFF;
AFIO->MAPR|=0X00000100;//PA15 和PB3 复用为TIM2
GPIOA->CRH&=0x0FFFFFFF;
GPIOA->CRH|=0X8000000;
GPIOB->CRL&=0xFFFF0FFF;
GPIOB->CRL|=0X00008000;//GPIO初始化
TIM2->CCER|=1<<1; //反相
TIM2->CCMR1&=0X0000;
TIM2->CCMR1|=1<<8;//CH1对应TI1
TIM2->CCMR1|=1<<0;//CH2对应TI2
TIM2->SMCR&=0xFFF8;
TIM2->SMCR|=0x0003;//CH1与CH2同时计数
TIM2->CR1&=0x0000;
TIM2->CR1|=0x01; //使能定时器2
}
一周热门 更多>