2

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

在这些库中,您有包含向量表定义的程序集文件(启动文件)。

这就是我为 libopenCM3 所缺少的。你能告诉我在哪里可以找到这张桌子吗?还是以其他方式完成?

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

谢谢。

4

1 回答 1

1

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

中断向量表位于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项目。您很可能会在那里找到您需要的东西。

于 2016-07-29T14:31:17.613 回答