【发布时间】:2021-06-06 02:55:30
【问题描述】:
我对 STM32 世界真的很陌生,所以我在阅读时遇到了这个:
void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn);
这将导致中断触发,因为它是由硬件生成的。一个显着的特点 Cortex-M 处理器,它可以在 ISR 内以编程方式触发中断 另一个中断的例程。
我从 Mastering STM32 (Carmine Noviello 第 208 页)一书中得到了这个。由此我了解到,如果我们甚至从主函数设置这个挂起位,那么就会产生中断。 所以为了试试这个,我写了这段代码:
while (1)
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_SET);
for(int i = 0; i <10000000; i++);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_RESET);
for(int i = 0; i <10000000; i++);
HAL_NVIC_SetPendingIRQ(EXTI0_IRQn);
}
}
连同这个回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_PIN){
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_15);
}
我已将 GPIO_PIN_0 编程为中断源,当我按下连接到 PA0 的按钮时,中断工作完美,即执行 ISR。令我惊讶的是 HAL_NVIC_SetPendingIRQ 函数不会产生中断。我不明白为什么?
更多信息:
- 我用的是STM32F411VET6 DISCO板
- 我正在使用STM32CubeIDE对板子进行编程
【问题讨论】:
-
我没有使用 HAL 的经验,但我怀疑还有一层额外的 HAL 会阻止执行到达
HAL_GPIO_EXTI_Callback。可能在该层,有一些代码可以检测导致中断的 GPIO 引脚,但由于人为产生中断,因此无法检测到该引脚。
标签: stm32 interrupt cortex-m stm32f4 stm32-hal