OpenEdv-开源电子网

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

关于编码器,watch窗口的TIM3->CNT没有实时变化

[复制链接]

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2016-3-21
在线时间
23 小时
发表于 2016-8-7 23:50:38 | 显示全部楼层 |阅读模式
15金钱
本帖最后由 xiaov 于 2016-8-8 00:00 编辑

小弟最近在学PID控制电机,发现watch窗口里面TIM3的CNT一直是0,芯片是stm32f103c8,编码器的A、B相分别和PA6(TIM3 CH1)、PA7(TIM3 CH2)相连,电机、编码器和驱动板都是好的,接线也没错,用示波器测PA6、PA7显示方波,说明编码器有信号传过来,可是CNT一直是0,TIM3的其它寄存器的值也都显示为0。然后我把原子哥的定时器中断的例程代码改了拿来测试,watch窗口有显示CNT的实时变化,TIM3的寄存器数值也有变化,所以我觉得是我的编码器的代码出了问题,但是改了一晚上也没整出来,跪求大神指导一下。测试程序:
int main(void)
{                  
          PWM_Init();
          Encoder_Init();        
          PA8=1;                   //使能
          while(1)
         {
                 a=Encoder_Get_CNT();         
                 TIM1->CCR2 = 1000;
         }
}

编码器初始化函数
void Encoder_Init(void)
{
          GPIO_InitTypeDef GPIO_InitStruc;        
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_AFIO,ENABLE);
        
          GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);
         
          GPIO_InitStruc.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;
          GPIO_InitStruc.GPIO_Mode=GPIO_Mode_IPU;
          GPIO_InitStruc.GPIO_Speed=GPIO_Speed_2MHz;
          GPIO_Init(GPIOA,&GPIO_InitStruc);
        
          TIM_EncoderInterfaceConfig(TIM3,TIM_EncoderMode_TI12,TIM_ICPolarity_Falling,TIM_ICPolarity_Falling);
               
          TIM_Cmd(TIM3,ENABLE);         
}

int cnt = 0;

int Encoder_Get_CNT(void)
{        
        cnt = (TIM3->CNT)-0x7fff;
        TIM3->CNT = 0x7fff;
        return cnt;


测试程序

测试程序

watch窗口

watch窗口
QQ截图20160807235939.png

最佳答案

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

定时器也要开时钟,和IO口一样。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11561
金钱
11561
注册时间
2014-4-1
在线时间
1318 小时
发表于 2016-8-7 23:50:39 | 显示全部楼层

定时器也要开时钟,和IO口一样。


回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2016-3-21
在线时间
23 小时
 楼主| 发表于 2016-8-8 11:43:37 | 显示全部楼层
本帖最后由 xiaov 于 2016-8-8 12:18 编辑
xuande 发表于 2016-8-8 08:41
定时器也要开时钟,和IO口一样。

解决了 加了时钟 把映射去掉就好了 因为代码是参照去年师兄写的 我也刚入门 不太清楚 可能是编码器不一样 或者是设置模式不同的原因吧 谢谢了
回复

使用道具 举报

17

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
298
金钱
298
注册时间
2016-7-24
在线时间
107 小时
发表于 2016-8-26 10:35:02 | 显示全部楼层
xiaov 发表于 2016-8-8 11:43
解决了 加了时钟 把映射去掉就好了 因为代码是参照去年师兄写的 我也刚入门 不太清楚 可能是编码器不一样 ...

你好,能把你解决后的代码共享一下么
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2016-3-21
在线时间
23 小时
 楼主| 发表于 2016-9-1 17:11:54 | 显示全部楼层
fanhuayishi 发表于 2016-8-26 10:35
你好,能把你解决后的代码共享一下么

就是在原来的代码上 给定时器3加个时钟就好啦
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-29 23:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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