UART
来源:互联网 发布:淘宝win10数字权利激活 编辑:程序博客网 时间:2024/05/06 23:55
UART
简介
通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,通常称作UART),是一种异步收发传输器,是电脑硬件的一部分,将资料由串行通信与并行通信间作传输转换。UART通常用在与其他通讯界面(如EIA RS-232 RS-422 RS-485)的连结上。
特性
- 异步:通信双方不需要时钟同步
- 双线:只有Tx和Rx两根数据线(不需要Clock线)
- 波特率:通信双方需要事前约定好相同的波特率
异步串口通信协议,工作原理是将传输数据的每个字符以串行方式一位接一位的传输。
工作模式
- UART数据图
- UART协议图
协议图中每一位数据的意义:
- 起始位:先发出一个逻辑”0”的信号,表示传输开始。
- 数据位:紧接着起始位之后。数据位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。传送方式LSB/MSB。
- 奇偶校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。
- 停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。
- 空闲位:处于逻辑“1”状态,表示当前线路上没有数据传送。
- 波特率:是衡量数据传送速率的指针。表示每秒钟传送的二进制位数。例如数据传送速率为120字符/秒,而每一个字符为10位,则其传送的波特率为10×120=1200字符/秒=1200波特。
UART协议代码分析
开发环境
- 飞思卡尔FRDM-K64F开发板
- KDS3.2集成开发环境
- 飞思卡尔官方KSDK2.0开发库
- ubuntu16.04操作系统
代码实例
参考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 Detection功能会从最后一个数据的STOP位开始检测,当检测到连续10或者13个高电平时,即表示没有start位过来了,即判断上一帧数据已经传输完毕,此时UART可以产生IDLE Line中断(即在整个传送过程中只有这一次中断),在此中断中可以置一个数据帧接收完成标志,然后在主程序可以对接收到的数据进行解包处理。
#: idle-uart线路空闲
0 0
- UART
- UART
- UART
- UART
- UART
- UART
- UART
- UART
- uart
- UART
- UART
- UART
- UART
- UART
- UART
- UART
- UART
- UART
- 面向过程向面向对象转变
- 【转】为什么 ++[[]][+[]]+[+[]] = 10 ?
- 安卓Viewpager加载大量图片的时候卡顿
- Android Studio中Git的使用
- HDU 2819 Swap(最大二分图匹配)
- UART
- 致敬我奋起直追的2016
- Codeforces Round #390 (Div. 2) D. Fedor and coupons
- 软件测试趣事
- eclipse打开快速打开本地文件目录
- web前端开发学习路径图
- Poj 2387 Til the Cows Come Home
- mybatis使用Resources读取配置文件
- 为什么加载数据库驱动只用Class.forName()