2

STM32F4 のプロジェクトに libopenCM3 を使用しています。以前は標準周辺機器ライブラリと、ST によって開発された新しいハードウェア アブストラクション レイヤーを使用しました。

これらのライブラリには、ベクター テーブルの定義を含むアセンブリ ファイル (スタートアップ ファイル) があります。

これは、libopenCM3 に欠けているものです。このテーブルの場所を教えてください。それとも別の方法で行われますか?

プロジェクトで割り込みを使用する必要があります。

ありがとう。

4

1 に答える 1

1

このテーブルの場所を教えてください。

割り込みベクタテーブルはlib/cm3/vector.cにあります:

__attribute__ ((section(".vectors")))
vector_table_t vector_table = {
    ...
    .irq = {
        IRQ_HANDLERS
    }
};

STM32F4IRQ_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プロジェクトもチェックしてください。そこに必要なものだけが見つかる可能性があります。

于 2016-07-29T14:31:17.613 に答える