秋月で販売開始になったCH32V003J4M6(マイコン本体)とWCH-LinkEエミュレーター(書き込み/デバック装置)で書き込みができたのでそこまでのメモ。
基本的にはこちらの記事をトレースしてわからなかったことを追記した感じ
必要だったのもの
ハード
- CH32V003J4M6 1個
- WCH-LinkEエミュレーター 1個
- ピッチ変換基盤 1個(これの同等品)
- LED 1個(3mm使った)
- 抵抗 1個(1 KΩ 大体で)
- ブレッドボード 1個
- コンデンサ 0.1uF 1個
- ジャンパーケーブル 5本ぐらい
- 書き込み用PC Windows11(1台)
ソフト
- MounRiver Studio(開発環境) ダウンロード元
- サンプルソース ダウンロード元
- WCH-LinkUtility こちらは不要かもしれない。ドライバが入っているという事で試している過程でインストールした。 ダウンロード元(ページの下の方)
元記事と違った箇所、または追加したとこ
「いつも通り Workspace の場所を決めて Launch をクリックします。」は出なかった。後で選べる。
「File⇒Open Procets from File System をクリックします。」は「Open Procets from File System」のとこが微妙に名前変わっていた
「コンパイル」のトンカチアイコンは見当たらず、ビルドアイコンがツールバーの左寄りにあった。ダウンロードアイコンもツールバーの左寄り。
サンプルソースはGPIO_Pin_0でLチカしているけどSOP8のだとPD0は出ていないのでGPIO_Pin_6(PD6の1番ピン)に変更
書き込みのたびに、MounRiver Studioにて以下操作
- メニューバーからFlash選択
- configration選択
- target modeにあるqueryボタンクリック
- プルダウンに出てくるWCH-LinkRV選択
- 少し下のErase Code FlashでBy power off を選択してApplyクリック
接続
PCのUSBにPCのUSBにWCH-LinkEエミュレーター接続
WCH-LinkEエミュレーター | CH32V003 |
GND | 2番ピン(VSS) |
3V3 | 4番ピン(VDD) |
SWDIZO | 8番ピン() |
CH32V003の1番ピン – Lチカ用のLED – 1KΩ抵抗 – CH32V003の2番ピン(VSS)
CH32V003の2番ピン(VSS) – 0.1uFコンデンサ – CH32V003の4番ピン(VDD)
ソース
ほぼそのままだけど下の
/********************************** (C) COPYRIGHT *******************************
* File Name : main.c
* Author : WCH
* Version : V1.0.0
* Date : 2022/08/08
* Description : Main program body.
*********************************************************************************
* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
* Attention: This software (modified or not) and binary are used for
* microcontroller manufactured by Nanjing Qinheng Microelectronics.
*******************************************************************************/
/*
*@Note
GPIO routine:
PD0 push-pull output.
*/
#include "debug.h"
/* Global define */
/* Global Variable */
/*********************************************************************
* @fn GPIO_Toggle_INIT
*
* @brief Initializes GPIOA.0
*
* @return none
*/
void GPIO_Toggle_INIT(void)
{
GPIO_InitTypeDef GPIO_InitStructure = {0};
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
/*********************************************************************
* @fn main
*
* @brief Main program.
*
* @return none
*/
int main(void)
{
u8 i = 0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
Delay_Init();
USART_Printf_Init(115200);
printf("SystemClk:%d\r\n", SystemCoreClock);
printf("GPIO Toggle TEST\r\n");
GPIO_Toggle_INIT();
while(1)
{
Delay_Ms(250);
GPIO_WriteBit(GPIOD, GPIO_Pin_6, (i == 0) ? (i = Bit_SET) : (i = Bit_RESET));
}
}