STM32/STM8技术论坛
直播中

老土豆泥

2年用户 13经验值
擅长:控制/MCU
私信 关注
[问答]

STM32F103IO口相同的外部中断问题

我现在需要20个外部中断,所需IO口PA0/1/2/3/4/8/9/10/15,PB7/8/9/14/15,PC6/7/8/9/13/14;
遇到的问题,我后设置的IO口外部中断好像给先设置的覆盖了,例如PC8可以触发但是PB8和PA8就不能触发了
求告知怎么解决这个问题

已退回10积分

回帖(2)

剑寒九州

2024-4-1 16:51:24
在STM32F103上,每个外部中断对应一个特定的IO引脚,并且每个IO引脚只能用于一个外部中断。因此,如果先设置了某个IO口的外部中断,后设置相同IO口的外部中断会覆盖先前的设置。

要解决这个问题,您可以通过重新配置已经设置的IO口的外部中断回调函数来更改其行为。具体步骤如下:

1. 首先,使用HAL库提供的函数禁用外部中断。

2. 更改IO口的外部中断回调函数为一个空函数或您自定义的函数,确保不会执行任何操作。

3. 设置另一个IO口的外部中断并配置相应的回调函数。

例如,您可以按照以下步骤设置中断:

1. 设置PA0的外部中断:

```c
HAL_GPIO_Init(GPIOA, GPIO_PIN_0, GPIO_MODE_IT_RISING);
HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
HAL_GPIO_EXTI_Callback(EXTI0_IRQn); // 设置回调函数为空函数或自定义函数
```

2. 设置PB8的外部中断:

```c
HAL_GPIO_Init(GPIOB, GPIO_PIN_8, GPIO_MODE_IT_RISING);
HAL_NVIC_SetPriority(EXTI9_5_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
HAL_GPIO_EXTI_Callback(EXTI9_5_IRQn); // 设置回调函数为空函数或自定义函数
```

通过这种方式,您可以在每个IO口上设置不同的外部中断,并为每个外部中断设置一个独立的回调函数。重要的是要记住,在更改回调函数之前始终禁用外部中断,并在更改后重新启用外部中断。
举报

王瑞

2024-4-2 11:40:31
如果 外部中断 不是同时  就可以分组使用,如果是  同时  单纯靠芯片自己好像没办法
举报

更多回帖

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