目录
一、基础知识
两设备间通信:

Tx(Transmit);Rx(Receive)
每个设备都有发送/接收引脚,并且交叉连接,
但是数据的收发需要遵从一定的格式:

起始位有1位,
数据位一般有8或9位,停止位有0.5、1、1.5、2位,
比方说我要发送"01100100"这串数据,
在信号里就表示为"低高高低低高低低"电平的变化,
到了停止位一般要有一串相应位的高电平状态来判定是否结束。
在市面上,
有四种数据帧格式,
因为传输有效数据是8位的原因,
打绿勾的更为常用:

有校验位的数据,
比如说奇校验,
必须要有奇数个1,
这段数据才能被判定为合法,
如果我的数据是"10101010"时,
有4个"1",
此时校验位会自动补一个"1",
从而这串数据里的"1"的个数为奇数个,
从而校验成功;
若"10101010"传输时出错,
变为"10111010"时,
校验位从一开始就变成了"1",
此时这段数据的"1"有偶数个,
那么这段数据就校验失败:

波特率越高,数据的传输速度越快,注意收发双方要选择相同的波特率:

STM32单片机里有UART和USART两种类型的串口:

异步指通常意义上的串口;
同步工作模式更少用,多了根时钟线,收发双方便可以同步起来。
二、单片机简单数据发送至电脑
(串口向电脑发送数据)
1.安装串口调试助手

通过USB转TTL模块就可以实现单片机与电脑的连接,并传输数据了:

2.STM32CubeMX操作
选择芯片------选择调试串口------选择左侧的"Connectivity"(连接性),
可以看到单片机有三个串口USART1、USART2、USART3:

Mode表示工作模式,我们需要为串口选择工作模式:

这里除了异步模式,其他模式我们都用不到,
选择异步模式后可以看到,
cubeMX自动为我们分配好了USART的引脚:

USART1_Tx位于PA9,USART1_Rx位于PA10。

此时还可以看到,在界面的中底部,出现了一些参数:



如果没有特殊要求一般选择收发双向。
此时,我们根据我们的选择来设置就好(即模式设置·):

依次点击System Cores------GPIO------USART,
可以发现,CubeMX已经为我们自动配好了引脚参数


这里我们按照默认设置,不做调整。
点击Project Manager,
输入名字、位置、工具链:

点击生成代码。
3.硬件操作
根据CubeMX的设置,将硬件如下连接:

注意,这里USB TO TTL模块中的TXD与单片机的RX(PA10)引脚相连,RXD与单片机的Tx(PA9)相连(交叉连接)
4.串口调试助手设置
串口收发双方的数据帧格式应该一致,并打开串口:

如何知道自己串口号是否正确呢?
拔下来再插上去,看哪个串口号突然出现。
5.keil操作

代码解释如下,

我们只用知道cubeMX给我们生成了一个句柄叫UART1。
现在,来学习一个新的编程接口:


那么该如何使用呢?



关闭代码优化:

依次点击:编译代码------调试代码
鼠标右键点击数据发送的代码行,选择"Run to Cursor line":

打开串口调试助手,点击HEX,以16进制的格式接受数据:

点击单步执行:

可以发现串口调试助手会收到一个数据:

再将串口调试助手转换为ASC2码格式,以字符格式接收数据:

再次点击单步执行:

会发现接收到了字符数据:

三、单片机的简单数据接收
CubeMX设置、串口调试助手设置、硬件连接设置如上节所示。
本次实验我们需要使用串口控制板载LED:

1.设置PC13引脚
PC13引脚设置为输出:
:
高初始电压、输出开漏模式、最大输出速度为低速:

2.生成代码

3.【原理】如何通过串口接收数据?


那么如何实现接收到数据并控制灯的亮灭呢?

4.实践证明:

编译------下载------按复位按钮
打开串口调试助手,选择ASC2码格式:

依次发送0和1,发现1亮0灭:
