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. ...
随机推荐
- perf 编译失败
linux-6.0-rc2 : linux-6.0-rc2/tools/include/asm/../../arch/x86/include/asm/rmwcc.h:7:9: error: impli ...
- Treetop Lights使用条款与免责协议
Treetop Lights (以下简称"我们")在此特别提醒您务必认真阅读.充分理解本<使用条款与免责协议>(以下简称"本协议")中各条款并选择是 ...
- 富文本 HTML String 转化为 nodes 数组
https://github.com/ant-mini-program/mini-html-parser?spm=ding_open_doc.document.0.0.4ef9722fXz27PV
- BIP 两个请求成功后,才能做某一件事
//保存前校验 let SetXStatus = 0; viewModel.on("beforeSave", function (args) { let _this = this; ...
- sql使用!=查询时会忽略null数据
table_a有3条数据 column1值分别为1,0,null 那么 select * from table_a where column1!='1' 只会查到clumn1为0的数据,null的数据 ...
- vue高级进阶( 三 ) 组件高级用法及最佳实践
vue高级进阶( 三 ) 组件高级用法及最佳实践 世界上有太多孤独的人害怕先踏出第一步. ---绿皮书 书接上回,上篇介绍了vue组件通信比较有代表性的几种方法,本篇主要讲述一下组件的高级用法和最 ...
- rxjs笔记(未完成)
首先是 Observable 和promise的区别, 1返回值个数,Observable 可以返回0到无数个值. 2.Promise主动推送,控制着"值"何时被 "推送 ...
- python 查找文件夹下以特定字符开头的某类型文件 - os.walk
Python os.walk() 方法 os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下.os.walk() 方法是一个简单易用的文件.目录遍历器,可以帮助我们高效的处 ...
- linux部署带ssl的nginx
1.前期准备 1.1:下载nginx-1.18.0版本 http://nginx.org/download/nginx-1.18.0.tar.gz 然后上传到服 务器 /usr/local ...
- 快速搭建maven私服仓库并配置
1.第一步,通过官方网站下载tar.gz包上传到服务器并解压 随后进入解压目录,并执行./bin/nexus start 此时可能会出现如下异常 处理这个问题很容易,找到bin下的nexus文件,vi ...