STM32H743I-EVAL2を使ってみた件

[STM32H743I-EVAL](https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-mpu-eval-tools/stm32-mcu-mpu-eval-tools/stm32-eval-boards/stm32h743i-eval.html "STM32H743I-EVAL") 試し始めた。

ソフトウェアを書き換えた後でデフォルトプログラム(demoソフト)に戻すため、書き込みバイナリファイル（実際はHEXファイルだった）を探した時からの独り言です。

##ダウンロード
1) STM32H743I-EVAL紹介ページにアクセス
https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-mpu-eval-tools/stm32-mcu-mpu-eval-tools/stm32-eval-boards/stm32h743i-eval.html

2) Resources（赤〇部）をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569481/ebcd8df0-5920-89fb-5109-88bee7a3e7f8.png)

3) ページ下部にスクロールし「STM32H743I-EVAL compiled demo binary」をチェックしてダウンロード。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569481/ef747ae2-07e0-6930-1a00-69289028869d.png)

##書き込み
・書き込みアダプタ： [ST-LINK/V2](https://www.stmcu.jp/design/hwdevelop/debugger/52828/?gclid=Cj0KCQjwy8f6BRC7ARIsAPIXOjg9mjx0RODgvTr1y7DstM_79VURACVWPL8_50_IPLHnMgo0jhBPOogaAjZiEALw_wcB "ST-LINK/V2") を使用。


・オーソドックスな [STM32 ST-LINK utility](https://www.st.com/ja/development-tools/stsw-link004.html "STM32 ST-LINK utility") は使いません。
EVAボードに実装されている外付けNORフラッシュメモリへの書き込みができず、
「“no elf loader found for this operation”.」のエラーメッセージが表示されます。
（※v4.5.0 使用しましたが「External Loader」メニューにメモリ該当型番なし。）

・まず、[STM32CubeProg](https://www.st.com/ja/development-tools/stm32cubeprog.html "STM32CubeProg") をインストールします。

・ダウンロードしたdemoプログラム格納フォルダの「program_hexfile.bat」を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569481/f00476af-3ded-8b70-09f4-c0b92afac4f4.png)
　書き換えには私のＰＣ環境で１２分３０秒かかりました。

##ST-LINK V3
つーか普通にST-LINK実装されてますね。それも"V3"が。(マニュアル読まないクセがいかん)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569481/e0e3a69e-2921-ea38-56a7-508e0c071512.png)
　これだと書き換え約３分半。もう"V2"使わない。
　　※「STM32 ST-LINK utility」では"V3"アダプタ認識せず。たぶん利用不能かと。

マスストレージもしっかり出現しますね。Nucleoライクにbinファイルをポイっと格納できそうですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569481/c3db6fb3-5937-2127-587e-d9d27eede7d9.png)
####binファイル生成
（MDK-ARMの場合）
ユーザーオプション設定で
fromelf --bin --output=$H@H.bin $H@H.axf
を設定し、ビルド生成ファイルaxfをbinファイルへ変換。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569481/95b2a67b-70a4-12c7-efb0-82cbe7272e36.png)
その後binファイルをマスストレージへドラッグ&ドロップ！
うん。ちゃんと<font color="red">書けました。</font>
##仮想COM
仮想COMポートもあるね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569481/1708ee1f-6b0e-6985-7ed9-6c3867c2ca3d.png)

ショートピン[JP7,8]&emsp;2-3、2-3 ショートでRS232C I/Fから仮想COMへ切り替わる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569481/a667581e-d2c6-66ea-429d-13bf47f273f5.png)

##USART
これまでSTM32FとかSTM32Lとか使ってきたけどSTM32HのUSARTってレジスタ名とか設定ビット配置変わってるし。機能もいろいろ追加されたんかな。どこの型番からなのかいまいちネットで情報引き出せませんが。
仕方ないリファレンスマニュアル見比べるか。[日本語版](https://www.stmcu.jp/design/document/reference_manual/51599/ "RM0433 リファレンスマニュアル")もあるし。

自分のこれまでのリソースとHALドライバの割り込み処理の相性が悪かったため、割り込みハンドラを自作のに入れ替えてたけど、STM32L版から修正した箇所はざっくり抜粋して次の感じ。

```ruby:usart

/* ステータスレジスタビット代替定義 */
#ifdef STM32H7
#define 	USART_SR_TXE		USART_ISR_TXE_TXFNF
#define 	USART_SR_RXNE		USART_ISR_RXNE_RXFNE
#define 	USART_SR_PE			USART_ISR_PE
#define 	USART_SR_FE			USART_ISR_FE
#define 	USART_SR_NE			USART_ISR_NE
#define 	USART_SR_ORE		USART_ISR_ORE
#endif

　　：
　　：

/* ステータス読み出し */
#ifdef STM32H7
	uint32_t isrflags   = READ_REG(huart->Instance->ISR);
#else
	uint32_t isrflags   = READ_REG(huart->Instance->SR);
#endif

　　：
　　：

/* 送信レジスタ書き込み */
#ifdef STM32H7
			huart->Instance->TDR = txdata;
#else
			huart->Instance->DR = txdata;
#endif

　　：
　　：

/* 受信レジスタ読み込み */
#ifdef STM32H7
		volatile uint8_t txdata = huart->Instance->RDR;
#else
		volatile uint8_t txdata = huart->Instance->DR;
#endif
```
普通に調歩同期でFIFO無し（CubeMX標準生成モード）にて使う限り、この程度の調整で普通に動作した。

##LTDC

STM32Cube MCU Package
https://www.st.com/ja/embedded-software/stm32cubeh7.html
をDLして
.\STM32Cube_FW_H7_V1.8.0\Projects\STM32H743I-EVAL\Examples\LTDC\LTDC_Display_1Layer
をビルドして書き込む。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569481/d19feac0-6e60-35fb-ac92-cd8c6f3684aa.png)
でもこれ、CubeMXのプロジェクトファイル（.ioc）がない。

またCubeMXでデフォルトで自動生成したソースコードは内部クロック設定のためそのままではLTDCサンプル動作しない。
LTDC_Display_1Layer プロジェクトソースコードと見比べながら以下のようにCubeMXプロジェクトのクロック設定を調整した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569481/398bef0c-c6e5-20ad-a989-05ae760bfc3c.png)
自前のプログラムに組み込んで、とりあえずお花の外国姉さん表示できた。

---
※随時追記予定。