UART以及串口重定向--什么是重定向?为什么要重定向?
UART以及串口重定向–什么是重定向?为什么要重定向?
异步 :发送方和接收方有各自的时钟
UART协议:每一帧数据都包含起始位,数据位,和停止位。当数据线从高电平跳变到低电平时,作为起始位,当数据线从低电平跳变到高电平时,作为停止位。空闲桢:数据线一直处于高电平;断开桢:数据线一直处于低电平
- 起始位:
- 数据位:5、6、7、8、9位
- 校验位(非必要):和校验,奇校验,偶校验。校验位其实是数据位的最后一位,当数据的前N-1位接收完毕时,接收方就会自动计算前N-1位然后预测第N位应该接收的是高电平还是低电平,如果实际接收到的数据和期待接收的数据不一致,则数据传输出错。
- 停止位:
- 波特率:每秒传送的bit数。接收方和发送方设置的波特率必须一致,否则接收的数据将会出错
注意:UART协议要求每次只能发送一个数据(5、6、7、8、9位),发送完后要求立刻发出结束信号,因为UART是异步通信协议,即使设置相同的波特率,时钟频率也可能会有误差。如果数据连续发送,并且在接收方和发送方时钟不一致的情况下(比如发送方每10us发送一个bit,接收方每9us接收一个bit(检测数据线的电平状态)),在大量数据流的传输时,误差就会一直堆积,导致传输出错!!!
UART控制器 :一般情况下,MCU都具有UART控制器,我们使用串口通信也是通过配置UART控制器相关的寄存器设置通信协议的细节。当然也可以通过软件模拟窗口通信协议。
接收数据的三种方式:
- 轮询RDR寄存器
- 设置接收中断
- DMA传输
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f6uRfTf6-1668958989281)(C:\Users\WQL\AppData\Roaming\Typora\typora-user-images\image-20221120221855354.png)]
UART编程步骤
- 使能时钟
- 配置UART引脚模式,RT----输入模式;TX--------输出模式
- 配置UART,包括数据位,停止位,波特率,校验等
- 是否开启中断
- 如果开启中断,还要配置中断优先级
- 使能中断
- 编写中断服务函数
输入输出重定向
ubuntu:操作系统下的重定向
无重定向时:以在终端输入ls为例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UKfS1SEl-1668958989283)(C:\Users\WQL\AppData\Roaming\Typora\typora-user-images\image-20221120230445926.png)]
当输入ls命令时,操作系统读取到"ls"这个字符串后,就会读取当前文件夹下的文件名,然后将这些信息传给显卡,然后显卡控制屏幕显示这些文件名。这是默认的输出显示方式。
重定向输出:ls > out.txt
输入该命令时,ubantu操作系统读取到”ls>out.txt“字符串后,也会读取该文件夹下的所有文件的文件名,然后将这些数据信息传给磁盘,磁盘将它保存到相应的文件中去
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0dA5nYaP-1668958989284)(C:\Users\WQL\AppData\Roaming\Typora\typora-user-images\image-20221120230919731.png)]
MCU无操作系统下的重定向
printf()函数是标准C库里面的一个输入输出函数,但是MCU无操作系统,如果需要使用printf()函数,或者类printf()函数,就需要将fputc()函数重定向。因为标准的输入输出函数,是在操作系统下通过显卡输出到屏幕上的。
查阅printf()函数源码,就会发现,printf()函数最终输出的信息是通过fputs()函数实现的,fputs()实现的是输出字符串。但是我们都知道C语言是没有字符串类型的,只有字符型。所以打开fputs()源码就会发现,fputs()函数实质是通过循环调用fputc()实现字符串的输出效果。如果能使fputc()函数输出的内容放到UART的DR(TDR)寄存器,即可实现MCU将通过printf()函数输出信息到串口。如果是发送到电脑的串口,通过相关的串口助手上位机 软件即可输出信息:如果是其它MCU或者其它MCU外设(串口屏),也可以接收到信息,按自己需求使用数据即可。
简单总结就是:printf()调用 fputs(),fputs()调用fputc(),fputc()函数将数据给UART的DR寄存器即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zx9Ek9Eq-1668958989284)(C:\Users\WQL\AppData\Roaming\Typora\typora-user-images\image-20221120231743234.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FMWUtlck-1668958989285)(C:\Users\WQL\AppData\Roaming\Typora\typora-user-images\image-20221120234019352.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DcXRv78U-1668958989286)(C:\Users\WQL\AppData\Roaming\Typora\typora-user-images\image-20221120234031046.png)]
图片转存中…(img-FMWUtlck-1668958989285)]
[外链图片转存中…(img-DcXRv78U-1668958989286)]
UART以及串口重定向--什么是重定向?为什么要重定向?相关推荐
- nohup: 忽略输入重定向错误到标准输出端_Linux 重定向与管道
重定向 重定向 > 重定向追加输入 >> 正确错误都会重定向 &> 标准输入 0 标准输出 1> 或 > (简写) 标准错误 2> FD 文件描述符, ...
- lte盲重定向_LTE重选、切换、重定向的区别
[资料名称]:LTE重选.切换.重定向的区别 [资料作者]:A [资料日期]:20150916 [资料语言]:中文 [资料格式]:DOC/DOCX [资料目录和简介]: 这里主要简单阐述了LTE系统的 ...
- MSP430程序库二UART异步串口
串行通信接口是处理器与其他设备进行数据通信最常用的方式之一.我的这个程序库是针对MSP430f14系列和MSP430f16系列的,我常用的单片机是这两款:msp430f149,msp430f169.这 ...
- 详解RS232/UART/协议/串口通信
RS232基本概念: 串口通信时串行通信里面的异步方式 UART是串口通信里面的一种协议,通俗的讲: 串口(基本上) = RS232 = UART = USART = U(S/A)RT 注: ①RS2 ...
- 树莓派4B ubuntu20.04 UART 多串口配置通信
相比树莓派0.1.2 以及 3 的双串口 UART0(PL011)和 UART1(mini UART),树莓派 4 中新增了 4 个 PL011 串口共计有 6 个 UART,整理此笔记用作记录和配置 ...
- LT7688 Uart TFT 串口屏控制芯片
LT7688 是一款高效能 Uart TFT 串口屏控制芯片.其内部结合了 乐升半导体 的 32bit MCU - LT32U02 及 TFT 图形加速器 - LT768 的核心架构,主要的功能 就是 ...
- 高端Uart TFT 串口屏控制芯片
LT7688 是一款高效能 Uart TFT 串口屏控制芯片.其内部结合了 乐升 半导体 的 32bit MCU - LT32U02 及 TFT 图形加速器 - LT768 的核心架构,主 要的功能就 ...
- linux设置BIOS串口,将x86平台的Linux控制台重定向到串口
一般地,安装在PC的Linux是使用鼠标.键盘作为输入源,显示器作为输出显示,但有些X86的设备,如工控机等,为了节省成本,会去掉认为无用的外设接口,以致熟悉了PC的人不习惯.一个设备,没有鼠标.键盘 ...
- 汇总|C++常见知识点总结,涉及文本输出、排序、生成随机数、异常处理、关联容器、printf重定向、sprintf用法、cout重定向
文章目录 一 将程序运行结果输出到txt文本文件中 二 排序算法 三 生成随机数 四 异常处理 六 关于GitHub上zip与tar.gz的区别 七 容器中查找最大值所在的位置 八 C++中关联容器的 ...
最新文章
- 华为怎么改输入法皮肤_搜狗输入法皮肤挑花眼?这次皮肤效果也能划着看了
- JSP第二次作业_8小题
- oracle exists 变量,Num58 Oracle总结
- matlab中的i=1 length,黄伟建:matlab for i=1:length(y) 什么意思
- 遥感图像处理-阴影检测
- 使用noode.js创建一个服务器
- 从Java程序员的角度理解加密的那些事
- 在项目中增加task定时任务
- [四校联考P3] 区间颜色众数 (主席树)
- (*长期更新)软考网络工程师学习笔记——Section 6 网络层上篇
- [CareerCup] 9.4 Subsets 子集合
- 2016蓝桥杯省赛---java---C---8(冰雹数)
- QVector、QList、QLinkedList类用法区别
- 极客学院文本爬虫实战
- Linux系统管理——账号管理与权限及归属管理实例
- 开启Google Chrome浏览器加速模式
- 我男友是个学霸,你们输给DOTA,我输给代码……
- Python XML文件快速排版
- 剑指offer T51数组中的逆序对
- 浅谈Docker的安全性支持(上篇)