ch32v003メモ

[ch32v003]Lチカ(delay)

ch32v003funを用いたLチカのサンプル。(delayで点滅)(2023.7.23)
[参考資料]は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