본문 바로가기

WCH/CH32V20x

CH32V208 SSM - USB CDC 테스트

CH32V208는 저렴한 가격, 소형 패키지에 다양한 기능들이 있는데 USB 기능을 테스트를 해 보자. 간단하게 USB CDC 기능을 테스트 해 보면 좋을것 같다. 

CH32X035 에서 테스트 했던 USB CDC 테스트 코드와 차이점이 있는것 같다.

CH32V208는 USB 코드 주조가 많이 변경된 점이 있다.

 

#include "usb_pwr.h"
extern uint8_t USBD_Endp3_Busy;
extern __IO uint32_t bDeviceState;

int SendCdcData(char *pBuf, unsigned int Len)
{
    int ret = 0;

    if(bDeviceState = CONFIGURED)
    {
            NVIC_DisableIRQ( USB_LP_CAN1_RX0_IRQn );
            NVIC_DisableIRQ( USB_HP_CAN1_TX_IRQn );

            ret = USBD_ENDPx_DataUp( ENDP3, pBuf, Len);

            NVIC_EnableIRQ( USB_LP_CAN1_RX0_IRQn );
            NVIC_EnableIRQ( USB_HP_CAN1_TX_IRQn );

            return ret;
    }
}

 

 

CH32V208 USB Device CDC 를 이용한 데이터 출력예제

int main(void)
{   
	int cnt =0;
	char buf[64];

	//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	GPIO_INIT();
	Delay_Init(); 
	USART_Printf_Init(115200);
	printf("SystemClk:%d\r\n",SystemCoreClock);
	printf("USBD CDC Test\r\n");

	RCC_Configuration( );
	TIM2_Init( );
	UART2_Init( 1, DEF_UARTx_BAUDRATE, DEF_UARTx_STOPBIT, DEF_UARTx_PARITY );

	Set_USBConfig(); 
	USB_Init();	    
	USB_Interrupts_Config();    

	while(1)
	{
		sprintf(buf, "%d\r\n", cnt);

		if(SendCdcData(buf, strlen(buf)) == USB_SUCCESS)
		{
		cnt = (rand() % 100) + 1;
		}
	}
}

 

 

프로그램 실행하면 USB Serial 장치로 인식되고 수신된값이 그래프로 표시되는 것을 확인 할 수 있다.

 

반응형