你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM 外部中断处理旋转编码开关的问题

[复制链接]
mellkaisen-3283 提问时间:2018-1-17 15:23 /
最近在将以前的旋转编码开关的轮询查状态程序改为中断触发程序。在测试过程中发现如下问题:

比如我用PA0和PA1输入上拉来接旋转编码开关,PA1开外部中断,上升下降触发中断。中断程序如下:
if(GPIO_Pin == GPIO_PIN_1)
  {
        port=(GPIOA->IDR)&0x03;         
        
        if(port==0)                 
        {Left[0]=0XFF;Right[0]=0X00;}

        else if(port==2)            
        {Right[0]=0XFF;Left[0]=0X00;}

        else if((Right[0]&port)==0x01)  
        {rowResult[0]--;Right[0]=0X00;}     

        else if((Left[0]&port)==0x03)   
        {rowResult[0]++;Left[0]=0X00;}      
  }

这个配置可以准确识别编码器的旋转,在手旋转允许的情况下,快慢都可以检测旋转量,一圈20个脉冲非常准确

但是只要你将PA1的外部中断改成PA0,同时将if(GPIO_Pin == GPIO_PIN_1)改为if(GPIO_Pin == GPIO_PIN_0)。余下的判断程序不做修改。
理论上应该没有问题,但是问题却出现了,问题基本如下:
一般需要转动3到4个脉冲后,程序才能准确识别一个脉冲。每圈识别出来的脉冲数都不同的。

而且奇怪的是,我其实同时接了4个编码器,只要你的中断脚在2个脚中间数值小的那个,就会出现这种情况,比如PA4PA5接了一个,PA4中断,程序不正常,换到PA5就正常。这种情况同时出现在STM32F1和STM32F4上。

不知为何会出现这种情况。


收藏 评论5 发布时间:2018-1-17 15:23

举报

5个回答
努力的人 回答时间:2018-1-19 20:51:11
本帖最后由 努力的人 于 2018-1-19 20:53 编辑

你这个是2块钱那个模块吧,对于脉冲计数,你可以使用输入捕获来计算脉冲,这个相对于你使用外部中断更准确一些。你出现的问题看会不会是不同线的中断的优先级配置的问题

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

mellkaisen-3283 回答时间:2018-1-21 17:57:36
努力的人 发表于 2018-1-19 20:51
你这个是2块钱那个模块吧,对于脉冲计数,你可以使用输入捕获来计算脉冲,这个相对于你使用外部中断更准确 ...

现在主要是在别的程序不变的情况下,只改变外部中断脚,但是就是会出现这种高位脚程序可以,低位脚程序不行的情况。有点摸不着头脑。
toofree 回答时间:2018-1-28 13:09:23
STM32的IO管脚中断问题,以前也遇到过类似的。
在做PS2鼠标的时候,发现直接用中断检测有时不好用。后来进中断后,加了一小点延时,然后再读取中断IO状态的,就好使了。具体什么原因没有太去关注,有可能是中断IO有抖动,或者中断沿已经触发,但IO电平还没稳定。

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

mellkaisen-3283 回答时间:2018-2-1 11:50:41
toofree 发表于 2018-1-28 13:09
STM32的IO管脚中断问题,以前也遇到过类似的。
在做PS2鼠标的时候,发现直接用中断检测有时不好用。后来进 ...

你说的我也考虑了,主要是一样的程序,高位IO中断程序正常,低位IO中断程序不正常。示波器显示的波形是一样的
无薪税绵 回答时间:2018-3-6 17:08:07
有几种可能,
1、端口干扰,建议加104电容。
2、端口未正确初始化。
3、对应端口的中断优先级,设置不正确。

还有,建议把编码开关两个端口对调一下,
看看问题端口是否还是不正常。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版