我在STM32F4上使用libopenCM3作为我的项目。我之前使用过标准外设库和ST开发的新硬件抽象层。
在这些库中,您有汇编文件(启动文件)和vector table的定义。
这是我在libopenCM3中遗漏的内容。你能告诉我在哪里找到这张桌子吗?或者是以另一种方式完成的?
我真的需要在我的项目中使用中断。
感谢。
答案 0 :(得分:1)
你能告诉我在哪里可以找到这张桌子吗?
中断向量表位于lib/cm3/vector.c:
__attribute__ ((section(".vectors")))
vector_table_t vector_table = {
...
.irq = {
IRQ_HANDLERS
}
};
STM32F4的IRQ_HANDLERS
在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项目。你很有可能在那里找到你需要的东西。