嵌入式应用之UART串口
目录
一、串口的介绍
1、特性
2、通信
3、组成
二、串口中相关寄存器
1、发送和接收相关寄存器
2、中断相关寄存器
(1)U0IER
(2)U0IIR
3、设置FIFO相关寄存器
4、线状态相关寄存器
(1)U0LCR
(2)U0LSR
本文以LPC2000系列微控制器的UART作为介绍
一、串口的介绍
1、特性
具有16字节接收FIFO和16字节发送FIFO
寄存器位置符合16C550工业标准
接收FIFO触发点可设置为1、4、8或14字节
内置波特率发生器
2、通信
使用UART通信需要两个引脚分别为:RxD0和TxD0,RxD0作为串行输入(接收数据),TxD0作为串行输出(发送数据)
当我们把下位机和PC机用串口连接起来时,有一个重要的东西就起到了关键性作用——232电平转换器,因为与PC机相连时,由于PC机串口是RS232电平,所以连接时需要使用RS232转换器。
一是起到电平转换作用,还有一个作用就是交叉电路(即下位机串口的TxD0引脚发送的数据要给到PC机串口的RxD0引脚,下位机串口的RxD0同理)
3、组成
二、串口中相关寄存器
1、发送和接收相关寄存器
这里的U0THR和U0RBR就是影子寄存器(上一篇中有介绍),它们是通过读/写操作予以区分的。
U0DLL是除数锁存器低字节、U0DLM是除数锁存器高字节;这两个寄存器决定波特率时钟的频率,而波特率时钟必须是波特率的16倍。所以波特率计算公式:
BaudRate = FPCLK / ([U0DLM,U0DLL]×16)
PS:由于U0DLL、U0DLM寄存器与U0THR和U0RBR的地址重叠,所以在访问它们时,U0LCR的除数锁存访问位(DLAB)必须为1,如果需要读或者写,则需要把除数锁存位置0
2、中断相关寄存器
(1)U0IER
U0IER是中断使能寄存器,它可以控制UART的4个中断源。其中RBR中断使能包含2个中断,一个是接收数据可用中断(RAD),一个是接收超时中断(CTI);THRE中断使能对应发送中断(THRE);Rx线状态中断使能对应接收线状态中断(RLS)。
(2)U0IIR
U0IIR是中断标志寄存器,用于指示一个挂起中断的中断源和优先级(即知道有没有中断触发)
中断优先级由高到低:RLS中断->RDA中断->CTI中断->THRE中断
RLS中断:读取U0RLS时清除该中断
RAD中断:当接收的有效数据到达接收FIFO设置寄存器(U0FCR)中设置的触发点时,RDA被激活。当接收FIFO中的有效数据少于触发点时,RDA复位
CTI中断:当接收FIFO中的有效数据少于设置的触发点且至少有一个字节时,如果超过接收3.5~4.5个字节所需要的时间(注意是接收这么多字节的时间)仍没有接收到数据,那将触发该中断。对接收FIFO的任何操作都会清零该中断标志;
PS:RAD就是FIFO满了就触发中断(即串口知道有东西来了需要接收),而CTI是接收FIFO没满
THRE中断当发送FIFO为空并且满足一定的条件时,该中断将被触发。在上一次发生THRE中断后,向发送FIFO中写入1个字节数据,将在延时一个字节加上一个停止位后发生THRE中断。(为了不影响后面写入FIFO的数据);如果在发送FIFO中有过两个字节以上的数据,但是现在发送FIFO为空时,将立即触发THRE中断。
3、设置FIFO相关寄存器
U0FCR 设置FIFO寄存器
第0位:使能FIFO。
该位为1时,使能UART0的接收和发送FIFO,并且允许访问U0FCR。
该位为0时,禁止接收FIFO,此时接收缓存只有1个字节而且发送FIFO不会被关闭。
第1位:复位RxFIFO;接收FIFO复位;当该位置位时,UART0接收FIFO中的所有字节被清零并复位指针逻辑,该位会自动清零。
第2位:复位TxFIFO;发送FIFO复位。
[5:3]位:保留
[7:6]位:Rx触发点设置 00:1字节 01:4字节 10:8字节 11:14字节
4、线状态相关寄存器
(1)U0LCR
又称线状态控制寄存器:控制发送和接收数据帧格式
字长: 控制数据长度
00:5位字符长度 01:6位字符长度 10:7位字符长度 11:8位字符长度
停止位:控制数据包包含的停止位个数
0:1个停止位 1:2个停止位
奇偶设置就是奇偶使能:控制是否进行奇偶校验
0:禁止奇偶产生和校验 1:使能奇偶产生和校验
奇偶选择:设置奇偶校验类型
00:奇数(数据位+校验位=奇数) 01:偶数 10:校验位强制为1 11:校验位强制为0
间隔:当该位为1时,输出引脚(TxD0)强制为逻辑0,可以引起通信对方产生间隔中断。
0:禁止间隔发送 1:使能间隔发送
除数锁存:因为U0DLL/U0DLM和U0RBR/U0THR的地址重叠,通过设置该位可以指定其中某个寄存器操作。
0:禁止访问除数锁存寄存器 1:使能访问除数锁存寄存器
(2)U0LSR
又称线状态寄存器,只读寄存器,反映了UART0接收和发送模块的状态信息
RDR:决定能否从FIFO中读取数据;
0:U0RBR为空 1:U0RBR中包含有效数据,从接收FIFO中读走所有数据后,恢复为0。
OE:溢出错误标志。即当U0RBR中有新的字符来了但接收FIFO满了该位置位
0:接收缓存区没有溢出 1:接收缓存区发生溢出错误
PE:奇偶校验错误,在使能奇偶校验位之后,对所有接收的数据都进行奇偶校验,如果与U0LCR中的设置不符,将引起奇偶校验错误。
0:没有发生奇偶校验 1:发生奇偶校验错误。在读操作时使该位恢复为0
FE:帧错误标志。当接收字符的停止位为0时,产生帧错误。
0:没有发生帧错误 1:发生帧错误。读取该位时恢复为0。
BI:间隔中断标志。 0:没有发生间隔中断 1:发生间隔中断
THRE:反映U0THR(发送缓存寄存器)是否为空,也可以认为发送FIFO是否为空。
0:不为空 1:为空;对U0THR进行写操作时,该位变为0
TEMT:当发送移位寄存器和U0THR均为空时,该位置位。
0:不为空 1:为空;对U0THR写操作时,该位变为0
RXFE:如果一个带有接收错误(如帧错误、奇偶错误)的字符装入U0RBR时,该位置位
0:U0RBR中没有接收错误或U0FCR[0]为0 1:U0RBR中包含至少一个UART0 Rx错误。
举两个简单的例子
1、串口初始化
2、收发数据
void UART0_SendByte(uint8 data)
{U0THR = data; //将要发送的数据写入发送缓存寄存器中while((U0LSR & 0x40) == 0); //等待数据发送完毕
}
uint8 UART0_RcvByte(void)
{uint8 rcv_data; while((U0LSR & 0x01) == 0); //等待接收数据rcv_data = U0RBR; //读出U0RBR中的数据return(rcv_data); //返回读到的数据
}
嵌入式应用之UART串口相关推荐
- 串口的偶校验位设置_详解UART串口
通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,通常称作UART) 是一种串行异步收发协议,应用十分广泛.UART工作原理是将数据的二进制位 ...
- Android 模拟Uart 串口通信
下载串口工具 1.下载模拟串口工具:模拟串口工具 模拟串口工具用于生成模拟的两个串口,而不需要真实的物理串口. 2.下载串口调试工具:串口调试工具 串口调试工具用于直接通过串口发送数据 我这里有整合过 ...
- Linux uart寄存器读写,Linux下读写UART串口的代码
Linux下读写UART串口的代码,从IBM Developer network上拿来的东西,操作比較的复杂,就直接跳过了,好在代码能用,记录一下- 两个实用的函数- /** *@brief 设置串口 ...
- UART串口通信浅谈之(二)--寄存器设置
1.1 通信的三种基本类型 常用的通信通常可以分为单工.半双工.全双工通信. 单工就是指只允许一方向另外一方传送信息,而另一方不能回传信息.比如我们的电视遥控器,我们的收音机广播等,都是单工通信技术. ...
- UART串口通信浅谈之(一)--基础概述
通信按照传统的理解就是信息的传输与交换.UART(Universal Asynchronous Receiver/Transmitter,即通用异步收发器)串行通信是单片机最常用的一种通信技术,通常用 ...
- NXP(I.MX6uLL) UART串口通信原理————这个未复习
参考:Linux NXP (I.MX6uLL) UART串口通信原理 作者:一只青木呀 发布时间: 2020-09-20 16:48:33 网址:https://blog.csdn.net/weixi ...
- 树莓派UART串口编程--使用wiringPi库-C开发【1-基础应用】
一.串口说明 莓派3B+上UART串口位于GPIO的8脚和10脚,分别为GPIO8=Tx,GPIO10=Rx.在连接外部接口时,需要交换接口,即GPIO8连接到外设的Rx,GPIO10连接到外设的Tx ...
- SJXXX串口扩展芯片 4串口芯片 UART串口芯片
SJXX串口扩展芯片 1 概述 SJ000是一款具备I2C总线/SPI总线/UART接口的四通道异步收发器件,通过模式选择使得该器件工作于以上任何一种主接口模式下.器件的四个通道UART可提供高达2M ...
- STM32 HAL库 UART 串口读写功能笔记
https://www.cnblogs.com/Mysterious/p/4804188.html STM32L0 HAL库 UART 串口读写功能 串口发送功能: uint8_t TxData[10 ...
- (三) UART 串口通讯
UART : university asynchronous receiver and transmitter UART // 通用异步接收器和发送器 为什么要有串口:因为许多嵌入式设备没有显示屏 ...
最新文章
- 10篇顶会paper,入选微软学者,上海交大吴齐天的科研思考!
- 你的裸照,一键生成,令人害怕的不是算法,是人心!
- Beaglebone Black教程项目1闪烁板载LED
- python学习day-8 迭代器 生成器 装饰器
- RTP/RTSP/RTCP 协议详解
- hello-world
- HttpReqeust对象
- vue 开发依赖安装
- ios开发之获取版本号,部分设备信息
- 基因学:大数据的大希望
- 灵格斯怎么屏幕取词_灵格斯词霸怎么屏幕取词
- 普通学校,非科班,从电脑小白到大厂offer的自学之路
- Kali Linux 软件源与更新源和更新命令
- 超级计算机神威太湖之光储蓄量,中国超级计算机神威太湖之光世界最快,且总量排名榜单第一...
- script用英语怎么说,script英语什么意思
- JER与JDK区别以及JDK的安装配置(2021-06-13 Win10)
- 康熙王朝---转自别人的旁白分析
- 笔试练习题001...to be continued...
- 服务器如何防御攻击,有哪些方法
- 寻找技术KOL | IOST技术征文计划
热门文章
- Jenkins容器由于虚拟内存不足导致的异常退出
- 手机屏幕的色彩偏离度(ΔE)(也就是常说的色准)
- feign调用不通问题,JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r
- win 11bitlocker恢复密匙一般情况的解决方式(这里指的是你现在使用的微软账户一直没有变更过)
- uni-app云打包成ipa文件安装到iPhone上全过程记录
- 计算机专业可以从事平面设计吗,计算机专业和平面设计专业是一个专业不?
- 主板风扇转不开机是什么问题_cpu风扇转主板不启动怎么办
- IBM内存三技术:Chipkill、MPX、MM
- Python_day19--HTML基础--文本标签、超链接标签、图片标签
- python二元函数图像在线绘制_用python绘制二元函数