UART以及串口重定向–什么是重定向?为什么要重定向?

异步 :发送方和接收方有各自的时钟

UART协议:每一帧数据都包含起始位,数据位,和停止位。当数据线从高电平跳变到低电平时,作为起始位,当数据线从低电平跳变到高电平时,作为停止位。空闲桢:数据线一直处于高电平;断开桢:数据线一直处于低电平

  1. 起始位:
  2. 数据位:5、6、7、8、9位
  3. 校验位(非必要):和校验,奇校验,偶校验。校验位其实是数据位的最后一位,当数据的前N-1位接收完毕时,接收方就会自动计算前N-1位然后预测第N位应该接收的是高电平还是低电平,如果实际接收到的数据和期待接收的数据不一致,则数据传输出错。
  4. 停止位:
  5. 波特率:每秒传送的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编程步骤

  1. 使能时钟
  2. 配置UART引脚模式,RT----输入模式;TX--------输出模式
  3. 配置UART,包括数据位,停止位,波特率,校验等
  4. 是否开启中断
  5. 如果开启中断,还要配置中断优先级
  6. 使能中断
  7. 编写中断服务函数

输入输出重定向

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以及串口重定向--什么是重定向?为什么要重定向?相关推荐

  1. nohup: 忽略输入重定向错误到标准输出端_Linux 重定向与管道

    重定向 重定向 > 重定向追加输入 >> 正确错误都会重定向 &> 标准输入 0 标准输出 1> 或 > (简写) 标准错误 2> FD 文件描述符, ...

  2. lte盲重定向_LTE重选、切换、重定向的区别

    [资料名称]:LTE重选.切换.重定向的区别 [资料作者]:A [资料日期]:20150916 [资料语言]:中文 [资料格式]:DOC/DOCX [资料目录和简介]: 这里主要简单阐述了LTE系统的 ...

  3. MSP430程序库二UART异步串口

    串行通信接口是处理器与其他设备进行数据通信最常用的方式之一.我的这个程序库是针对MSP430f14系列和MSP430f16系列的,我常用的单片机是这两款:msp430f149,msp430f169.这 ...

  4. 详解RS232/UART/协议/串口通信

    RS232基本概念: 串口通信时串行通信里面的异步方式 UART是串口通信里面的一种协议,通俗的讲: 串口(基本上) = RS232 = UART = USART = U(S/A)RT 注: ①RS2 ...

  5. 树莓派4B ubuntu20.04 UART 多串口配置通信

    相比树莓派0.1.2 以及 3 的双串口 UART0(PL011)和 UART1(mini UART),树莓派 4 中新增了 4 个 PL011 串口共计有 6 个 UART,整理此笔记用作记录和配置 ...

  6. LT7688 Uart TFT 串口屏控制芯片

    LT7688 是一款高效能 Uart TFT 串口屏控制芯片.其内部结合了 乐升半导体 的 32bit MCU - LT32U02 及 TFT 图形加速器 - LT768 的核心架构,主要的功能 就是 ...

  7. 高端Uart TFT 串口屏控制芯片

    LT7688 是一款高效能 Uart TFT 串口屏控制芯片.其内部结合了 乐升 半导体 的 32bit MCU - LT32U02 及 TFT 图形加速器 - LT768 的核心架构,主 要的功能就 ...

  8. linux设置BIOS串口,将x86平台的Linux控制台重定向到串口

    一般地,安装在PC的Linux是使用鼠标.键盘作为输入源,显示器作为输出显示,但有些X86的设备,如工控机等,为了节省成本,会去掉认为无用的外设接口,以致熟悉了PC的人不习惯.一个设备,没有鼠标.键盘 ...

  9. 汇总|C++常见知识点总结,涉及文本输出、排序、生成随机数、异常处理、关联容器、printf重定向、sprintf用法、cout重定向

    文章目录 一 将程序运行结果输出到txt文本文件中 二 排序算法 三 生成随机数 四 异常处理 六 关于GitHub上zip与tar.gz的区别 七 容器中查找最大值所在的位置 八 C++中关联容器的 ...

最新文章

  1. 华为怎么改输入法皮肤_搜狗输入法皮肤挑花眼?这次皮肤效果也能划着看了
  2. JSP第二次作业_8小题
  3. oracle exists 变量,Num58 Oracle总结
  4. matlab中的i=1 length,黄伟建:matlab for i=1:length(y) 什么意思
  5. 遥感图像处理-阴影检测
  6. 使用noode.js创建一个服务器
  7. 从Java程序员的角度理解加密的那些事
  8. 在项目中增加task定时任务
  9. [四校联考P3] 区间颜色众数 (主席树)
  10. (*长期更新)软考网络工程师学习笔记——Section 6 网络层上篇
  11. [CareerCup] 9.4 Subsets 子集合
  12. 2016蓝桥杯省赛---java---C---8(冰雹数)
  13. QVector、QList、QLinkedList类用法区别
  14. 极客学院文本爬虫实战
  15. Linux系统管理——账号管理与权限及归属管理实例
  16. 开启Google Chrome浏览器加速模式
  17. 我男友是个学霸,你们输给DOTA,我输给代码……
  18. Python XML文件快速排版
  19. 剑指offer T51数组中的逆序对
  20. 浅谈Docker的安全性支持(上篇)

热门文章

  1. MO and MMO
  2. WPF教程(二十)密码框
  3. LCA 的若干种求法
  4. 谁与争锋 软件防火墙与硬件防火墙之争
  5. 大数据统计之卡方检验
  6. UEFI开发探索74- YIE002USB开发板(03 Windows编程)
  7. DSP篇--C6678 SPI BOOT详解及其优化实现
  8. 电影先生-一款苹果cms10模板
  9. maven pom不继承parent部份依赖
  10. Linux常用命令详解教程大全,Linux教程手册详解常用命令