ch32v003funを用いたLチカのサンプル。(delayで点滅)(2023.7.23)
[参考資料]はCH32V003RM.PDF
[参考資料]はCH32V003RM.PDF
ファイル一覧
ch32v003fun/examples/blink_delay/ ├── Makefile ├── blink.c └── funconfig.h
配線図

blink.c
・GPIO可能な6個のピンのうち、通信ピン(SWIO=Pin8)をのぞいた5ピンを約1Hzで点滅させる(PC1, PC2, PC4, PA1, PA2) ・コード解説 l.13 PA, PCのペリフェラルに電源供給する * APB2PCENR: APB2 Peripheral Clock Enable Register([参考資料] p.22) * RCC_APB2Periph_GPIOA 0x04(ch32v003fun.h) l.15-39, PA, PCの各ポートをEnableにする CFGLR:Configuration Register([参考資料] p.56) GPIO_Speed_10MHz (ch32v003fun.h) GPIO_CNF_OUT_PP(ch32v003fun.h) l.37-44, ピンの電源をオンオフ BSHR:([参考資料] p.57)
/* ------------------------------------------------------------ * ch32v003J4M6(8pin)でDelay_Msを用いたLチカを実行するコード * ・GPIO可能な6個のピンのうち、通信ピン(SWIO=Pin8)をのぞいた5ピンを点滅する(PC1, PC2, PC4, PA1, PA2) * ------------------------------------------------------------*/ #include "ch32v003fun.h" #include <stdio.h> int main() { SystemInit(); // Enable GPIOs RCC->APB2PCENR |= RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC; // GPIO C1 Push-Pull GPIOC->CFGLR &= ~(0xf<<(4*1)); GPIOC->CFGLR |= (GPIO_Speed_10MHz | GPIO_CNF_OUT_PP)<<(4*1); // GPIO C2 Push-Pull GPIOC->CFGLR &= ~(0xf<<(4*2)); GPIOC->CFGLR |= (GPIO_Speed_10MHz | GPIO_CNF_OUT_PP)<<(4*2); // GPIO C4 Push-Pull GPIOC->CFGLR &= ~(0xf<<(4*4)); GPIOC->CFGLR |= (GPIO_Speed_10MHz | GPIO_CNF_OUT_PP)<<(4*4); // GPIO A1 Push-Pull GPIOA->CFGLR &= ~(0xf<<(4*1)); GPIOA->CFGLR |= (GPIO_Speed_10MHz | GPIO_CNF_OUT_PP)<<(4*1); // GPIO A2 Push-Pull GPIOA->CFGLR &= ~(0xf<<(4*2)); GPIOA->CFGLR |= (GPIO_Speed_10MHz | GPIO_CNF_OUT_PP)<<(4*2); while(1) { GPIOA->BSHR = 0x06;// PA1=0x02, PA2=0x04 GPIOC->BSHR = 0x16;//PC1=0x02, PC2=0x04, PC4=0x10 printf("On\n"); Delay_Ms( 500 ); GPIOA->BSHR = (0x06<<16); GPIOC->BSHR = (0x16<<16); printf("Off\n"); Delay_Ms( 500 ); } }
funconfig.h
#ifndef _FUNCONFIG_H #define _FUNCONFIG_H #define CH32V003 1 #endif
Makefile
all : flash TARGET:=blink include ../../ch32v003fun/ch32v003fun.mk flash : cv_flash clean : cv_clean