打印
[STM8]

[求助] 如何知道触发外部中断的具体PIN

[复制链接]
1278|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
junyee|  楼主 | 2016-10-3 18:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在做一个小玩意.
主控是  stm8s103f4p6 .
用飞梭来操作的.
飞梭是可以按下的,加上左旋,右旋就有三个操作.

我把飞梭三个引脚都接到了 PA上,分别是PA1,PA2,PA3.
假设这三个脚为 A,B , M(按下).
那问题来了.
我用下降沿来触发中断,

EXTI_CR1=0X02;
PA_CR2 |=  0x0e;


在旋转编码器时,会有一个时间 AB 两脚同为 低电平,
那我如何用最简单的办法来 判断,是 PA1(A),PA2(B) 中的谁触发了中断?
此处不讨论如何使用编码器,以及PIN的设定问题
又假如,我在按下M时,又旋转编码器,
那么就会有一段时间, A,B,M 三个同是为低电平.
因为ABM都绑在PA上,不管是谁触发,都是进入到了
#pragma vector=5 // 我用的是IAR.
...


我查阅了stm8的手机,好像并没有寄存器可以查询此项数据.
要不然只好在设一个全局变量,每次进入中断,都记录此时几个PIN状态,再与上次对比.这样一来就麻烦许多.

沙发
skygz| | 2016-10-3 20:30 | 只看该作者
参考我这段,  我用的是STM8SF3P6  PA3

//DS3231产生闹铃中断INT/SQW触发STM8S的GPIOA的外部中断
void DS3231_Exti_IRQ(void)
{
        if (EXTI_GetExtIntSensitivity(EXTI_PORT_GPIOA) == EXTI_SENSITIVITY_FALL_ONLY)
        {
                if (!GPIO_ReadInputPin(GPIOA, GPIO_PIN_3)) //判断中断的是哪个引脚
                {
                        DS3231_Alarm = 1; //闹铃标志为1
                        DS3231_WriteByte(DS3231_STATUS, 0x00); //复位DS3231状态寄存器, 闹钟标志位清零
                }
        }
}

使用特权

评论回复
板凳
junyee|  楼主 | 2016-10-4 17:34 | 只看该作者
skygz 发表于 2016-10-3 20:30
参考我这段,  我用的是STM8SF3P6  PA3

//DS3231产生闹铃中断INT/SQW触发STM8S的GPIOA的外部中断

你这个就是查PIN 电平的办法.

如果像我说的,在同一时间,有多个PIN电平拉低,怎么判断.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

251

帖子

6

粉丝