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