STM32
直播中

李桂兰

7年用户 1432经验值
私信 关注
[问答]

STM8L151不能同时初始化同一中断线的两个管脚怎么解决?

请问,STM8中断问题,不能同时初始化同一中断线的两个管脚,比如PC4,PD4,对应中断线EXti4,如果同时初始化PC4/PD4的终端,则中断不能正常工作。PD4对应按键中断,如果不初始化PIR(红外)中断,按键是正常的,只要初始化红外的GPIO中断,按键中断就会出问题。请问这是什么问题啊,难道同一中断线同时只能有一个使用一个中断吗?跪谢void pir_gpio_init(void)
{
    /* pri gpio */
    GPIO_Init(GPIOC, GPIO_Pin_4, GPIO_Mode_In_PU_IT);
    EXTI_SetPinSensitivity(EXTI_Pin_4, EXTI_Trigger_Rising_Falling);
    ITC_SetSoftwarePriority(EXTI4_IRQn, ITC_PriorityLevel_2);
}

void key_gpio_init(void)
{
    key_down_flag = 0;
    //EXTI_DeInit();
    GPIO_Init(GPIOD, GPIO_Pin_4, GPIO_Mode_In_PU_IT);
    //EXTI_SetPortSensitivity(EXTI_Port_D, EXTI_Trigger_Falling);
    EXTI_SetPinSensitivity(EXTI_Pin_4, EXTI_Trigger_Rising);
    ITC_SetSoftwarePriority(EXTI4_IRQn, ITC_PriorityLevel_1);
}



回帖(1)

zhongnian

2024-4-28 17:14:13
在STM8L151中,确实存在一个问题,即不能同时初始化同一中断线的两个管脚。这是因为STM8L151的中断系统设计为每个中断线只能有一个GPIO管脚触发中断。当两个管脚共享同一个中断线时,它们会相互干扰,导致中断不能正常工作。

要解决这个问题,你可以尝试以下几种方法:

1. **使用不同的中断线**:如果可能的话,尽量选择不同的中断线来初始化GPIO管脚。这样可以避免两个管脚共享同一个中断线的问题。

2. **软件去抖动**:对于按键等需要去抖动的应用,可以在软件层面实现去抖动逻辑。当检测到按键中断时,通过延时和再次检测来确认按键是否真正被按下。

3. **硬件去抖动**:如果条件允许,可以使用外部硬件去抖动电路,如RC滤波器,来减少按键等输入信号的抖动。

4. **修改中断优先级**:在STM8L151中,可以通过设置中断优先级来解决中断冲突的问题。将其中一个中断的优先级设置得更高,这样在两个中断同时触发时,优先级较高的中断会被优先处理。

5. **使用定时器中断**:如果可能的话,可以考虑使用定时器中断来替代GPIO中断。定时器中断可以更灵活地控制中断触发的时间,从而避免与另一个中断冲突。

6. **使用外部中断控制器**:如果以上方法都无法满足需求,可以考虑使用外部中断控制器来扩展中断资源。这样可以为每个GPIO管脚分配独立的中断线,从而避免中断冲突。

总之,STM8L151的中断系统确实存在一定的局限性,但通过一些软件和硬件的优化,仍然可以解决这个问题。希望以上建议对你有所帮助。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分