Cortex-M/EFM322013. 4. 30. 21:30

EFM32G210 EVM - UART 테스트

EFM32G210 EVM - UART 테스트

 


MCU를 처음 다룰때 디버깅 및 제어를 위해 가장 기본적으로 필요한 인터페이스 수단으로 UART를 사용하는데 EFM32는 2채널의 UART가 있다. 특히 Low Energy UART 기능이 있어 저전력으로 UART통신을 할 수 있다고 한다.











EFM32 UART 블록도

 


EFM32 UART 핀맵

PE10, PE11 에 UART0가 연결되어 있다.

 

PC0, PC1에 UART1이 연결되어 [EFM32 EVM] 보드에서는  있지만 SPI로 사용하고 있다.

 


EFM32 UART 초기화코드

 void U0_Init(unsigned char baud)
{   
 USART_InitAsync_TypeDef init = USART_INITASYNC_DEFAULT;
 USART_TypeDef *usart = USART0;
 
 U0_SetBaud(baud);

    CMU_ClockEnable(cmuClock_HFPER, true);
    CMU_ClockEnable(cmuClock_USART0, true);   

 /* Use default location 0: TX - Pin C0, RX - Pin C1 */
 GPIO_PinModeSet(gpioPortE, 10, gpioModePushPull, 1);
 ///Define input, no filtering
 GPIO_PinModeSet(gpioPortE, 11, gpioModeInput, 0);
 
 //Enable pins at default location
 usart->ROUTE = USART_ROUTE_LOCATION_LOC0 | USART_ROUTE_RXPEN | USART_ROUTE_TXPEN;

 /* Configure USART for basic async operation */
 init.enable = usartEnable;
 USART_InitAsync(usart, &init);

 /* Finally enable it */
 USART_Enable(usart, usartEnable);
}

 

 

EFM32 UART 송수신 함수

unsigned char U0_GetByte(void)
{
  while (!(USART0->STATUS & USART_STATUS_RXDATAV));

  return (uint8_t)(USART0->RXDATA);
}

 

 

void U0_PutByte(unsigned char Data)
{
  while (!(USART0->STATUS & USART_STATUS_TXBL));
  USART0->TXDATA = (uint32_t)Data;
}

 

 

 

EFM32 UART 테스트 소스코드

int main(void)
{
    unsigned int cnt = 0;
    _SystemInit();

   
    Led1Init();
    Led1Off();
   
    DebugInit(BAUD_115200);
    DebugPrint("EFM32 UART Test\r\m");
   
    while (1)
    {
        DebugPrint("cnt=%d\r\n", cnt++);
        Delay(100);
    }
}

 

Posted by nexp

댓글을 달아 주세요