UART接口说明

article/2025/11/7 3:12:21

逼近年关事情多,少了更新。今天冒个泡。说下UART通信接口。

UART扫盲

前面做了SPI和I2C,前两者一个是摩托,一个是飞利浦背书,简单好理解。这个UART就相对复杂一点,全称universal Asynchronous Receiver/Transmitter 通用异步通信协议,也有叫异步全双工通信协议。用线也很少,就俩,TX,RX,和I2C与SPI最大的不同就是少了时钟通讯线。少了时钟通讯线,那就要约定点什么:波特率,数据位,奇偶校验位,停止位等(保命等)。比方说的9600bps,1bit传输就是104.16us,115200bps,1bit传输就是8us。

UART资源

UART很好用,看看有多少片上资源,额,太多,首先支持11个UART,11个中第一个是全功能的UART,怎么个全功能,它是8线制(TXD,RXD,CTS,RTS,CDn,RIn,DTR和DSR),且带64字节的FIFO。然后5个带流式控制(2、4、6、8、10)4线制的(TXD,RXD,CTS,RTS),5个丐版标准制(0、3、5、7、9)。

重点来了,支持三种模式,红外、RS-485、LIN(Local Interconnect Network)模式(迟迟搞不懂的协议)。

RS-485模式

这个是3个中最好理解的,也是最常见到的。

主要它相对于232,首先传输通过的是差分信息(就是两线传递取电压差),这个就是抗干扰能力强,传输距离远,可带的负载多,两根线能挂128设备。但是呢,是半双工的,可能是唯一的缺点了。另外232的电平是5~15V,-5~-15V,可能取负电平为1。458呢是压差2~6V,负-2~6V。

NUC970支持9位传输模式,第9位当是字节代表地址时,会被置为1,当为数据字节时,会被置为0。NUC970支持有三种485工作模式:普通多节点操作模式(NMM)、地址自动匹配模式(AAD)、自动方向控制模式(AUD)

NMM普通多节点操作模式

这个模式的核心是通过控制RX_DIS(UA_FCR[8])来控制是否允许接收器接收数据。

猜测,当下还是猜测,当发现地址位后,判断地址后,可以通过RX_DIS来选择是否接收后续数据。

控制流程如下:(以后对寄存器也要多多记忆^ ^)

  1. 设置FUN_SEL(UA_FUN_SEL[2:0])为RS485模式;
  2. 设计RX_DIS(UA_FCR[8])在接收地址位前是否接收数据;
  3. 通过(UA_ALT_CSR[8])设置RS485_NMM模式。
  4. 当地址位被发现,硬件为设置RLS_IS(UA_ISR[2])和RS485_ADD_DETF(US_FSR[3])标志位;
  5. 判断完地址后,软件决定是否再接收数据信息;
  6. 重复4与5步。

AAD地址自动匹配模式

这个模式就是纯自动化的了,当发现第9位是1以后,拿8位数据和ADDR_MATCH(UA_ALT_CSR[31:24])做匹配,匹配对了,就把数据存进RX-FIFO里。

AUD自动方向模式

这个模式其实和上两者不是并列的,就是引入的RTS线,控制LEV_RTS(UA_MCR[9]),来让控制器进入第三态状态。拉低就是无效,拉高就是允许操作。

LIN模式

这边呢,本来想先写红外模式的,结果发现坑没墙上,就先写LIN模式。LIN模式呢之前接触的少,查资料发现说是简化版的CAN模式(数据传输以帧的形式),说明资料很少,只能从手册中看看了。好在手册讲的挺清楚,NUC970在主机模式下支持空白与分隔的发射与侦听,在从机模式下支持头信息侦听和自动同步功能。

LIN的数据结构,一个完整的帧由主机发送的头和从机的反馈组成。头部又分空白信息,同步信息,帧ID。反馈信息包括数据与字节校验码。核心是帧ID,主机通过不同的帧ID说明帧的目标,而从机通过帧ID判断是否进行回复。

灵魂画手出动:

