uart 理解
1:
串口字符串传输和单字节传输的差异体现在字节与字节间是或在停止位后有空闲位的插入(下图红箭头处,没有插入),即 uart_send("123") 和 uart_send('1') uart_send('2') uart_send('3') 在接收机上会有不同的效果。
这样在有RXFIFO的芯片上,如果RXFIFO设置为1时,而串口助手发送"123"时,接收端芯片每次都只能收到第一个字符0x31;而串口助手分三次发送字符 1 2 3时,接收端则可以每次收到不同的值;但对于没有RXFIFO的芯片,二者无区别。
哪为什么不把RXFIFO的值设置成3呢? 如果发送方不把数据截取成RXFIFO长度的小段逐一发送,而是采用 uart_send("123456") 这样一次性发送时(串口助手发送字符串时就是这样一起性发送的,字节中间没有添加空闲位),接收端每次都只能收到前3个字符。

上述的理解是错误的,硬件fifo其实只是个缓存区,当数据攒到fifo设定的阈值时会触发操作一次性处理;无fifo的芯片可以理解为fifo阈值为1的芯片;
串口在接收字节流的时候大多是没有停止位的,即数据一个接一个的在传输,即使是stm32的串口也是这种模式;区别在于中断模式的编程,串口的中断函数处理时间要求决不超过下一字节8bit从移位寄存器收齐并传给数据寄存器的时间(可以降低bps给中断函数更长的执行时间),中断的处理只需要将数据放到接收buf并设置接收指示或发送信号量即可完成退出,不建议在中断中做数据的解析;接收buf最好采用软件fifo的方式给前台处理程序预留处理时间。整体的模式就是前后台的方式,前台while会一直处理接收buf中的数据,不用在意其处理速度,如果处理不过来可以增大软件fifo的大小,总之前台while只要没有被中断或被其他任务抢占就会不停的处理接收buf中的数据,如果处理的中途触发了接收中断,则在中断中只需要将数据放入接收buf并设置接收指示或发送信号量即可完成退出,之后前台while会接着前面被打断的地方继续处理;有了硬件fifo后会降低中断的触发频率,延长前台while的处理时间。
uart 理解的更多相关文章
- [tty与uart]理解线路规程的作用
转自:http://biancheng.dnbcw.info/linux/336240.html Linux OS的设备驱动有相当经典的抽象思想以及分层思想.与通信世界里面的思想相一致. 一.在Lin ...
- [uart]理解线路规程的作用
转自:http://biancheng.dnbcw.info/linux/336240.html Linux OS的设备驱动有相当经典的抽象思想以及分层思想.与通信世界里面的思想相一致. 一.在Lin ...
- UART,SPI,IIC的一点理解
转自:http://bbs.21ic.com/icview-253715-1-1.html UART通用异步收发器,UART是通用的异步传输模式,在它这种基础上加上其他接口或者解码器就衍生出多种异步传 ...
- UART Explained(转载)
做嵌入式开发,UART几乎是必不可少的,调试串口.GPS.GPRS.Bluetooth等模块很多都是用的UART接口.时下火热的IoT也不乏UART的身影,串口的BLE.WIFI.Zigbee.Lor ...
- uart串口的调试学习
用FPGA设计了数据接收和发送模块,FIFO模块,此处FIFO调用的是Show-ahead模式,在下一篇博客中将会分析这个问题. 用串口调试工具发送数据,数据接收模块将接收到的串行数据转换为并行数据( ...
- 单片机与嵌入式 以及ARM DSP FPGA 几个概念的理解
嵌入式设备一般要满足实时性的要求,而实时性是要求数据输入和输出的延时满足一定的要求.当然嵌入式一般都便携性都比PC要好,功能没有PC多,PC是通用,他是专用,一般只专注某些功能的实现,比如DSP专注数 ...
- nrf51822裸机教程-UART
art硬件模块通常都有内置的硬件接收buff,比如51822的硬件uart模块图如下 因为通常接收到uart数据时都会做一些处理.比如保存到数据,或者对数据做一些判断之类的. 如果uart的波特率设置 ...
- [tty与uart]3.tty驱动分析
转自:http://www.wowotech.net/linux_kenrel/183.html 目录: 1 首先分析设备驱动的注册 1.1 uart_register_driver分析 1.2 tt ...
- 深入理解7816(1)---- 关于F/D和etu
对于刚接触智能卡的工程师来说,在阅读7816-3规范的时候,常常被其中的一些术语迷惑,读起来会觉得有些别扭.尤其是在看到复位应答中的F和D设置,以及对应的etu的时候,会觉得有些复杂和难以理解. 其实 ...
- 蓝牙协议 基于TI cc2540 模块的理解(转)
源:蓝牙协议 基于TI cc2540 模块的理解 Bluetooth 4.0开发 Platform:TI IC:cc2540 Environment:windows 7 tools:IAR 8.20. ...
随机推荐
- [js函数] storageManager
import _get from 'lodash.get'; import _set from 'lodash.set'; import _debounce from 'lodash.debounce ...
- 第13周 预习、实验与作业:Java网络编程
编写一个网络程序,为了与其他网络程序通信,至少要知道对方的什么信息? IP地址 TCP与UDP协议有什么不同的呢?什么时候该选择哪种协议?HTTP使用的是TCP还是UDP?不重要的短信息传送之类的功能 ...
- Kubernetes学习笔记(一)
参考: kubectl Cheat Sheet | Kubernetes Kubernetes kubectl 命令表 _ Kubernetes(K8S)中文文档_Kubernetes中文社区 Pla ...
- P8872 [传智杯 #5 初赛] D-莲子的物理热力学
题目链接:P8872 [传智杯 #5 初赛] D-莲子的物理热力学 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 参考了题解,自己在这再写一遍 假设数组有序且经过m次操作后的数组最 ...
- sos 扩展命令文档
https://learn.microsoft.com/zh-cn/dotnet/framework/tools/sos-dll-sos-debugging-extension?redirectedf ...
- 安装.msi格式安装包
msi格式的文件,点右键后,没有"以管理员身份运行"的菜单项,直接运行.msi文件报错:"There is a problem with this Windows Ins ...
- Linux下如何排查CPU及内存占用过多
CPU 使用top命令,然后按shift+p按照CPU排序,找到占用CPU过高的进程pid. 使用top -H -p pid命令,找到进程中消耗资源最高的线程ppid. 使用echo 'obase=1 ...
- 面试题-react
对react的理解 是什么 React 是一个用于构建用户界面的 JavaScript 库. 能干什么 可以通过组件化的方式构建大型的,快速响应的大型web应用 如何做 声明式 React 使用jsx ...
- Javascript 基础知识,ajax,面向对象
Javascript 数据类型 数据类型 基本数据类型 数字,字符串,布尔值 undefine null undefined的常见情形:ES6新语法提供的对象解构赋值应用讲解 1.1 对象属性不存在 ...
- java中对list集合进行分组
java中对list集合进行分组 Map<String, List<HealthImport>> excelIdCardNull = importList.stream() . ...