蓝桥杯【物联网】零基础到国奖之路:七. 串口

蓝桥杯【物联网】零基础到国奖之路:七. 串口

  • [第一节 串口通信理论](#第一节 串口通信理论)
  • [第二节 软件通信协议](#第二节 软件通信协议)
  • [第三节 DMA理论](#第三节 DMA理论)
  • [第四节 CubeMX的配置](#第四节 CubeMX的配置)
  • [第五节 代码模版](#第五节 代码模版)

第一节 串口通信理论

通用异步收发传输器(UART)是一种串行异步收发协议,应用十分广泛。UART将数据二进制一位一位的进行传输。在UART通讯协议中信号线上的状态位高电平代表"1"低电平代表"0"。

硬件连接:

TX:发送数据,连接RX

RX:接收数据,连接TX

GND:共地

仅需要三根线,注意连接时两个设备UART电平,如范围不一致,电平转换后再连接。

第二节 软件通信协议

UART作为异步串口通信协议的一种,原理是将数据字节一位接一位地传输。

如下:

Start Data Parity Stop

size 1 5-9 0-1 1-2

A.空闲位:

UART协议规定,总线空闲状态时信号线状态为"1"即高电平。

B.起始位:

开始进行数据传输时发送一个低电平"0"来表示传输字符的开始。因为空闲位一直是高电平所以发送一个区别于空闲状态的信号即为低电平。

C.数据位:

起始位后就是要传输的数据,可以是5,6,7,8,9位,构成一个字符,一般都是8位。先发送最低位最后发送最高位。

D.奇偶校验位:

数据传送完后,进行奇偶校验,校验位其实是调整个数,串口校验分几种:

D.1.无校验

D.2.奇校验

D.3.偶校验

E.停止位:

数据结束标签,可以是1位,1.5位,2位的高电平。

F.波特率:

数据传输速率使用波特率来表示,单位bps,常见波特率9600bps,115200bps等等,如果串口波特率设置为9600bps,那么传输一个比特的时间是

1/9600=104.2us。

以9600 8N1(9600波特率,8个数据位,没有校验位,1位停止位)为例,这是目前最常用的串口配置,传输"O","K"两个ASCII值,"0"为79二进制为01001111,"K"为对应的二进制为01001011,传输格式为:

01111001010110100101

传输先低位后高位。

串口波特率为9600,1bit传输时间大约为104us,传送一个数据实际是10个比特(开始位,8个数据位,停止位),一个bytes传输速率实际为9600*8/10=7680bps。

第三节 DMA理论

DMA即直接存储器访问。DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器的高速数据传输。

转移数据是可以不用CPU参与的。

希望外设A数据拷贝到B,只要提供一条数据通路,直接让数据由A到B不经过CPU处理,DMA就是基于以上设想设计的,作用就是解决大量数据转移过度消耗CPU资源的问题。

第四节 CubeMX的配置

注意要打开USART2的NVIC。

第五节 代码模版

DMA模式发送,注意用strlen得到数据长度,添加头文件#include <stdio.h>;

头文件内声明

main函数编写

相关推荐
up向上up4 分钟前
【普中】基于普中51开发板单片机的8_8点阵滚动显示设计
单片机·51单片机·proteus
Bona Sun1 小时前
单片机手搓掌上游戏机(十二)—esp8266运行gameboy模拟器之编译上传
c语言·c++·单片机·游戏机
Molesidy1 小时前
【VSCode】使用 VSCode + EIDE插件 的开发STM32的超详细教程
ide·vscode·stm32·编辑器·eide
会编程的李较瘦2 小时前
【Spark学习】数据清洗
学习·ajax·spark
RisunJan2 小时前
【行测】实词辨析
学习
m0_626535203 小时前
双线性插值学习
学习
TangDuoduo00053 小时前
【电感基础与特性】
stm32·单片机·嵌入式硬件
YJlio3 小时前
进程和诊断工具学习笔记(8.24):Handle——谁占着不放?句柄泄漏排查、强制解锁与检索技巧
服务器·笔记·学习
许商3 小时前
【stm32】【SD】SDIO fatfs
stm32·单片机·嵌入式硬件
charlie1145141913 小时前
面向C++程序员的JavaScript 语法实战学习4
开发语言·前端·javascript·学习·函数