主机模式下,数据位都是以一个0位开始,跟8个字节,没有奇偶校验,再跟1个停止位(值为1)。总共11位。操作流程如下:

  1. 设置通讯速率 
  2. 将端口设置为LIN模式
  3. 设置WLS(UA_LCR[1:0]=11),PBE(UA_LCR[3]=0),NSB(UA_LCR[2]=0),11位数据位,无奇偶校验,1个停止位。

 然后NUC970支持帧头的三种不同发送方法,手动、半自动、全自动。通过配置LIN_HEAD_SEL(UA_LIN_CTL[23:22])选择,如果不是全自动,就要把0x55与帧ID写入UA_THR中,全自动就把帧ID写入LIN_IDPEN(UA_LIN_CTL[31:25])

然后LIN的break位可以进行设置。

NUC970可以侦听空白与分隔位,当接收了超过11个低位的信号,则置位LIN_BRDET_F。当只有主机不再发送数据的时候,侦听到空白则会对RDA_IF/FEF进行置位。

主机模式下,只能最多从机8个字节数据。

从机模式(留坑)

红外模式

红外模式的核心是将时序信号转换成脉冲信号,再通过红外发射装置进行发射与接收,此处看后续是否要填坑。


http://chatgpt.dhexx.cn/article/TGUs3BUn.shtml

相关文章

UART接口详解

文章目录 简介硬件接线RS232RS485RS232和RS485比较 通信原理uart和usart的区别实例针对STM32的串口数据位特点,改成对应PC的串口数据校验当使用9600波特率的时候,通讯稳定,当使用115200波特率的时候,通讯变得不稳定。 简介 UART全…

UART接口介绍

0 Preface/Foreword UART是Universal Asynchronous Receiver and Transmitter简称,中文为 通用异步接收和发送器,是常用的串行通讯接口。 RS-232:RS-232标准接口(aka. EIA RS-232)是常用的串行通信接口标准之一&#…

一文理解UART通信

还记得当年的打印机,鼠标和调制解调器吗?他们都有巨大笨重的连接器和粗电缆,并且必须拧到你的电脑上。这些设备正是使用UART协议与计算机进行通信。虽然USB几乎完全取代了旧的电缆和连接器,但UART绝对没有过时。您会发现目前许多项目中使用U…

Ajax传json对象(jQuery)

Ajax传json对象 相信很多小伙伴想要通过Ajax传输json数据给后端,本来直接发送一个data: JSON.stringify(obj)就可以了,但是发现后端的请求参数中有一个参数需要int类型,这个时候就需要用到对象了。 封装对象 首先得到数据并封装对象 &…

十分钟搞懂JSON(JSON对象---JSON字符串---对象 之间的区别)

好记性不如烂笔头&#xff0c;相信我&#xff0c;看了之后你会彻底搞懂JSON 前言&#xff1a;前天被JSON对象&#xff0c;JSON字符串&#xff0c;JAVA对象搞混了&#xff0c;不知道各自代表的意思&#xff0c;我就查了资料&#xff0c;总结为一篇博文。 另外我想List<User&g…

【python】将json字符串转化为json对象

首先导入python自带的json模块 import json loads方法将json<key,value>字符串转化为dict形式 info {"name":"Lucy","age":22,"addr": "China"} print(type(info)) info_dict json.loads(info) print(info_dict)…

将js对象转化为json对象

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script type"text/javascript">//编写 一个JavaScript对象&#xff0c;var user {name: "asdas",age…

Mysql JSON对象和JSON数组查询

文章目录 1. 函数说明2. JSON对象3. 字符串JSON数组3.1 AND关系3.2 OR关系 4. 对象数组5. 集成 Mybatis plus6. 模糊查询7. json_table7.1 分组计算总数7.2 对象去重 file_type可以是 varchar&#xff0c;也可以是 json类型 1. 函数说明 JSON_CONTAINS(json_doc, val[, path…

Json对象和Json字符串的区别

Json对象和Json字符串的区别 </h1><div class"clear"></div><div class"postBody"><div id"cnblogs_post_body" class"blogpost-body blogpost-body-html">1、Json概念 概念&#xff1a;JSON (JavaSc…

获取json对象的key

