STM32F4 上的 Libopencm3 中断 table
Libopencm3 interrupt table on STM32F4
我在 STM32F4 上的项目中使用 libopenCM3。我以前使用过标准外设库和 ST 开发的更新的硬件抽象层。
在这些库中,您有包含向量定义的程序集文件(启动文件)table。
这就是我缺少的 libopenCM3。你能告诉我在哪里可以找到这个 table 吗?还是以其他方式完成?
我确实需要在我的项目中使用中断。
谢谢。
Can you please show me where to find this table?
中断向量table位于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,因此您可以轻松地在代码中重新定义它们。
Or is it done some another way?
如上所述,归结为下一步:你只需要在你的代码中定义正确名称的中断处理函数(ISR),你的函数将被放置到中断向量table自动。
例如,如果您想处理 UART2 中断,只需在代码中的某处实现 usart2_isr()
函数即可。有关 ISR 函数名称的完整列表,请参阅 include/libopencm3/stm32/f4/nvic.h
。但是这些名称通常非常简单。
另外,检查 libopencm3-examples 项目。您很有可能会在那里找到您需要的东西。
我在 STM32F4 上的项目中使用 libopenCM3。我以前使用过标准外设库和 ST 开发的更新的硬件抽象层。
在这些库中,您有包含向量定义的程序集文件(启动文件)table。
这就是我缺少的 libopenCM3。你能告诉我在哪里可以找到这个 table 吗?还是以其他方式完成?
我确实需要在我的项目中使用中断。
谢谢。
Can you please show me where to find this table?
中断向量table位于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,因此您可以轻松地在代码中重新定义它们。
Or is it done some another way?
如上所述,归结为下一步:你只需要在你的代码中定义正确名称的中断处理函数(ISR),你的函数将被放置到中断向量table自动。
例如,如果您想处理 UART2 中断,只需在代码中的某处实现 usart2_isr()
函数即可。有关 ISR 函数名称的完整列表,请参阅 include/libopencm3/stm32/f4/nvic.h
。但是这些名称通常非常简单。
另外,检查 libopencm3-examples 项目。您很有可能会在那里找到您需要的东西。