はじめに
ch32v003funの環境をWindowsに構築したメモです。
Installation · cnlohr/ch32fun Wikiの通りにやれば良いのですが、自分のまとめをしました。
環境
- Windows10
- CH32V003F4P6 Development board
- WCH-LinkE version 2.15
構築
githubからch32v003funを好きなフォルダにダウンロードします。
私は、C:\Users\USERNAME\Downloads\ch32v003fun
にgit cloneしました。
gccインストール
Prebuilt GNU toolchain for RISC-Vから、risc-v-gcc10.1.0.exe (22 MB) をダウンロード、イントールします。
インストール先:C:\SysGCC
The minichlink.exe file is already ready to go in the minichlink folder.
とあるように、minichlink.exe
はmakeしなくてもすでに入っています。
Zading
Zadig - USB driver installation made easyより、Zadingをダウンロードします。
zadig-2.9.exe
をダウンロードしました。
Zadingでドライバをインストールする前はWCH-LinkEはInterfaceで認識しています。
ZadingでWinUSB(?)をインストールします。
インストール後はUSBデバイスとして認識するようになります。
Lチカ
サンプルプログラムを作ってみます。
以下を参考にさせていただきました。
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.
まとめ
書き込み手順をまとめると、
- powershellでプログラムがあるフォルダに移動
- WCH-LinkEとマイコンを接続して通電
- powershellでmakeと打ち、enter
これで書き込まれます。簡単~
その他
ZadingでWinUSBをインストールした後は、Arduinoで書き込みができなくなります。
ドライバを消して、WCH-LinkEを挿し直せば戻りますがWCH-LinkEは安いので、戻さずに複数本持っていても良いかもしれません。
以上:)