7800|22

466

帖子

0

TA的资源

版主

楼主
 

stm32正交编码程序 [复制链接]

本帖最后由 weizhongc 于 2015-7-27 09:54 编辑
  1. <div class="blockcode"><blockquote>void ENC_Init(void)
  2. {
  3. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  4. TIM_ICInitTypeDef TIM_ICInitStructure;
  5. GPIO_InitTypeDef GPIO_InitStructure;

  6. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);        // ENCODER_TIMER时钟初始化
  7. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);        // ENCODER_GPIO时钟初始化

  8. GPIO_StructInit(&GPIO_InitStructure);        //TI1 TI2初始化
  9. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
  10. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;        //浮空输入
  11. GPIO_Init(GPIOA, &GPIO_InitStructure);

  12. /*----------------------------------------------------------------*/        

  13. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //使能TIM2
  14. TIM_DeInit(TIM2);
  15. TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  16. TIM_TimeBaseStructure.TIM_Period =0xffff; //
  17. TIM_TimeBaseStructure.TIM_Prescaler =0;        //设置预分频:
  18. TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1 ;        //设置时钟分频系数:不分频
  19. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
  20. /*初始化TIM2定时器 */
  21. TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  22. /*-----------------------------------------------------------------*/
  23. //编码配置 编码模式
  24. TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI12,
  25. TIM_ICPolarity_Rising, TIM_ICPolarity_Rising); //TIM_ICPolarity_Rising上升沿捕获
  26. TIM_ICStructInit(&TIM_ICInitStructure);
  27. TIM_ICInitStructure.TIM_ICFilter = 12; //比较滤波器
  28. TIM_ICInit(TIM2, &TIM_ICInitStructure);

  29. // Clear all pending interrupts
  30. TIM_ClearFlag(TIM2, TIM_FLAG_Update);
  31. TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //使能中断
  32. //Reset counter
  33. TIM2->CNT =0;

  34. TIM_Cmd(TIM2, ENABLE); //使能定时器2
  35. }
复制代码

  1. int main(void)
  2. {               
  3.    s16 temp;
  4.    delay_init();                     //延时函数初始化         
  5.    NVIC_Configuration();          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  6.    uart_init(115200);         //串口初始化为9600
  7.    printf("编码器测试");        
  8.    ENC_Init();

  9.         while(1)
  10.         {         
  11.    NUM = TIM_GetCounter(TIM2)/2;
  12.    if(NUM!=temp)
  13.   {
  14.        temp=NUM;
  15.        printf("%d\r\n",NUM);
  16.    }        
  17.    delay_ms(300);
  18.         }
  19. }
复制代码
time_encode.rar (297.61 KB, 下载次数: 248)
之前用了中断来是实现正交编码程序,有网友建议了下stm32正交编码的方式,因为stm32内部硬件本来就集成有了,我也试试这个效果怎样,出来感觉跟用(中断编码)中断的方式差不多。本来还打算用这种正交编码的方式来实现呢,可惜我有五个编码器,48Pin的资源不够,所以还是用中断方式。上面程序我测试过来,没问题。大家可以讨论讨论


此帖出自stm32/stm8论坛

最新回复

多谢分享   详情 回复 发表于 2019-12-22 09:19
点赞 关注(1)
 

回复
举报

28

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
请问您的程序所对应的硬件连接是怎样?虽然STM32内部有集成连接,也请告知内部是哪些节点连接了起来?谢谢!
此帖出自stm32/stm8论坛

点评

你参考下手册啊,对应着每个定时器的 CH1 CH2 就行了。例如 TIM2_CH1 TIM2_CH2 引脚啊。  详情 回复 发表于 2015-4-11 23:10
 
 

回复

466

帖子

0

TA的资源

版主

板凳
 
极客王谦 发表于 2015-4-11 15:07
请问您的程序所对应的硬件连接是怎样?虽然STM32内部有集成连接,也请告知内部是哪些节点连接了起来?谢谢!

你参考下手册啊,对应着每个定时器的 CH1  CH2 就行了。例如  TIM2_CH1  TIM2_CH2 引脚啊。
此帖出自stm32/stm8论坛
 
 

回复

19

帖子

0

TA的资源

一粒金砂(初级)

4
 
楼主,你的程序运行时,你旋转编码器,现象是不是两个值交替显示啊?
此帖出自stm32/stm8论坛

点评

不会啊  详情 回复 发表于 2015-7-26 12:40
 
 
 

回复

