我在STM32F4上使用libopenCM3作爲我的項目。我以前使用由ST開發的標準外設庫和更新的硬件抽象層。STM32F4上的Libopencm3中斷表
在這些庫中,您有裝配文件(啓動文件)和向量表的定義。
這就是我對libopenCM3所缺少的東西。你能告訴我在哪裏可以找到這張桌子嗎?或者它是以另一種方式完成的?
我真的需要在我的項目中使用中斷。
謝謝。
我在STM32F4上使用libopenCM3作爲我的項目。我以前使用由ST開發的標準外設庫和更新的硬件抽象層。STM32F4上的Libopencm3中斷表
在這些庫中,您有裝配文件(啓動文件)和向量表的定義。
這就是我對libopenCM3所缺少的東西。你能告訴我在哪裏可以找到這張桌子嗎?或者它是以另一種方式完成的?
我真的需要在我的項目中使用中斷。
謝謝。
你能告訴我在哪裏可以找到這張桌子嗎?
中斷矢量表位於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項目。有機會,你會找到你需要的。
謝謝山姆。遺憾的是,這個解釋在libopencm3文檔中丟失或隱藏。 – phodina
建立一些東西,反彙編它,grep爲源樹中的標籤。 –