我在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示例项目。你很可能会在那里找到你需要的东西。