【求助】 TIM2定时器作编码器用不了

2019-08-14 16:02发布

看过了好多原子哥的例程,查了好久还是查不出原因,我接上电机编码器到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
}




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
kangzhangqi
1楼-- · 2019-08-14 18:20
回复【4楼】正点原子:
---------------------------------
 奋战了一整天,逐个排查原因,终于解决问题了。问题还是端口复用的事。
但是令人疑惑的是,以下方法1(库函数)和方法2(寄存器),只有方法1能行,方法二就出不来结果,具体原因也不愿意去查了,反正应该是有某个资料有重大错误,我写寄存器全是按照手册来的。

方法1:【能行】
RCC->APB2ENR|=1<<0; 
RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO, ENABLE); 
AFIO->MAPR&=0XF8FFFFFF;  
AFIO->MAPR|=0X04000000;
GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2  ,ENABLE);

方法2:【不能行,TIM2->CNT无变化】
RCC->APB2ENR|=1<<0;      
AFIO->MAPR&=0XF8FFFFFF; 
AFIO->MAPR|=0X04000000; //关闭PA15 JTAG功能
AFIO->MAPR&=0XFFFFFCFF;
AFIO->MAPR|=0X00000100;//PA15 和PB3 复用为TIM2

之前感觉寄存器设置文件体积比库函数小巧,就一直用寄存器,想想还是库函数靠谱。
哎,为了这个问题白白浪费了一整天的时间。终于可以睡觉了。
kangzhangqi
2楼-- · 2019-08-14 20:41
TIM2->ARR=10000-1;  //top  (0x270f) 
TIM2->SC=0;  
这些也设置了,上面没复制出来
kangzhangqi
3楼-- · 2019-08-14 23:32
求助啊!!!!!!!!!!!!!!!!!!
正点原子
4楼-- · 2019-08-15 02:09
帮顶....
kangzhangqi
5楼-- · 2019-08-15 02:37
 精彩回答 2  元偷偷看……
mculove
6楼-- · 2019-08-15 03:41
我也遇到这问题

一周热门 更多>