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);
}
}