获取json对象的key值 我有一个json对象&#xff0c;我想获取每一个学生的信息&#xff0c;但是每次拿到的数据最外层的key值是随学生人数增加而变化的&#xff0c;并不是固定的。 所以我的思路为&#xff1a;先获取最外层的key&#xff0c;然后根据key获取value。 实现过程如下…

js操作json对象

工作中做了几款自动化测试工具都是跟日志读取相关&#xff0c;日志格式又大多数都是JSON&#xff0c;所以这里把常用的JS操作JSON的方法做了总结&#xff1a; 一、概念简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式&#xff0c;采用完全独立于语言的文本格…

嵌套 JSON 对象中的数组

JSON 对象中数组可以包含另外一个数组&#xff0c;或者另外一个 JSON 对象&#xff1a; var myObj {"name":"网站","num":3,"sites": [{ "name":"Google", "info":[ "Android", "Googl…

Js 给JSON对象排序

众所周知&#xff0c;json对象是没有顺序的。只有数组才有排序功能。 但我们遇到的业务场景里面&#xff0c;不仅仅需要对数组排序&#xff0c;也有需要对对象排序的情况。 例如下面这种数据&#xff1a; let data {zhangsan: {age: 18, height: 189}, lisi: {age: 18, hei…

嵌套 json对象

什么是嵌套json对象&#xff1f; ---- JSON 对象中可以包含另外一个 JSON 对象 你可以使用点号(.)或者中括号([])来访问嵌套的 JSON 对象。 <script>// 嵌套 json对象var myjson {"name":"老李","keywords":[狗,熊,李],"site"…

JSON对象

开发工具与关键技术&#xff1a;VS MVC 作者&#xff1a;冉冉 撰写时间&#xff1a;2019年05月21日Json是JavaScript对象方法它的全称为&#xff1a;JavaScript Object Notation。Json是存储和交换文本信息的语法&#xff1a; 1、 JSON是轻量级的文本数据交换格式&#xff1b; …

利用matlab使用窗函数,MATLAB中的窗函数

如何在MATLAB中使用窗函数 2008年05月23日星期五10:19 一、在MATLAB 中的窗函数,十分简单&#xff1a; (1)矩形窗(Rectangle Window)调用格式&#xff1a;wboxcar(n)&#xff0c;根据长度n 产生一个矩形窗w。 (2)三角窗(Triangular Window)调用格式&#xff1a;wtriang(n)&…

Blackman 窗函数

Blackman 窗函数 由于计算机无法对无限长的信号进行FFT运算&#xff0c;所以我们截取有限长序列进行分析&#xff0c;但这种做法会产生频谱能量泄露。采用窗函数来截取信号能够减少频谱能量泄露&#xff0c;不同的窗函数会对频谱泄露产生不同的抑制效果。其中&#xff0c;余弦窗…

fft 窗函数特性对比

fft 窗函数特性 窗名称主瓣宽度旁瓣相对衰减&#xff08;旁瓣抑制&#xff09;旁瓣能量占比最大值&#xff08;32个点时&#xff09;最小值&#xff08;32个点时&#xff09;hamming(symmetric)4.3125*谱线间隔-41.8dB0.04%0.99760.0800hamming(periodic)4.0625*谱线间隔-41.8d…

Oracle开窗函数

SQL开窗函数 开窗函数&#xff1a;在开窗函数出现之前存在着很多用 SQL 语句很难解决的问题&#xff0c;很多都要通过复杂的相关子查询或者存储过程来完成。为了解决这些问题&#xff0c;在 2003 年 ISO SQL 标准加入了开窗函数&#xff0c;开窗函数的使用使得这些经典的难题可…

matlab的汉明窗函数如何导出,时域窗函数

时域窗函数 数字信号处理领域&#xff0c;“窗”是用处广泛意义重大的一个数学模型。我觉得很有必要来探究一下它的本质&#xff0c;所以在这篇文章里先给出常见的几种时域窗函数的数学模型&#xff0c;我将在后面的文章里陆续讲出窗的用途。 本文将陆续介绍如下几个窗&#xf…