OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6247|回复: 7

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

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2015-2-2
在线时间
0 小时
发表于 2015-2-2 21:55:46 | 显示全部楼层 |阅读模式
5金钱
看过了好多原子哥的例程,查了好久还是查不出原因,我接上电机编码器到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
}




最佳答案

查看完整内容[请看2#楼]

回复【4楼】正点原子: ---------------------------------  奋战了一整天,逐个排查原因,终于解决问题了。问题还是端口复用的事。 但是令人疑惑的是,以下方法1(库函数)和方法2(寄存器),只有方法1能行,方法二就出不来结果,具体原因也不愿意去查了,反正应该是有某个资料有重大错误,我写寄存器全是按照手册来的。 方法1:【能行】 RCC->APB2ENR|=1<<0;  RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2015-2-2
在线时间
0 小时
 楼主| 发表于 2015-2-2 21:55:47 | 显示全部楼层
回复【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

之前感觉寄存器设置文件体积比库函数小巧,就一直用寄存器,想想还是库函数靠谱。
哎,为了这个问题白白浪费了一整天的时间。终于可以睡觉了。
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2015-2-2
在线时间
0 小时
 楼主| 发表于 2015-2-2 22:15:21 | 显示全部楼层
TIM2->ARR=10000-1;  //top  (0x270f) 
TIM2->SC=0;  
这些也设置了,上面没复制出来
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2015-2-2
在线时间
0 小时
 楼主| 发表于 2015-2-2 23:43:32 | 显示全部楼层
求助啊!!!!!!!!!!!!!!!!!!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-2-2 23:52:31 | 显示全部楼层
帮顶....
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2015-2-2
在线时间
0 小时
 楼主| 发表于 2015-2-3 03:00:23 | 显示全部楼层
定时器2回复【4楼】正点原子:
---------------------------------
定时器2,在PA0\PA1能用编码器模式,复用到PA15\PB3怎么会就不能使用编码器模式了?哎,PCB板已经做好了,改不了引脚。。。
回复

使用道具 举报

2

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2012-4-2
在线时间
14 小时
发表于 2017-8-11 22:37:45 | 显示全部楼层
我也遇到这问题
回复

使用道具 举报

12

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
金钱
262
注册时间
2019-5-27
在线时间
74 小时
发表于 2019-11-3 22:58:44 | 显示全部楼层
我也是按照中文参考手册配置的寄存器版本,用的是STM32F103C8T6,用TIM2的正交编码器功能,CH1、CH2连接编码电机的AB相,测转速的时候
用TIM3计时单位时间为50ms,串口输出TIM2->CNT的值为0,1,65535,我也是很纳闷
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-28 06:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表