0

STM32L0 (検出キット) で実行する非常に単純な i2c テスト プログラムを作成しようとしています。libopencm3-examples/examples/stm32/l0/stm32l0538-disco の miniblink プログラムを修正しました。

しかし、i2c ヘッダー ファイルだけをインクルードすると、次のようになります。

#include <libopencm3/stm32/i2c.h>

make を実行すると、次のエラーが表示されます。

 ../../../../../libopencm3//include/libopencm3/stm32/i2c.h:36:9: error: #error "stm32 family not defined."

このファイルを調査すると、他のモデルごとにルールが定義されているようですが、l0 にはルールが定義されていないようです。これはなぜですか? libopencm3 は STM32L0 シリーズで i2c をサポートしていませんか?

#if defined(STM32F0)
#       include <libopencm3/stm32/f0/i2c.h>
#elif defined(STM32F1)
#       include <libopencm3/stm32/f1/i2c.h>
#elif defined(STM32F2)
#       include <libopencm3/stm32/f2/i2c.h>
#elif defined(STM32F3)
#       include <libopencm3/stm32/f3/i2c.h>
#elif defined(STM32F4)
#       include <libopencm3/stm32/f4/i2c.h>
#elif defined(STM32L1)
#       include <libopencm3/stm32/l1/i2c.h>
#else
#       error "stm32 family not defined."
#endif

libopencm3/stm32/l1/i2c.h を見てみましたが、共通の i2c ライブラリをインポートするだけのようです。l1にi2cライブラリを使用する方法はありますか?

ありがとう

4

1 に答える 1

0

STM32L0 固有のヘッダーを追加する必要があります。
ただし (i2c 共通ヘッダー ファイルは問題なく使用できます)。
一般的なヘッダーは、直接含まれることを意図していません (安全と頭痛の軽減のため)。(インクルーダーチェックあり)

解決策:
"i2c_common_all.h" が l0 の正しいレジスタ定義を持っているかどうか (おそらくはい) を確認し、stm32/l1/i2c.h を stm32/l0/i2c.h にコピーして (最後の 2 行) を追加する必要があります。 stm32/i2c.h

#elif defined(STM32L1)
#       include <libopencm3/stm32/l1/i2c.h>
#elif defined(STM32L0)
#       include <libopencm3/stm32/l0/i2c.h>

lib/stm32/l0/Makefile に変更を加えますOBJS += i2c_common_all.o

必要に応じて、プル リクエストを送信します

ハック: (非推奨)

#include <libopencm3/cm3/common.h>
#include <libopencm3/stm32/memorymap.h>
#define LIBOPENCM3_I2C_H
#include <libopencm3/stm32/i2c_common_all.h>

ソースファイルlib/stm32/common/i2c_common_all.cを手動でインクルードします。

于 2015-08-04T22:44:47.747 に答える