2016-06-08 42 views
1

我在STM32F4上使用libopenCM3作为我的项目。我以前使用由ST开发的标准外设库和更新的硬件抽象层。STM32F4上的Libopencm3中断表

在这些库中,您有装配文件(启动文件)和向量表的定义。

这就是我对libopenCM3所缺少的东西。你能告诉我在哪里可以找到这张桌子吗?或者它是以另一种方式完成的?

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

谢谢。

+0

建立一些东西,反汇编它,grep为源树中的标签。 –

回答

0

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

中断矢量表位于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项目。有机会,你会找到你需要的。

+0

谢谢山姆。遗憾的是,这个解释在libopencm3文档中丢失或隐藏。 – phodina