4

i2c EEprom と通信するように stm32 をプログラムしようとしていますが、次のように言うたびに次のようになります。

I2C_GenerateSTART(I2C1, ENABLE);
while( !(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) );  the code hangs here

デバッガーを使ってみたところ、SR1 ビット 0 フラグ (開始ビット生成フラグ) が設定されていないことがわかりました。これが原因で、コードがハングします。オシロスコープで、スタート ビットが生成されていることがわかります。これは時々機能します。連続して複数の書き込みを行おうとすると、通常は壊れます。ハードウェアがすべて正常に見えることを確認しました。i2c バスで実行している周波数を確認しました。24lc1025 eeprom 内で 100Khz です。

何か案は、

ありがとう

4

3 に答える 3

6

STOPこれは通常、連続して複数の書き込みを行っているときに壊れると言うので、I2C_CR1 制御レジスタのビットに関する STM32 データシートのこのメモに違反していないことを確認する必要がある場合があります。

注:またはビットが設定されている場合STOP、このビットがハードウェアによってクリアされる前に、ソフトウェアは書き込みアクセスを実行してはなりません。そうしないと、2 番目の 、またはrequestを設定するリスクがあります。STARTPECI2C_CR1STOPSTARTPEC

ビットを設定したらSTOP、次のビットを書き込む前に、ハードウェアがビットをクリアしたことを確認する必要がありますSTART

于 2010-03-31T23:44:34.113 に答える
1

お使いのデバイスのエラータを確認してください (ST の Web サイトから入手してください)。STM32 には、I2C 実装に多くのバグがあります。エラッタは、ソフトウェアによる回避策を提供します。

于 2012-02-06T21:09:03.013 に答える