ch32v003funをWindowsに構築しCH32V003F4P6でLチカ

はじめに

ch32v003funの環境をWindowsに構築したメモです。

Wikiの通り(以下↓)にやれば良いのですが、自分のまとめをしました。

github.com

環境

  • Windows10
  • CH32V003F4P6 Development board
  • WCH-LinkE version 2.15

Development boardの詳細は以下↓

atooshi-note.hatenablog.jp

構築

githubからch32v003funを好きなフォルダにダウンロードします。

github.com

私は、C:\Users\USERNAME\Downloads\ch32v003funにgit cloneしました。

gccインストール

以下から、risc-v-gcc10.1.0.exe (22 MB) をダウンロード、イントールします。

gnutoolchains.com

インストール先:C:\SysGCC

The minichlink.exe file is already ready to go in the minichlink folder.

とあるように、minichlink.exeはmakeしなくてもすでに入っています。

Zading

以下より、Zadingをダウンロードします。

zadig.akeo.ie

zadig-2.9.exeをダウンロードしました。

Zadingでドライバをインストールする前はWCH-LinkEはInterfaceで認識しています。

ZadingでWinUSB(?)をインストールします。

インストール後はUSBデバイスとして認識するようになります。

Lチカ

サンプルプログラムを作ってみます。

以下を参考にさせていただきました。

74th.hateblo.jp

C:\Users\USERNAME\Downloads\ch32v003fun\examples\template をコピーし、

C:\Users\USERNAME\Downloads\ch32v003fun\examples\blinktest20241221 を作りました。

template.c、template.h のファイル名を作りたいプログラム名(例えば usb_rebooter.c)に変更します。

とありますが、template.hは無く、funconfig.hだったので、名前変更はtemplate.cの方だけにしました。

blinktest20241221.c に変更しています。

CH32V003F4P6 Development BoardのD1が点滅するプログラムです。

サンプルプログラム(C:\Users\USERNAME\Downloads\ch32v003fun\examples\blink\blink.c)をコピペして不要部分をコメントアウトしたので、不要行が多いです。

/*
blinktest20241221
D1のblink
*/

#include "ch32v003fun.h"
#include <stdio.h>

// use defines to make more meaningful names for our GPIO pins
//#define PIN_1 PD0
#define PIN_K PD4
//#define PIN_BOB PD6
//#define PIN_KEVIN PC0

int main()
{
    SystemInit();

    // Enable GPIOs
    funGpioInitAll();
    
    //funPinMode( PIN_1,     GPIO_Speed_10MHz | GPIO_CNF_OUT_PP );
    funPinMode( PIN_K,     GPIO_Speed_10MHz | GPIO_CNF_OUT_PP );
    //funPinMode( PIN_BOB,   GPIO_Speed_10MHz | GPIO_CNF_OUT_PP );
    //funPinMode( PIN_KEVIN, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP );

    while(1)
    {
        //funDigitalWrite( PIN_1,     FUN_HIGH );
        funDigitalWrite( PIN_K,     FUN_HIGH );
        //funDigitalWrite( PIN_BOB,   FUN_HIGH );
        //funDigitalWrite( PIN_KEVIN, FUN_HIGH );
        Delay_Ms( 100 );
        //funDigitalWrite( PIN_1,     FUN_LOW );
        funDigitalWrite( PIN_K,     FUN_LOW );
        //funDigitalWrite( PIN_BOB,   FUN_LOW );
        //funDigitalWrite( PIN_KEVIN, FUN_LOW );
        Delay_Ms( 250 );
    }
}

なお、コードの作成を ch32v003fun の examples ディレクトリ内に新しくディレクトリを作って行った場合、TARGET だけを書き換えれば良いです。

とのことですので、Makefileは

TARGET:=blinktest20241221

とだけにしました。

接続

3.3V, GND, SWIO(pin18, PD1)の3本を接続するだけです。

PD1はJ2 7pin

もしくは、U4 2pin です。

どちらでも良いです。

make、書き込み

このディレクトリにpowershellで移動してmakeします。

makeが入っていない場合は入れる必要があります。

私はmakeは元々入れてありました。

PS C:\Users\USERNAME> make -v
GNU Make 3.82
Built for i686-pc-mingw32
Copyright (C) 2010  Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

makeが通り、WCH-LinkEを認識、CH32V003F4P6を検出して書き込みまで完了しています。

PS C:\Users\USERNAME\Downloads\ch32v003fun\examples\blinktest20241221> make
riscv64-unknown-elf-gcc -E -P -x c -DTARGET_MCU=CH32V003 -DMCU_PACKAGE= -DTARGET_MCU_LD=0 -DTARGET_MCU_MEMORY_SPLIT= ../../ch32v003fun/ch32v003fun.ld > ../../ch32v003fun/generated_ch32v003.ld
riscv64-unknown-elf-gcc -o blinktest20241221.elf ../../ch32v003fun/ch32v003fun.c blinktest20241221.c   -g -Os -flto -ffunction-sections -fdata-sections -fmessage-length=0 -msmall-data-limit=8 -march=rv32ec -mabi=ilp32e -DCH32V003=1 -static-libgcc -I/usr/include/newlib -I../../ch32v003fun/../extralibs -I../../ch32v003fun -nostdlib -I. -Wall  -Wl,--print-memory-usage -Wl,-Map=blinktest20241221.map -L../../ch32v003fun/../misc -lgcc -T ../../ch32v003fun/generated_ch32v003.ld -Wl,--gc-sections
Memory region         Used Size  Region Size  %age Used
           FLASH:        1844 B        16 KB     11.25%
             RAM:          0 GB         2 KB      0.00%
riscv64-unknown-elf-objdump -S blinktest20241221.elf > blinktest20241221.lst
riscv64-unknown-elf-objcopy -O binary blinktest20241221.elf blinktest20241221.bin
riscv64-unknown-elf-objcopy -O ihex blinktest20241221.elf blinktest20241221.hex
make -C ../../ch32v003fun/../minichlink all
make[1]: Entering directory `C:/Users/USERNAME/Downloads/ch32v003fun/minichlink'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `C:/Users/USERNAME/Downloads/ch32v003fun/minichlink'
../../ch32v003fun/../minichlink/minichlink -w blinktest20241221.bin flash -b
Found WCH Link
WCH Programmer is CH32V307 version 2.15
Full Chip Type Reply: [8] 82-0d-05-09-00-30-05-00-03
Detected: CH32V003
Setup success
Flash Storage: 16 kB
Part UUID    : f7-36-ab-cd-5f-54-bc-51
PFlags       : ff-ff-ff-ff
Part Type (B): 00-30-05-00
Read protection: disabled
Interface Setup
Writing image

Image written.

まとめ

書き込み手順をまとめると、

  1. powershellでプログラムがあるフォルダに移動
  2. WCH-LinkEとマイコンを接続して通電
  3. powershellでmakeと打ち、enter

これで書き込まれます。簡単~

その他

ZadingでWinUSBをインストールした後は、Arduinoで書き込みができなくなります。

再度Zadingで戻せば戻るかもしれません(未確認です)

WCH-LinkEは安いので、戻さずに複数本持っていても良いかもしれません。

以上:)