STM32F4上的Libopencm3中断表
我在STM32F4上使用libopenCM3作为我的项目。我以前使用由ST开发的标准外设库和更新的硬件抽象层。STM32F4上的Libopencm3中断表
在这些库中,您有装配文件(启动文件)和向量表的定义。
这就是我对libopenCM3所缺少的东西。你能告诉我在哪里可以找到这张桌子吗?或者它是以另一种方式完成的?
我真的需要在我的项目中使用中断。
谢谢。
你能告诉我在哪里可以找到这张桌子吗?
中断矢量表位于lib/cm3/vector.c:
__attribute__ ((section(".vectors")))
vector_table_t vector_table = {
...
.irq = {
IRQ_HANDLERS
}
};
而且IRQ_HANDLERS
为STM32F4在lib/stm32/f4/vector_nvic.c
文件中定义。该文件将在构建库后生效(使用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
所以这些功能都只是在默认情况下拦截处理。但它们被定义为weak,因此您可以轻松地在代码中重新定义它们。
或者是以另一种方式做了吗?
如上所述,它归结为下一个:你只需要在你的代码来定义与正确的名称中断处理函数(ISR),你的功能将被放置到自动中断向量表。例如,如果要处理UART2中断,只需在代码中的某处执行usart2_isr()
函数即可。有关ISR功能名称的完整列表,请参阅include/libopencm3/stm32/f4/nvic.h
。但是这些名字通常非常简单。
此外,请检查libopencm3-examples项目。有机会,你会找到你需要的。
谢谢山姆。遗憾的是,这个解释在libopencm3文档中丢失或隐藏。 – phodina
建立一些东西,反汇编它,grep为源树中的标签。 –