こんにちは。Yukiです。
今回はCH32V203マイコンを使ったときに、PA11/12とPD0/1が使えない問題を解決したいと思います。
何が起きた
CH32V203マイコンは何度も使ってるし、大丈夫っしょということで適当に基板設計して発注した結果、動きませんでした…。
解決方法
PD0/PD1はOSC_IN/OSC_OUTに割当されているため、AFIOレジスタにてGPIOに割当する必要があります。
RCC->APB2PCENR |= RCC_AFIOEN; //AFIO有効
AFIO->PCFR1 |= AFIO_PCFR1_PD01_REMAP; //PD0/PD1をGPIOとして使うなんとこれだけでPD0/PD1が使えるようになります!!!!
次に、PA13/14はSWDIOとSWCLKに関係するため、AFIOレジスタにてGPIOに割当する必要があります。ただし、割当した瞬間にWCH-LinkEで書き込みできなくなるデメリットもあるので注意してください。
//SWDを無効にしてGPIOを有効にする
AFIO->PCFR1 &= ~AFIO_PCFR1_SWJ_CFG_0;
AFIO->PCFR1 &= ~AFIO_PCFR1_SWJ_CFG_1;
AFIO->PCFR1 |= AFIO_PCFR1_SWJ_CFG_2;再度書き込みする場合は、WCH-LinkUtilityにてTarget→Clear All Code Flash-By Power offを選択します。(メモリの中身が削除されて書き込めるようになります)

ちなみにですが、CH32V203のUSB機能を利用して書き込む場合には、SWD機能は必要ないため、特に被害を受けません。(確認済み)
PB8は?
PB8はBOOTピンと共用ですが、データシートにある通り、このピンは出力専用です。
もし入力で使いたい場合があったとしても、プログラムなどでは対処できません。諦めましょう。


コメント