現在使用されているチップには、STM32F105RCT6 の代わりとなる GD32F105RCT6、STM32F429 (VG/ZG) の代わりとなる GD32F470/GD32F450 などが含まれます。
STM32CubeMx を使用して生成されたコードには、主に 2 つの問題があります (変更が必要です)。
1. CANの初期化
症状: HAL_CAN_Init の初期化に失敗しました
問題の症状: HAL ライブラリの古いバージョンは正常に動作しますが、新しいバージョンには問題があります。
根本原因: スリープ モードから通常動作モードへの GD チップと ST チップの動作が異なります。
1) HAL ライブラリのコード比較は次のとおりです。
ST チップは INRQ レジスタを 1 に設定して初期化モードに入り、SLEEP レジスタを 0 に設定してスリープ モードを終了します。
GD チップは、まずスリープ モードを終了してから、通常の動作モードに入る必要があります。
ST チップの動作順序を逆にしても効果はありませんが、GD の場合は効果がありません。
2.USBの問題
穴がたくさんあります。
1) GD32F450 は STM32F429 のプログラムを実行し、USB はエニュメレートおよび通信できますが、送受信は 64 バイトを超えることはできません。
2) GD32F105 は STM32F105 プログラムを実行しますが、USB をエニュメレートできません。
3)!!!GigaDevice公式サイトからダウンロードした最新のライブラリファイルに問題がある
GigaDevice FAEから入手したライブラリファイルと、公式サイト(Examples\USB\USB_Device\CDC_ACM)からダウンロードしたライブラリファイルを比較すると以下のようになりますが、明らかにファイル構造が異なります。
GD32F105 のデモ プログラムは実行できません。USB はエニュメレートのみですが通信できず、USB シリアル ポートが開くとコンピュータがフリーズします。
V2.0.1版のライブラリファイルを移植後は正常に動作します。具体的な移植については前回の記事を参照してください(MX_USB_OTG_FS_PCD_Init()とusbd_init(&cdc_acm,USB_FS_CORE_ID)はハードウェアの初期化時にまとめて行う必要があることに注意してください。時間間隔が長いとUSBを列挙できません。) GDのUSBプロトコルスタックを移植(デバイス/CDC_ACM)_Persimmon Fengnian ブログ-CSDN ブログ
公式サイトでもなぜこのようなことをしているのか分かりませんし、説明文書もほとんどありません。