CubeIDEは複雑なペリフェラルの設定を簡略化できる便利なGUIツールです。一方で、落とし穴もあるので注意が必要です。
昨年発見してCommunityに報告するも、進展がなかったSTM32H7 I2CのNAK異常応答の件が手元で解決しました。問題の原因はI2Cピンの駆動能力不足でした。
下の図はSTM32H743のI2CをCubeIDEで設定した場合の設定内容です。デフォルトではMaximum Output SpeedがLowになっています。これをHighにしたところ、問題なく動作するようになりました。
もともとNAK受信時の異常として認識しており、解決するまで放置していました。最近になって再びいじってみたところ、I2Cの挙動が以前よりおかしくなっており、ACKが帰る場合も異常動作していることに気が付きました。CODEC基板を取り替えるなどして確かめた結果、さらに現象が混乱したため、アナログ部分を疑った次第です。
Maximum output speedのI2Cへの適正な設定値は、データシート最新版(DS12110 Rev 7)にも記述がなく、回路ごとにオシロスコープで波形を確認したほうがいいでしょう。
なお、この問題の再現手順などは、githubにまとめてあります。D004を参照してください。
最後に、GPIO Pull-up/Pull-downの設定ですが、5V回路への接続を考えれば、pull up 無しにすべきだという意見を読みました。確かに上記データシートにはAbsolute Maximum Ratingsの節の注釈4に
To sustain a voltage higher than 4V the internal pull-up/pull-down resistors must be disabled.
STM32H742xI/G STM32H743xI/G データシート DS12110 Rev 7
と書いてあります。CubeIDEの生成コードを見るとNucleo H743はPull-up無しがデフォルトですが、手元で確認した限りではNucleo F722はデフォルトでPull-upありでした。
注意が必要です。