arduino_core_ch32_sz
@verylowfreq (三峰 スズ) さんが作成しているボード、 Suzuno32RV 向けの Arduino IDE開発環境用のボード定義ファイルを提供しています.
Generic な 開発
Suzuno32RV 用の開発環境 arduino_core_ch32_sz を Generic な CH32V203 用に流用して、
「arduino_core_ch32_sz を使って BluePill+ を L チカする」
https://qiita.com/nanbuwks/items/0963b7a87469192240de
において開発をしてみました。
その後、以前解説した方法がうまくいかなくなったのでとりあえずの Hack.
環境
- Ubuntu 22.04 LTS
- Arduino 開発環境 1.8.19
- ポータブル化設定済
Hack
2026/4 の Commit a4a0fb6 において、 board.txt より CH32V20x_EVT Board が削除されたので
Commit f54043e から必要なものを持ってくる。
portable/packages/WCH_sz/hardware/ch32v/1.0.4+sz8/boards.txt を編集。
以下を追記します。
##############################################################################
##CH32V20x Board
CH32V20x_EVT.name=CH32V20x
CH32V20x_EVT.build.core=arduino
CH32V20x_EVT.build.board=CH32V20x_EVT
CH32V20x_EVT.upload.maximum_size=0
CH32V20x_EVT.upload.maximum_data_size=0
CH32V20x_EVT.build.variant_h=variant_{build.board}.h
CH32V20x_EVT.debug.tool=gdb-WCH_LinkE
#CH32V203C8 Generic Board
CH32V20x_EVT.menu.pnum.CH32V203C8_GEN=CH32V203C8_Generic
CH32V20x_EVT.menu.pnum.CH32V203C8_GEN.node=NODE_V203C8_Generic
CH32V20x_EVT.menu.pnum.CH32V203C8_GEN.upload.maximum_size=229376
CH32V20x_EVT.menu.pnum.CH32V203C8_GEN.upload.maximum_data_size=20480
CH32V20x_EVT.menu.pnum.CH32V203C8_GEN.build.mcu=QingKe-V4B
CH32V20x_EVT.menu.pnum.CH32V203C8_GEN.build.board=CH32V203C8
CH32V20x_EVT.menu.pnum.CH32V203C8_GEN.build.series=CH32V20x
CH32V20x_EVT.menu.pnum.CH32V203C8_GEN.build.variant=CH32V20x/CH32V203C8
CH32V20x_EVT.menu.pnum.CH32V203C8_GEN.build.chip=CH32V203
CH32V20x_EVT.menu.pnum.CH32V203C8_GEN.build.march=rv32imacxw
CH32V20x_EVT.menu.pnum.CH32V203C8_GEN.build.mabi=ilp32
CH32V20x_EVT.menu.pnum.CH32V203C8_GEN.build.math_lib_gcc=-lm
CH32V20x_EVT.menu.pnum.CH32V203C8_GEN.build.IQ_math_RV32=
CH32V20x_EVT.menu.pnum.CH32V203C8_GEN.build.ch_extra_lib=-lprintf
CH32V20x_EVT.menu.pnum.CH32V203C8_GEN.build.board_extra_flags=
# USB support
CH32V20x_EVT.menu.usb.none=None
CH32V20x_EVT.menu.usb.none.build.usb_flags=
CH32V20x_EVT.menu.usb.tinyusb_usbd=Adafruit TinyUSB with USBD
CH32V20x_EVT.menu.usb.tinyusb_usbd.build.usb_flags=-DUSBCON -DUSE_TINYUSB -DCFG_TUD_ENABLED=1 -DCFG_TUD_WCH_USBIP_FSDEV=1 "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
CH32V20x_EVT.menu.usb.tinyusb_usbd_usbfsh=Adafruit TinyUSB with USBD/USBFS Host
CH32V20x_EVT.menu.usb.tinyusb_usbd_usbfsh.build.usb_flags=-DUSBCON -DUSE_TINYUSB -DCFG_TUD_ENABLED=1 -DCFG_TUD_WCH_USBIP_FSDEV=1 -DCFG_TUH_ENABLED=1 -DCFG_TUH_WCH_USBIP_USBFS=1 "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
# Upload menu
CH32V20x_EVT.menu.upload_method.ispMethod=WCH-ISP
CH32V20x_EVT.menu.upload_method.ispMethod.upload.protocol=
CH32V20x_EVT.menu.upload_method.ispMethod.upload.options=
CH32V20x_EVT.menu.upload_method.ispMethod.upload.tool=wchisp
CH32V20x_EVT.menu.upload_method.ispMethod.bootloader.tool=wchisp
CH32V20x_EVT.menu.upload_method.swdMethod=WCH-SWD
CH32V20x_EVT.menu.upload_method.swdMethod.upload.protocol=
CH32V20x_EVT.menu.upload_method.swdMethod.upload.options=
CH32V20x_EVT.menu.upload_method.swdMethod.upload.tool=WCH_linkE
CH32V20x_EVT.menu.upload_method.swdMethod.bootloader.tool=WCH_linkE
CH32V20x_EVT.menu.upload_method.hidmethod=HID Bootloader
CH32V20x_EVT.menu.upload_method.hidmethod.upload.protocol=
CH32V20x_EVT.menu.upload_method.hidmethod.upload.options=
CH32V20x_EVT.menu.upload_method.hidmethod.upload.tool=hidbootloader
CH32V20x_EVT.menu.upload_method.hidmethod.build.ldscript=Link_bootloader.ld
CH32V20x_EVT.menu.upload_method.hidmethod.build.flash_base=0x08000000
CH32V20x_EVT.menu.upload_method.hidmethod.build.flash_offset=0x00004000
CH32V20x_EVT.menu.upload_method.hidmethod.build.family_id=0x699b62ec
# Clock Select
CH32V20x_EVT.menu.clock.144MHz_HSI=144MHz Internal
CH32V20x_EVT.menu.clock.144MHz_HSI.build.flags.clock=-DSYSCLK_FREQ_144MHz_HSI=144000000 -DF_CPU=144000000
CH32V20x_EVT.menu.clock.120MHz_HSI=120MHz Internal
CH32V20x_EVT.menu.clock.120MHz_HSI.build.flags.clock=-DSYSCLK_FREQ_120MHz_HSI=120000000 -DF_CPU=120000000
CH32V20x_EVT.menu.clock.96MHz_HSI=96MHz Internal
CH32V20x_EVT.menu.clock.96MHz_HSI.build.flags.clock=-DSYSCLK_FREQ_96MHz_HSI=96000000 -DF_CPU=96000000
CH32V20x_EVT.menu.clock.72MHz_HSI=72MHz Internal
CH32V20x_EVT.menu.clock.72MHz_HSI.build.flags.clock=-DSYSCLK_FREQ_72MHz_HSI=72000000 -DF_CPU=72000000
CH32V20x_EVT.menu.clock.56MHz_HSI=56MHz Internal
CH32V20x_EVT.menu.clock.56MHz_HSI.build.flags.clock=-DSYSCLK_FREQ_56MHz_HSI=56000000 -DF_CPU=56000000
CH32V20x_EVT.menu.clock.48MHz_HSI=48MHz Internal
CH32V20x_EVT.menu.clock.48MHz_HSI.build.flags.clock=-DSYSCLK_FREQ_48MHz_HSI=48000000 -DF_CPU=48000000
CH32V20x_EVT.menu.clock.HSI=HSI Internal
CH32V20x_EVT.menu.clock.HSI.build.flags.clock=-DSYSCLK_FREQ_HSI=HSI_VALUE -DF_CPU=HSI_VALUE
CH32V20x_EVT.menu.clock.144MHz_HSE=144MHz External
CH32V20x_EVT.menu.clock.144MHz_HSE.build.flags.clock=-DSYSCLK_FREQ_144MHz_HSE=144000000 -DF_CPU=144000000
CH32V20x_EVT.menu.clock.120MHz_HSE=120MHz External
CH32V20x_EVT.menu.clock.120MHz_HSE.build.flags.clock=-DSYSCLK_FREQ_120MHz_HSE=120000000 -DF_CPU=120000000
CH32V20x_EVT.menu.clock.96MHz_HSE=96MHz External
CH32V20x_EVT.menu.clock.96MHz_HSE.build.flags.clock=-DSYSCLK_FREQ_96MHz_HSE=96000000 -DF_CPU=96000000
CH32V20x_EVT.menu.clock.72MHz_HSE=72MHz External
CH32V20x_EVT.menu.clock.72MHz_HSE.build.flags.clock=-DSYSCLK_FREQ_72MHz_HSE=72000000 -DF_CPU=72000000
CH32V20x_EVT.menu.clock.56MHz_HSE=56MHz External
CH32V20x_EVT.menu.clock.56MHz_HSE.build.flags.clock=-DSYSCLK_FREQ_56MHz_HSE=56000000 -DF_CPU=56000000
CH32V20x_EVT.menu.clock.48MHz_HSE=48MHz External
CH32V20x_EVT.menu.clock.48MHz_HSE.build.flags.clock=-DSYSCLK_FREQ_48MHz_HSE=48000000 -DF_CPU=48000000
CH32V20x_EVT.menu.clock.HSE=HSE External
CH32V20x_EVT.menu.clock.HSE.build.flags.clock=-DSYSCLK_FREQ_HSE=HSE_VALUE -DF_CPU=HSE_VALUE
# Optimizations
CH32V20x_EVT.menu.opt.osstd=Smallest (-Os default)
CH32V20x_EVT.menu.opt.osstd.build.flags.optimize=-Os
CH32V20x_EVT.menu.opt.oslto=Smallest (-Os) with LTO
CH32V20x_EVT.menu.opt.oslto.build.flags.optimize=-Os -flto
CH32V20x_EVT.menu.opt.o1std=Fast (-O1)
CH32V20x_EVT.menu.opt.o1std.build.flags.optimize=-O1
CH32V20x_EVT.menu.opt.o1lto=Fast (-O1) with LTO
CH32V20x_EVT.menu.opt.o1lto.build.flags.optimize=-O1 -flto
CH32V20x_EVT.menu.opt.o2std=Faster (-O2)
CH32V20x_EVT.menu.opt.o2std.build.flags.optimize=-O2
CH32V20x_EVT.menu.opt.o2lto=Faster (-O2) with LTO
CH32V20x_EVT.menu.opt.o2lto.build.flags.optimize=-O2 -flto
CH32V20x_EVT.menu.opt.o3std=Fastest (-O3)
CH32V20x_EVT.menu.opt.o3std.build.flags.optimize=-O3
CH32V20x_EVT.menu.opt.o3lto=Fastest (-O3) with LTO
CH32V20x_EVT.menu.opt.o3lto.build.flags.optimize=-O3 -flto
CH32V20x_EVT.menu.opt.ogstd=Debug (-Og)
CH32V20x_EVT.menu.opt.ogstd.build.flags.optimize=-Og
CH32V20x_EVT.menu.opt.o0std=No Optimization (-O0)
CH32V20x_EVT.menu.opt.o0std.build.flags.optimize=-O0
# Debug information
CH32V20x_EVT.menu.dbg.none=None
CH32V20x_EVT.menu.dbg.none.build.flags.debug=-DNDEBUG
CH32V20x_EVT.menu.dbg.enable_sym=Symbols Enabled (-g)
CH32V20x_EVT.menu.dbg.enable_sym.build.flags.debug=-g -DNDEBUG
CH32V20x_EVT.menu.dbg.enable_log=Core logs Enabled
CH32V20x_EVT.menu.dbg.enable_log.build.flags.debug=
CH32V20x_EVT.menu.dbg.enable_all=Core Logs and Symbols Enabled (-g)
CH32V20x_EVT.menu.dbg.enable_all.build.flags.debug=-g
# C Runtime Library
CH32V20x_EVT.menu.rtlib.nano=Newlib Nano (default)
CH32V20x_EVT.menu.rtlib.nano.build.flags.ldflags=--specs=nano.specs --specs=nosys.specs
CH32V20x_EVT.menu.rtlib.nanofp=Newlib Nano + Float Printf
CH32V20x_EVT.menu.rtlib.nanofp.build.flags.ldflags=--specs=nano.specs --specs=nosys.specs -u _printf_float
CH32V20x_EVT.menu.rtlib.nanofs=Newlib Nano + Float Scanf
CH32V20x_EVT.menu.rtlib.nanofs.build.flags.ldflags=--specs=nano.specs --specs=nosys.specs -u _scanf_float
CH32V20x_EVT.menu.rtlib.nanofps=Newlib Nano + Float Printf/Scanf
CH32V20x_EVT.menu.rtlib.nanofps.build.flags.ldflags=--specs=nano.specs --specs=nosys.specs -u _printf_float -u _scanf_float
CH32V20x_EVT.menu.rtlib.full=Newlib Standard
CH32V20x_EVT.menu.rtlib.full.build.flags.ldflags=--specs=nosys.specs
@verylowfreq (三峰 スズ) さんの最新の作り込みを反映したいところだけれども、どのようにするのがいいかな? 最もいいやりかたが固まるまでとりあえずこれで。