通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,通常称作UART),是一种异步收发传输器,是电脑硬件的一部分,将资料由串行通信与并行通信间作传输转换。UART通常用在与其他通讯界面(如EIA RS-232 RS-422 RS-485)的连结上。
异步串口通信协议,工作原理是将传输数据的每个字符以串行方式一位接一位的传输。
协议图中每一位数据的意义:
参考KSDK2.0 UART/interrupt例程设计,主程序如下:
UART_GetDefaultConfig(&uart_config);
uart_config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE;
uart_config.enableRx = true;
uart_config.enableTx = true;
UART_Init(DEMO_UART, &uart_config, CLOCK_GetFreq(DEMO_UART_CLK_SRC));
/* 使能接收溢出中断、接收中断、线路空闲中断 */
UART_EnableInterrupts(DEMO_UART, kUART_RxOverrunInterruptEnable | kUART_RxDataRegFullInterruptEnable | kUART_IdleLineInterruptEnable);
/* Interrupt handler */
void UART4_RX_TX_IRQHandler(void)
{
uint32_t status = UART_GetStatusFlags(DEMO_UART);
/* Receive data */
if (status & (kUART_RxDataRegFullFlag | kUART_RxOverrunFlag)) {
rx_buffer[receive_data_len] = UART_ReadByte(DEMO_UART);
receive_data_len++;
}
/* UART bus idle */
if (status & kUART_IdleLineFlag) {
is_receive_all = true;
uint8_t data = DEMO_UART->D;
}
}
在串口接收数据的过程中,如何判断一帧数据?
frem-k64f单片机的uart模块,在中断选项中有idle(线路空闲)中断,该中断工作方式如下:
#: idle-uart线路空闲