466

帖子

0

TA的资源

版主

5
 
龙御_沧海 发表于 2015-7-26 11:41
楼主,你的程序运行时,你旋转编码器,现象是不是两个值交替显示啊?

不会啊
此帖出自stm32/stm8论坛
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(初级)

6
 
但是我用你的程序调试出的结果就是旋转编码器两个数交替
此帖出自stm32/stm8论坛

点评

你把你打印的复制出来看下吧,你的意思是你打印的数据有跳变吧  详情 回复 发表于 2015-7-26 16:29
 
 
 

回复

466

帖子

0

TA的资源

版主

7
 
龙御_沧海 发表于 2015-7-26 15:55
但是我用你的程序调试出的结果就是旋转编码器两个数交替

你把你打印的复制出来看下吧,你的意思是你打印的数据有跳变吧
此帖出自stm32/stm8论坛
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(初级)

8
 
楼主你没用中断处理函数么?

21.PNG (7.9 KB, 下载次数: 0)

21.PNG
此帖出自stm32/stm8论坛

点评

没有哦,我就上面那段程序就能用呢。没用中断。  详情 回复 发表于 2015-7-26 18:10
 
 
 

回复

466

帖子

0

TA的资源

版主

9
 
龙御_沧海 发表于 2015-7-26 16:53
楼主你没用中断处理函数么?

没有哦,我就上面那段程序就能用呢。没用中断。
此帖出自stm32/stm8论坛
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(初级)

10
 
为什么我的不行呢?,你能把你完整的程序让我看看么?
此帖出自stm32/stm8论坛

点评

我的程序在公司 了, 要不你用中断的方式吧,我的帖子也有啊,我用得很正常很稳定啊  详情 回复 发表于 2015-7-26 18:22
 
 
 

回复

466

帖子

0

TA的资源

版主

11
 
龙御_沧海 发表于 2015-7-26 18:20
为什么我的不行呢?,你能把你完整的程序让我看看么?

我的程序在公司 了,  要不你用中断的方式吧,我的帖子也有啊,我用得很正常很稳定啊
此帖出自stm32/stm8论坛
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(初级)

12
 
中断的我出来了,我想试试它自带的编码器模式,等你到公司后可不可以分享一下
此帖出自stm32/stm8论坛

点评

明早我分享给你。  详情 回复 发表于 2015-7-26 22:15
 
 
 

回复

466

帖子

0

TA的资源

版主

13
 
龙御_沧海 发表于 2015-7-26 18:34
中断的我出来了,我想试试它自带的编码器模式,等你到公司后可不可以分享一下

明早我分享给你。
此帖出自stm32/stm8论坛
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(初级)

14
 
好的。
此帖出自stm32/stm8论坛

点评

上传了,你自己看下啊  详情 回复 发表于 2015-7-27 09:54
 
 
 

回复

466

帖子

0

TA的资源

版主

15
 

上传了,你自己看下啊
此帖出自stm32/stm8论坛
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(初级)

16
 
好的,谢谢你,太麻烦你了。
此帖出自stm32/stm8论坛

点评

我的程序都是复制回去啊,之前的不见了,不过我验证下没问题啊。  详情 回复 发表于 2015-7-27 10:37
 
 
 

回复

466

帖子

0

TA的资源

版主

17
 
龙御_沧海 发表于 2015-7-27 10:30
好的,谢谢你,太麻烦你了。

我的程序都是复制回去啊,之前的不见了,不过我验证下没问题啊。
此帖出自stm32/stm8论坛
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(初级)

18
 
嗯嗯,可能是我板子的I/O出现了问题
此帖出自stm32/stm8论坛
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

19
 
还有个问题,你在这里配置了定时器中断函数TIM_ITConfig,为啥没有NVIC的配置呢
此帖出自stm32/stm8论坛

点评

没有啊,直接定时器计数的啊  详情 回复 发表于 2016-8-15 17:03
 
 
 

回复

466

帖子

0

TA的资源

版主

20
 
huaiqiao 发表于 2016-8-15 15:11
还有个问题,你在这里配置了定时器中断函数TIM_ITConfig,为啥没有NVIC的配置呢

没有啊,直接定时器计数的啊
此帖出自stm32/stm8论坛

点评

这样啊,我私信给你下我的qq,能跟你请教下,这个正交编码器相关的东西,可以么。 我在你的另外一个帖子中也回复了,你没有回复我。  详情 回复 发表于 2016-8-15 19:00
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表