制御対象の動作確認(LED)
基板が完成したので、それぞれの制御対象が動作するかを確認します。プログラムはスケッチの例の「Blink」を基にしています。ポート番号の定義を変えて動作を確認します。
setup内の4行目から7行目に記述しているところがリセットボタンを「シームレス動作」させるための追加プログラムです。
#define LED 8
void setup() {
// RESET button シームレススイッチ
if (FLASH->STATR & (1 << 14)) NVIC_SystemReset();
SystemReset_StartMode(Start_Mode_BOOT);
pinMode(PD4, OUTPUT);
//ポート初期化
pinMode(LED, OUTPUT);
}
void loop() {
digitalWrite(LED, 1);
delay(100);
digitalWrite(LED, 0);
delay(100);
}
プログラムの書き込みが完了したら、リセットボタンで、実行が始まります。
(もう一度リセットボタンを押すとブートモードになり、書き込み可能となります)
トラブル1 ポート番号「11」が動かない
この端子は、CH32Vマイコンへのプログラム書き込み装置「WCH-LinkEエミュレータ」を利用して書き込むときの接続端子「SWIO」となっています。この機能が働いているために、GPIOとして利用できません。少し検索すると、CH32VマイコンのマニュアルにGPIOにするレジスタ設定がありました。
リセットボタンのシームレス化と同様に、レジスタの設定で、GPIOとして利用する設定は必要です。
void setup() {
// RESET button シームレススイッチ
if (FLASH->STATR & (1 << 14)) NVIC_SystemReset();
SystemReset_StartMode(Start_Mode_BOOT);
pinMode(PD4, OUTPUT);
// PD1をGPIOとして利用する設定
// function SWIO off
// Enable GPIOs
RCC->APB2PCENR |= RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOC | RCC_AFIOEN;
// Convert PD1 from SWIO to GPIO
AFIO->PCFR1 &= ~(AFIO_PCFR1_SWJ_CFG);
AFIO->PCFR1 |= AFIO_PCFR1_SWJ_CFG_DISABLE;
}
7行目から13行目の「PD1をGPIOとして利用する設定」を追加すると、ポート11として利用できるようになりました。UIAPサポート
同じ症状で困っていた方がUIAPからサポートを受けていた記事を見ました。
もっと簡単にポート11をGPIOにする関数「pinV32_DisconnectDebug」があるようです。
void setup() {
// RESET button シームレススイッチ
if (FLASH->STATR & (1 << 14)) NVIC_SystemReset();
SystemReset_StartMode(Start_Mode_BOOT);
pinMode(PD4, OUTPUT);
// PD1をGPIOとして利用する設定
pinV32_DisconnectDebug(PD_1); // Disable SWIO (the argument is not "PD1")
}
この関数を利用しても動作させることができました。
制御対象の動作確認(スイッチ・ブザー)
スイッチとブザーの動作確認プログラムです。
#define LED 8
#define SW 12
#define BUZ 5
void setup() {
// RESET button シームレススイッチ
if (FLASH->STATR & (1 << 14)) NVIC_SystemReset();
SystemReset_StartMode(Start_Mode_BOOT);
pinMode(PD4, OUTPUT);
//ポート初期化
pinMode(LED, OUTPUT);
pinMode(BUZ, OUTPUT);
pinMode(SW, INPUT_PULLUP);
}
void loop() {
if(digitalRead(SW)==0){
tone(BUZ,880,100);
digitalWrite(LED, 1); delay(100);
digitalWrite(LED, 0); delay(100);
}
}
3行目のスイッチのポート番号を変えて、動作を確認します。 これで、制御対象となるI/Oの動作が確認できました。

0 件のコメント:
コメントを投稿