前回に引き続き、RISC-VコアであるCH32V003でLチカをやっていきたいと思います。
前回では、ch32funのexamplesディレクトリーのblinkディレクトリーのCH32V003をコンパイルしました。せっかくなので、開発用のディレクトリーを新たに作成し、その開発用のディレクトリーで作成したblink.cをコンパイルしてみます。

前提条件として、ch32v003funは、ユーザーディレクトリーの直下に作成されているとものとします。
(前回のインスト-ルの手順であれば問題ありません)

例として、ユーザーディレクトリーの直下にprog/ch32v003/ch32fun/blinkというディレクトリーを作成しました

home/ユーザー/ch32fun/examples
     |   +--/ch32fun
     |   +--/minichlink
     |
     + /prog/ch32v003/ch32fun/blink

まずは、デバイスとしてCH32V003F4P6 20pinタイプで前回と同じ回路図で、PD4(1pin)、PD0(8pin)にLEDを接続した回路とします。

2つのLEDを500msでお互いの点滅が相反するようプログラムを作成します。

//CH32V003F4P6 20pin LED 点滅 プログラム

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

// 該当LEDと出力PINとの関連付け
#define PIN_LED1 PD0
#define PIN_LED2 PD4

int main()
{
	SystemInit();     // デバイスの初期化

	funGpioInitAll(); // gpioを活性化
	
	funPinMode( PIN_LED1,     GPIO_Speed_10MHz | GPIO_CNF_OUT_PP ); // gpioの補給クロックとpinを出力に設定
	funPinMode( PIN_LED2,     GPIO_Speed_10MHz | GPIO_CNF_OUT_PP ); // gpioの補給クロックとpinを出力に設定
	while(1)
	{
		funDigitalWrite( PIN_LED1,     FUN_HIGH ); // 該当のpin出力をHレベルにする
		funDigitalWrite( PIN_LED2,     FUN_LOW);   // 該当のpin出力をLレベルにする
		Delay_Ms( 500 );
		funDigitalWrite( PIN_LED1,     FUN_LOW );  // 該当のpin出力をLレベルにする
		funDigitalWrite( PIN_LED2,     FUN_HIGH ); // 該当のpin出力をHレベルにする
		Delay_Ms( 500 );
	}
}

上記プログラムをblink.cとして保存します。

makeフィルを作成します。

ターゲット名を記述します。ここではblink.cを対象するので、blinkとします。
ターゲットデバイスを指定します。 ここでは CH32V003とします。
minichlinkの居所を指定します。ユーサーディレクトリー直下にあるので、~/ch32fun/minichlink/としました。
makeに必要なch32fun.mkを指定します、 ここではユーサーディレクトリー直下にあるので~/ch32fun/ch32fun/ch32fun.mkとしました。

all : flash

TARGET:=blink

TARGET_MCU?=CH32V003

MINICHLINK=~/ch32fun/minichlink/

include ~/ch32fun/ch32fun/ch32fun.mk

flash : cv_flash
clean : cv_clean

Makefileとして保存します。

funconfig.hを~/ch32fun/examples/blinkからコピーします。何も編集はしません。

これで必要なファイルが揃いました。

~/prog/ch32v003/ch32fun/blink $ ls
Makefile  blink.c  funconfig.h

WCH-LinkEをusbに差して、makeします。

~/prog/ch32v003/ch32fun/blink $ make
riscv64-unknown-elf-gcc -E -P -x c -DTARGET_MCU=CH32V003 -DMCU_PACKAGE=1 -DTARGET_MCU_LD=0 -DTARGET_MCU_MEMORY_SPLIT= /home/rika/ch32fun/ch32fun//ch32fun.ld > /home/rika/ch32fun/ch32fun//generated__.ld
riscv64-unknown-elf-gcc -o blink.elf /home/rika/ch32fun/ch32fun//ch32fun.c blink.c   -g -Os -flto -ffunction-sections -fdata-sections -fmessage-length=0 -msmall-data-limit=8 -march=rv32ec -mabi=ilp32e -DCH32V003 -static-libgcc -I/usr/include/newlib -I/home/rika/ch32fun/ch32fun//../extralibs -I/home/rika/ch32fun/ch32fun/ -nostdlib -I. -Wall  -Wl,--print-memory-usage -Wl,-Map=blink.map -L/home/rika/ch32fun/ch32fun//../misc -lgcc -lgcc -T /home/rika/ch32fun/ch32fun//generated__.ld -Wl,--gc-sections
Memory region         Used Size  Region Size  %age Used
           FLASH:         652 B        16 KB      3.98%
             RAM:          0 GB         2 KB      0.00%
riscv64-unknown-elf-objdump -S blink.elf > blink.lst
riscv64-unknown-elf-objcopy  -O binary blink.elf blink.bin
riscv64-unknown-elf-objcopy -O ihex blink.elf blink.hex
make -C ~/ch32fun/minichlink/ all
make[1]: ディレクトリ '/home/rika/ch32fun/minichlink' に入ります
make[1]: 'all' に対して行うべき事はありません.
make[1]: ディレクトリ '/home/rika/ch32fun/minichlink' から出ます
~/ch32fun/minichlink//minichlink -w blink.bin flash -b
Found WCH Link
WCH Programmer is LinkE version 2.18
Detected CH32V003
Flash Storage: 16 kB
Part UUID: 77-53-ab-cd-df-a0-bc-80
Part Type: 00-30-05-00
Read protection: disabled
Interface Setup
Writing image

