Arm Mbed and Pelion Device Management support forum

Stm32f446reでfmpi2c1が動作しません。 nucleo-f446re fmpi2c

こんにちわ

英語のフォーラムにも投稿しましたが、日本語にも投稿いたします。
2重投稿の問題があれば、削除いたします。
英語は、こちらです。


下手な英語ですが、詳細やテストコードは、上記投稿をご参照頂けると幸いです。

概要を書きます。
STM32F446REでFMPI2C1をmbedで使用したいのですが、
上手く動作しません。

HALで使用出来るかをテストを行いました。
STのCubeIDEでHALでFMPI2C1をテストしたところ、
問題なく出力されましたので、HALが原因では
なさそうです。

mbedで英語の投稿に記載のテストプログラム(I2Cのデバイスの制御等は、考慮していなく
信号が出るかのテスト用です。)で通常のI2C3とFMPI2Cとをテストしました。
結果は、通常のI2Cでは、問題ありません。
FMPI2Cでは、信号が出ず、ポートの設定もされていないようです。

APIを調べるために、まずPinMAPを調べて見ました。
調べた結果、定義はありましたので、サポートはされているようです。
参照したPINMAPは、英語の投稿に記載しています。

CubeIDEで吐き出された初期化コードをmbed上で動かしてみました。
FMPI2Cの初期化は、上手く行っていないようです。
HALよりエラーコード(Error1)が帰って来ます。
これも、なぜ帰ってくるかは、まだわかりません。
CubeIDE上と初期化コードは、同じですが、HALが呼び出されているため、
内部処理の定義等がmbedのコンパイル時にどうなっているか良くわかっていないため、
このあたりで問題があるのだとは思います。
ポートの初期化は、上手く行きました。

mbedのAPIソースも追って行ったのですが、サポートのボード、CPUのコンパイルの切り分けを
しているのかまでわからず、苦戦しています。

最後に、どうしてFMPI2Cを使うのか?です。
周辺デバイスから、RawSerialのRS-485やSPIのADC、I2C3のI/O制御を使用してポートに空きがなく
FMPI2Cを使用する事になりました。ポートに余裕があれば、別のI2Cポートを使うところですが、
今回そうも行かずFMPI2Cを使用したところ、上手く行かないため調べています。
RS-485用のRawSerialの送信完了を取得するAPIの改造も何とかなりました。(改造が、mbed向けのお行儀が良いかは別としてですが。。)

少しでも手がかりや、ソースの見方、追方等アドバイスくださると大変助かります。

最後までお読み下さりありがとうございます。

よろしくお願い致します。

CubeIDE(CubeMX)のコードをmbedで動く件は、以下のページを参考にしました。
作者の方に感謝致します。
https://lipoyang.hatenablog.com/entry/20171223/p1