表記の問題にぶち当たっています。
HAL_I2C_Slave_Recevie_ITは、I2Cスレーブ動作を行うHAL APIです。ポーリングではなく割り込みを使い、転送が終わるとHAL_I2C_SlaveRxCpltCallback()を呼び出します。RTOSで使うのに便利なAPIです。
ところが、このAPIを使うと、正常転送であるにもかかわらずHAL_I2C_ErrorCallback()が呼ばれます。ステータスを確認するとHAL_I2C_ERROR_AF (NAK受信)となっています。
実際の転送をロジアナで見ると、このとおりACKで終了しています。ソフトウェアがNAKと考える理由がありません。
はじめは「紫」ライブラリの開発中にぶち当たったのですが、syslogを表示するとHAL_I2C_SlaveRxCpltCallbackではなくHAL_I2C_ErrorCallbackが呼ばれており、試しに紫もFreeRTOSも使わないベアメタルのプログラムで検証したところ、やはり同じ結果となりました。
発生及び試験環境は以下の通り
- CubeMX version 5.0.0 for Linux
- SW4STM32 version 1.15.0.201708311556 for Linux 64bit
- STM32CubeFW_L1 version 1.8.1
- Platform : Nucleo L152
この問題は、コミュニティに報告済みです。