STM32F4上的Libopencm3中断表



我在STM32F4上的项目中使用libopenCM3。我以前使用过ST.开发的标准外设库和更新的硬件抽象层

在这些库中,您有带有矢量表定义的汇编文件(启动文件)。

这就是我对libopenCM3所缺少的。你能告诉我这张桌子在哪里吗?还是用另一种方式?

我真的需要在我的项目中使用中断。

谢谢。

你能告诉我在哪里可以找到这张表吗?

中断矢量表位于lib/cm3/vector.c:中

__attribute__ ((section(".vectors")))
vector_table_t vector_table = {
...
.irq = {
IRQ_HANDLERS
}
};

lib/stm32/f4/vector_nvic.c文件中定义了STM32F4的IRQ_HANDLERS。该文件将在构建库后可用(它是用irq2nvic_h脚本生成的)。在这个文件中,你可以看到这样的东西:

#define IRQ_HANDLERS 
[NVIC_DMA1_STREAM0_IRQ] = dma1_stream0_isr, 
[NVIC_ADC_IRQ] = adc_isr, 
...

dma1_stream0_isr()adc_isr()这样的函数定义如下:

#pragma weak adc_isr = blocking_handler

因此,默认情况下,这些函数只是阻塞处理程序。但是它们被定义为弱,所以您可以在代码中轻松地重新定义它们。

或者它是以另一种方式完成的?

如上所述,它可以归结为下一步:您只需要在代码中用正确的名称定义中断处理程序函数(ISR),您的函数就会自动放入中断向量表中。

例如,如果您想处理UART2中断,只需在代码中的某个位置实现usart2_isr()函数即可。有关ISR函数名称的完整列表,请参阅include/libopencm3/stm32/f4/nvic.h。但这些名字通常都很直白。

此外,请查看libopencm3示例项目。你很可能会在那里找到你需要的东西。

最新更新