STM32F4上的Libopencm3中断表

时间:2016-06-08 18:22:38

标签: arm interrupt stm32 libopencm3

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

在这些库中,您有汇编文件(启动文件)和vector table的定义。

这是我在libopenCM3中遗漏的内容。你能告诉我在哪里找到这张桌子吗?或者是以另一种方式完成的?

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

感谢。

1 个答案:

答案 0 :(得分:1)

  

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

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

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

STM32F4的IRQ_HANDLERSlib/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项目。你很有可能在那里找到你需要的东西。