Image written.

書き込みが終了したらLED2つが500mS間隔て相反しながら点滅するはずです。

次に CH32V003J4M6 8pinダイブについても同様にLチカをやってみます。
LEDは PC1(5pin)、PC2(6pin)に接続しました。回路図は下記のとおりです。

2つのLEDを500msでお互いの点滅が相反するようプログラムを作成します。

格納するディレクトリーは prog/ch32v003/ch32fun/blink_8pとしました。

//CH32V003J4P6 8pin LED 点滅 プログラム

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

// 当LEDと出力PINとの関連付け
#define PIN_LED1 PC1
#define PIN_LED2 PC2

int main()
{
	SystemInit();    // デバイスの初期化

	funGpioInitAll(); // gpioを活性化
	
	funPinMode( PIN_LED1,     GPIO_Speed_10MHz | GPIO_CNF_OUT_PP ); // gpioの補給クロックとpinを出力に設定
	funPinMode( PIN_LED2,     GPIO_Speed_10MHz | GPIO_CNF_OUT_PP ); // gpioの補給クロックとpinを出力に設定
	while(1)
	{
		funDigitalWrite( PIN_LED1,     FUN_HIGH ); // 該当のpin出力をHレベルにする
		funDigitalWrite( PIN_LED2,     FUN_LOW);   // 該当のpin出力をLレベルにする
		Delay_Ms( 500 );
		funDigitalWrite( PIN_LED1,     FUN_LOW );  // 該当のpin出力をLレベルにする
		funDigitalWrite( PIN_LED2,     FUN_HIGH );  // 該当のpin出力をHレベルにする
		Delay_Ms( 500 );
	}
}

上記プログラムをblink_8p.cとして保存します

Makefile を作成します。ターゲット名の変更だけです。ここではblink_8p.cを対象するので、blink_8pとします。

all : flash

TARGET:=blink_8p

TARGET_MCU?=CH32V003

MINICHLINK=~/ch32fun/minichlink/

include ~/ch32fun/ch32fun/ch32fun.mk

flash : cv_flash
clean : cv_clea

Makefileとして保存します。

funconfig.hを~/ch32fun/examples/blinkからコピーします。何も編集はしません。

これで必要なファイルが揃いました。

~/prog/ch32v003/ch32fun/blink_8p $ ls
Makefile  blink_8p.c  funconfig.h

WCH-LinkEをusbに差して、makeします。

~/prog/ch32v003/ch32fun/blink_8p $ make
riscv64-unknown-elf-gcc -E -P -x c -DTARGET_MCU=CH32V003 -DMCU_PACKAGE=1 -DTARGET_MCU_LD=0 -DTARGET_MCU_MEMORY_SPLIT= /home/rika/ch32fun/ch32fun//ch32fun.ld > /home/rika/ch32fun/ch32fun//generated__.ld
riscv64-unknown-elf-gcc -o blink_8p.elf /home/rika/ch32fun/ch32fun//ch32fun.c blink_8p.c   -g -Os -flto -ffunction-sections -fdata-sections -fmessage-length=0 -msmall-data-limit=8 -march=rv32ec -mabi=ilp32e -DCH32V003 -static-libgcc -I/usr/include/newlib -I/home/rika/ch32fun/ch32fun//../extralibs -I/home/rika/ch32fun/ch32fun/ -nostdlib -I. -Wall  -Wl,--print-memory-usage -Wl,-Map=blink_8p.map -L/home/rika/ch32fun/ch32fun//../misc -lgcc -lgcc -T /home/rika/ch32fun/ch32fun//generated__.ld -Wl,--gc-sections
Memory region         Used Size  Region Size  %age Used
           FLASH:         652 B        16 KB      3.98%
             RAM:          0 GB         2 KB      0.00%
riscv64-unknown-elf-objdump -S blink_8p.elf > blink_8p.lst
riscv64-unknown-elf-objcopy  -O binary blink_8p.elf blink_8p.bin
riscv64-unknown-elf-objcopy -O ihex blink_8p.elf blink_8p.hex
make -C ~/ch32fun/minichlink/ all
make[1]: ディレクトリ '/home/rika/ch32fun/minichlink' に入ります
make[1]: 'all' に対して行うべき事はありません.
make[1]: ディレクトリ '/home/rika/ch32fun/minichlink' から出ます
~/ch32fun/minichlink//minichlink -w blink_8p.bin flash -b
Found WCH Link
WCH Programmer is LinkE version 2.18
Detected CH32V003
Flash Storage: 16 kB
Part UUID: 57-42-ab-cd-c0-63-bd-54
Part Type: 00-33-05-10
Read protection: disabled
Interface Setup
Writing image

Image written.

書き込みが終了したらLED2つが500mS間隔て相反しながら点滅するはずです。

おすすめの記事