STM32单片机(九)USART串口----第一节:USART串口协议

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。
☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋。
🌙专栏目标:实现从零基础入门51单片机和STM32单片机,力求在玩好单片机的同时,能够了解一些计算机的基本概念,了解电路及其元器件的基本理论等。

⭐️ 专栏主要内容: 主要学习STM32单片机的功能、各个模块、单片机的外设、驱动等,最终玩好单片机和单片机的外设,全程手敲代码,实现我们所要实现的功能。
🌴 专栏说明 :如果文章知识点有错误的地方,欢迎大家随时在文章下面评论,我会第一时间改正。让我们一起学习,一起进步。
💑专栏主页:http://t.csdn.cn/HCD8v

本学习过程参考:https://space.bilibili.com/383400717

STM3单片机安装软件、各种资料以及源码的路径:
链接:https://pan.baidu.com/s/1snD0uuTfMhchFqOMWvAiHA?pwd=asdf#list/path=%2F
提取码:asdf

链接里压缩包的解压密码:32

本大节主要学习USART的相关知识,包含九小节:
第一小节主要学习USART串口协议的理论基础知识
第二小节主要学习USART串口外设的理论基础知识
第三小节是对第一、二小节的内容写一个串口发送程序进行练习
第四小节是对第一、二小节的内容再写一个串口发送+接收的程序进行练习
第五小节主要学习USART串口数据包的理论基础知识
第六小节是对第五小节的内容写一个串口收发HEX数据包程序进行练习
第七小节是对第五小节的内容再写一个串口收发文本数据包程序进行练习
第八小节主要了解FlyMcu串口下载的知识
第九小节主要了解STLINK Utility串口下载的知识
最终附上所有的源代码;

本小节主要学习USART串口协议的理论基础知识。

一、STM32通信接口介绍

在这里插入图片描述

  • 以上通信接口,STM32C8T6均支持;
  • USART包含TX和RX两个引脚,也叫TXD和RXD;TX(Transmit Exchange)是数据发送脚,RX(Receive Exchange)是数据接收脚;数据按照协议在这些引脚上进行输入和输出,从而实现通信;
  • USART是全双工的模式;全双工是指通信双方能够同时进行双向通信,一般来说,全双工的通信都有两根通信线;比如串口,一根TX发送,一根RX接收;
  • USART是异步通信,所以需要通信双方约定一个采样频率,并且还需要加一些帧头帧尾等进行采样位置的对齐;
  • USART的电平是单端电平,也就是说它们引脚的高低电平都是对GND的电压差;所以单端通信的双方必须共地,也就是把GND接在一起;

二、串口通信

在这里插入图片描述

  • 上图的底部三幅图,左边是USB转串口模块, 上面的芯片是CH340;这个芯片可以把串口协议转换为USB协议,它一边是USB口,可以插在电脑上,另一边是串口的引脚,可以和支持串口的芯片连接在一起;这样就能实现串口和电脑的通信了;中间的图是陀螺仪传感器模块;右边是蓝牙串口模块;

三、硬件电路

在这里插入图片描述

  • 上图就是串口的接线图
  • 一般串口通信模块都有四个引脚,VCC、TX、RX、GND;VCC和GND是供电,TX和RX是通信的引脚;串口通信的TX、RX、GND是必须要接的;上面的VCC,如果两个设备都有独立供电,那么VCC可以不接;

四、电平标准

在这里插入图片描述

  • 单片机中最常用的就是TTl电平;

五、串口参数及时序

在这里插入图片描述

  • 上图底部的两张时序图,就是串口发送一个字节的格式,这个格式是串口协议规定的
  • 串口中,每一个字节都装载在一个数据帧里面,每个数据帧都有起始位、数据位和停止位组成,左图中数据位有8个,代表一个字节的8位;右图的数据位有9个,除了一个字节的8位外,最后一位是奇偶校验位;
  • 串口的参数包括波特率、起始位、数据位、校验位、停止位等
  • 波特率的用途是规定串口通信的速率;
  • 串口的空闲状态是高电平,也就是没有数据传输的时候,引脚必须要置高电平,作为空闲状态;然后需要传输的时候,必须要先发送一个起始位,这个起始位必须是低电平,来打破空闲状态的高电平,产生一个下降沿,这个下降沿就告诉接收设备,这一帧数据要开始了;
  • 同理,当数据发送结束时必须有一个停止位,用于数据帧间隔,固定为高电平;同时这个停止位也是为下一个起始位做准备;
  • 所以起始位固定为0,产生下降沿,表示传输开始;停止位固定为1,把引脚恢复成高电平;
  • 数据位是低位先行,也就是先发送低位,再发送高位;比如要想发送0x0F,也就是00001111,波形如下图所示:
    在这里插入图片描述

六、串口时序

在这里插入图片描述

  • 上面列出了几个串口通信的实际波形;看完这几个波形我们就能大致理解串口是如何传输数据的了;
  • 首先左边第一个波形是发送一个字节数据0x55时,再TX引脚输出的波形;因为串口传输是从低位到高位传输的,所以第一个波形从低到高依次是1->0->1->0->1->0->1->0,所以从高到底排列的二进制数据就是01010101,也就是0x55
  • 第一个波形波特率是9600,所以每一位的时间就是1/9600,大概是104us,可以看到,上图第一个波形每一位就是100us多一点,就是104us;没发送数据的时候,空闲状态是高电平,数据帧开始,先发送起始位,产生下降沿,代表数据帧开始;数据0x55转为二进制,低位先行,就是依次发送10101010;然后这个参数是8位数据,1位停止,无校验;所以8个数据位结束后,紧跟着后面就是停止位,把引脚置回高电平,这样一个数据帧就完成了;
  • 同样的道理,左边第二个波形是发送0xAA;
  • 左边第三个波形是发送0xFF
  • 左边第四个波形是发送0x00
  • 右边的波形波特率改为了4800,也就是波特率变为一半,那相应的,波形的时长就会变为原来的两倍;
  • 右边的第二个波形加了奇偶校验位

七、串口通信总结

总结一下就是:
TX引脚输出定时反转的高低电平;RX引脚定时读取引脚的高低电平;每个字节的数据加上起始位、停止位、可选的校验位,打包成数据帧,依次输出在TX引脚,另一端RX引脚依次接收这样就完成了字节数据的传递;这就是串口通信

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘凉~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值