EFR32FG14 UART的使用方法
1.初始化串口(PA0->TX ,PA1->RX)
void RETARGET_SerialInit(void)
{
CMU_ClockEnable(cmuClock_HFPER, true);
CMU_ClockEnable(cmuClock_GPIO, true);
GPIO_PinModeSet(gpioPortA, 0,gpioModePushPull, 1);
GPIO_PinModeSet(gpioPortA, 1, gpioModeInputPull, 1);
USART_TypeDef *usart = RETARGET_UART;
USART_InitAsync_TypeDef init = USART_INITASYNC_DEFAULT;
RETARGET_PERIPHERAL_ENABLE();
CMU_ClockEnable(RETARGET_CLK, true);
init.enable = usartDisable;
init.baudrate = 9600;
USART_InitAsync(usart, &init);
#if defined(USART_ROUTEPEN_RXPEN)
usart->ROUTEPEN = USART_ROUTEPEN_RXPEN | USART_ROUTEPEN_TXPEN;
usart->ROUTELOC0 = (usart->ROUTELOC0
& ~(_USART_ROUTELOC0_TXLOC_MASK
| _USART_ROUTELOC0_RXLOC_MASK) )
| (RETARGET_TX_LOCATION << _USART_ROUTELOC0_TXLOC_SHIFT)
| (RETARGET_RX_LOCATION << _USART_ROUTELOC0_RXLOC_SHIFT);
USART_IntClear(RETARGET_UART, USART_IF_RXDATAV);
NVIC_ClearPendingIRQ(RETARGET_IRQn);
USART_IntEnable(RETARGET_UART, USART_IF_RXDATAV);
NVIC_EnableIRQ(RETARGET_IRQn);
USART_Enable(usart, usartEnable);
USART_IntEnable(USART0, USART_IEN_RXDATAV);
USART_IntEnable(USART0, USART_IEN_TXC);
NVIC_EnableIRQ(USART0_RX_IRQn);
USART_IntSet(USART0, USART_IFS_TXC);
setvbuf(stdout, NULL, _IONBF, 0);
initialized = true;
}
2.编写串口接收中断函数
void USART0_RX_IRQHandler(void)
{
uint32_t flags;
flags = USART_IntGet(USART0);
USART0->IFC = flags;
uart_rxPtr[len++] = USART_Rx(USART0);
}
3.主函数调用即可
RETARGET_SerialInit();
串口接收到的数据直接存储在数组uart_rxPtr中。
串口发送直接调用
USART_Tx(USART0, data[i]);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)