在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口上设置不同的外部中断,并为每个外部中断设置一个独立的回调函数。重要的是要记住,在更改回调函数之前始终禁用外部中断,并在更改后重新启用外部中断。
在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口上设置不同的外部中断,并为每个外部中断设置一个独立的回调函数。重要的是要记住,在更改回调函数之前始终禁用外部中断,并在更改后重新启用外部中断。
举报