CH32V003은 100원대의 저렴한 RISC-V 코어로 간단한 어플리케이션에는 사용하기 좋았는데 Arduino같은 약간 무거운 라이브러리를 올리기에는 메모리 용량이 너무 부족하다. CH32X035는 저렴하지만 64k 플레시 메모리에 USB까지 내장해서 다양한 어플리케이션에 적용하기 좋을것 같다.
WCH사의 Arduino 개발환경은 https://github.com/openwch/arduino_core_ch32 에서 다운로드 받을 수 있다.
CH32V003 Arduino 개발 환경 설정을 참고로 해서 CH32X035로 설정해서 테스트 해보자
const int ledPin = PA0;
void setup() {
// set the digital pin as output:
pinMode(ledPin, OUTPUT);
}
void loop() {
// here is where you'd put code that needs to be running all the time.
/*
digitalWrite(ledPin, 0);
delay(1000);
digitalWrite(ledPin, 1);
delay(1000);
*/
/*
GPIOD->BSHR = GPIO_Pin_4;
GPIOD->BCR = GPIO_Pin_4;
*/
GPIOA->BSHR = GPIO_Pin_0;
GPIOA->BCR = GPIO_Pin_0;
}
CH32X035의 GPIO 토글 속도는 88ns 로 측정이 된다.
48Mhz 클럭 시스템은 보통 40ns는 나와야 하는데…
먼저 클럭 설정을 보자
C:\Users\jhpark\AppData\Local\Arduino15\packages\WCH\hardware\ch32v\1.0.3\system\CH32X035\USER\system_ch32x035.c
파일에서 클럭 설정 부분을 보면 48Mhz로 설정되어 있다.
//#define SYSCLK_FREQ_8MHz_HSI 8000000
//#define SYSCLK_FREQ_12MHz_HSI 12000000
//#define SYSCLK_FREQ_16MHz_HSI 16000000
//#define SYSCLK_FREQ_24MHz_HSI 24000000
#define SYSCLK_FREQ_48MHz_HSI HSI_VALUE
/* Clock Definitions */
#ifdef SYSCLK_FREQ_8MHz_HSI
uint32_t SystemCoreClock = SYSCLK_FREQ_8MHz_HSI; /* System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_12MHz_HSI
uint32_t SystemCoreClock = SYSCLK_FREQ_12MHz_HSI; /* System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_16MHz_HSI
uint32_t SystemCoreClock = SYSCLK_FREQ_16MHz_HSI; /* System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_24MHz_HSI
uint32_t SystemCoreClock = SYSCLK_FREQ_24MHz_HSI; /* System Clock Frequency (Core Clock) */
#else
uint32_t SystemCoreClock = HSI_VALUE; /* System Clock Frequency (Core Clock) */
#endif
48Mhz로 설정되어 있다.
그렇다면 Arduino 환경이라 그런가?
반응형