본문 바로가기

WCH/CH32V003

[CH32V003-SSP] CH32V003J4M6 PD1 SWIO 핀 공유 문제

 

CH32V003J4M6는 8핀 패키지로 핀수가 적다 보니 8번핀에 UART-TX 와 SWD 핀이 겹쳐 있다. UART 사용으로 설정한 펌웨어를 다운로드 하고나면 다음부터 인식이 안되는 현상이 발생한다.

 

 

해결 방법은 WCH-LinkUtility 프로그램에서 “Clear All Code Flash-By Power off” 로 지우면 다시 접속할 수 있다. 왜 하필 많이 사용하는 UART TX핀에 할당이 되어 있을까… 잘 사용하지 않는 다른핀도 있는데… 아쉽다. UART 디버깅을 하려면 이 프로그램으로 자주 지웠다 다시 살리는 형태로 불편하게 개발 해야 할것 같다.

 


또 한가지 해결책으로 리맵을 이용하여 PD6으로 할당 하면 될것 같다.

 

리맵으로 PD6을 TXD로 할당하면 정상적으로 동작 하는것을 확인 할 수 있다.

void USART_Printf_Init(uint32_t baudrate)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_USART1 | RCC_APB2Periph_AFIO, ENABLE);
    GPIO_PinRemapConfig(GPIO_PartialRemap2_USART1, ENABLE);
    
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOD, &GPIO_InitStructure);

    USART_InitStructure.USART_BaudRate = baudrate;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_Parity = USART_Parity_No;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Tx;

    USART_Init(USART1, &USART_InitStructure);
    USART_Cmd(USART1, ENABLE);
}

 

 

printf 함수를 사용해야 한다면 debug.h 파일을 수정해 주면 된다.

/* UART Printf Definition */
#define DEBUG_UART1_NoRemap   1  //Tx-PD5
#define DEBUG_UART1_Remap1    2  //Tx-PD0
#define DEBUG_UART1_Remap2    3  //Tx-PD6
#define DEBUG_UART1_Remap3    4  //Tx-PC0

/* DEBUG UATR Definition */
#ifndef DEBUG
//#define DEBUG   DEBUG_UART1_NoRemap
#define DEBUG   DEBUG_UART1_Remap2
#endif

 

반응형