首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Libopencm3的STM32F4中断表

基于Libopencm3的STM32F4中断表
EN

Stack Overflow用户
提问于 2016-06-08 18:22:38
回答 1查看 2K关注 0票数 2

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

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

这就是我对libopenCM3所缺少的东西。请告诉我这张桌子在哪里找到好吗?还是换了别的方法?

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

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-29 14:31:17

请告诉我这张桌子在哪里找到好吗?

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

代码语言:javascript
复制
__attribute__ ((section(".vectors")))
vector_table_t vector_table = {
    ...
    .irq = {
        IRQ_HANDLERS
    }
};

并在IRQ_HANDLERS文件中定义了STM32F4的lib/stm32/f4/vector_nvic.c。这个文件将在构建库后可用(它是用H脚本生成的)。在这个文件中,您可以看到如下内容:

代码语言:javascript
复制
#define IRQ_HANDLERS \
    [NVIC_DMA1_STREAM0_IRQ] = dma1_stream0_isr, \
    [NVIC_ADC_IRQ] = adc_isr, \
    ...

dma1_stream0_isr()adc_isr()这样的函数定义如下:

代码语言:javascript
复制
#pragma weak adc_isr = blocking_handler

因此,默认情况下,这些函数只是阻塞处理程序。但是它们被定义为瘦弱,所以您可以很容易地在代码中重新定义它们。

还是换了别的方法?

正如上面所讨论的,它归结为下一步:您只需要在代码中定义具有正确名称的中断处理程序函数(ISR),您的函数将被自动放置到中断向量表中。

例如,如果您想处理UART2中断,只需在代码中的某个地方实现usart2_isr()函数即可。对于ISR函数名的整个列表,请参考include/libopencm3/stm32/f4/nvic.h。但这些名字通常都很直截了当。

另外,查看libopencm3 3-实例项目。很有可能你会在那里找到你需要的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37710085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档