본문 바로가기

WCH/CH32V003

CH32V003 SSM - 개발환경(MounRiver) 설정 및 MCU 성능 테스트

저렴하고 성능 좋은 MCU들이 많이 출시되고 있지만 새로운 개발환경을 구축하기가 힘들어 쉽게 바꾸지 못한다. 그런 측면에서 WCH의 CH32V는 RISC-V 코어로 다양한 개발환경을 지원하고 있다.
 
개발 환경
IDE는 RISC-V 용 mounriver를 사용하면 된다.

MounRiver 를 설치하고 예제를 다운받아서 실행하면 기본 설정이 구축되어 있고 컴파일 가능하다.

 

디버깅버튼을 클릭 하면 처음에 환경설정을 해주고 다운로드 및 디버깅이 가능하다.

 

만약 디버깅 환경 설정이 정상적으로 되지 않는다면 수동으로 설정해 주면 된다.

${eclipse_home}toolchain/OpenOCD/bin/${openocd_executable}
-f "${eclipse_home}toolchain/OpenOCD/bin/wch-riscv.cfg"

 

 


CH32V003의 개발환경 설정이 정상적으로 되었으니 MCU의 성능 측정(GPIO 토글 스피드)를 해 보자.

void GPIO_Toggle_INIT(void)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOD, &GPIO_InitStructure);
}
/*********************************************************************
 * @fn      main
 *
 * @brief   Main program.
 *
 * @return  none
 */
int main(void)
{
    u8 i = 0;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    Delay_Init();
    USART_Printf_Init(115200);
    printf("SystemClk:%d\r\n", SystemCoreClock);
    printf("GPIO Toggle TEST\r\n");
    GPIO_Toggle_INIT();
    while(1)
    {
        //Delay_Ms(250);
        //GPIO_WriteBit(GPIOD, GPIO_Pin_4, (i == 0) ? (i = Bit_SET) : (i = Bit_RESET));
        GPIOD->BSHR = GPIO_Pin_4;
        GPIOD->BCR = GPIO_Pin_4;
    }
}

 

 

테스트 결과 GPIO 토글 속도는 80ns로 비슷한 클럭의 Cortex-M0코어를 가진 STM32F030 과 비교해 보면 다소 느리게 측정된다.

 

클럭 설정 부분을 보면 HSE가 디폴트로 설정되어 있다. HSE가 설정되어 있지만 크리스털이 실장되어 있지 않기 때문에 에러가 발생하는데 이때 기본 24Mhz HSI로 구동이 된다고 한다.

클럭 설정을 HSI 48Mhz로 해서 테스트 해보자

//#define SYSCLK_FREQ_8MHz_HSI    8000000
//#define SYSCLK_FREQ_24MHZ_HSI   HSI_VALUE
#define SYSCLK_FREQ_48MHZ_HSI   48000000
//#define SYSCLK_FREQ_8MHz_HSE    8000000
//#define SYSCLK_FREQ_24MHz_HSE   HSE_VALUE
//#define SYSCLK_FREQ_48MHz_HSE   48000000

 

테스트 결과 GPIO 토글 속도는 40ns로 두배 정도 빨라 졌다. 메인 루프 수행 주기도 160ns정도로 빠르다.

이제 48Mhz의 일반적인 MCU속도가 측정되는 것을 확인 할 수 있다. 

반응형