我对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 对板子进行编程