100ask七天物联网训练营学习笔记 - 串口
周末学习STM32串口知识,对单片机与其他设备通信有关的内容有了一定了解,为下一步使用ESP8266打基础,下面就梳理一下今天的学习内容。
1. 通信分类
通信可以通过不同的角度来分类和理解。
1.1 按数据总线分类
按通信总线的形式可以分为串行和并行,与计算机上的总线类似,串行总线的优势在于使用的物理链路较少,劣势则是通信效率会相对较低。并行总线优势是通信效率高,但是物理连接复杂,但随着通信速率越来越高,并行总线线路之间的干扰会变大,相反串行总线收到的干扰就相对较少。
1.2 按数据方向分类
如果按数据方向分类的话,可以分为全双工、半双工、单工。
全双工:双方可同时收发信息,例如电话。
半双工:双方都可以收发信息,但是在同一时刻只能一方发送,另一方接收,例如对讲机。
单工:只能由发送方发出数据,接收方接收数据,例如电台和收音机。
1.3 按同步方式分类
按同步方式分类可以分为同步、异步通信。
同步通信:通信时通常有一根专门的时钟总线来同步双方的收发动作,收发双方只需要按照时钟信号来进行收发。
异步通信:没有专门的时钟总线,双方按照提前约定好的通信速率、规则,进行收发,如果有一个方没有按照约定操作,则通信就无法正常完成。例如在串口通信中,如果收发双方的波特率不同,则接收方收到的就是乱码。
1.4 通信速率
比特率:在单位时间内传输的比特位个数,单位是bit/s,缩写bps(bit per second)。
波特率:在单位时间内传输的码元个数,单位是Bd。
码元:承载信息量的基本信号单位,以一条电线上传输的信号为例,码元就是电线上的电平值。电线上有几种电平值,则码元就有几种状态。因此码元的值是大于等于1bit的。也就是说,码元如果只有两种状态,则波特率等于比特率。
1.5 常用通信协议
2. 串口介绍
串口是单片机上最常用的通信外设,常用的通过串口可以进行调试、程序下载以及连接蓝牙、WiFi、GPS、GSM等模块。串口是通信协议,而TTL、RS232、RS422、RS485等则是为了适应不同的使用场景而针对串口通信协议实现的电平标准。
2.1 串口参数
TTL:全双工,单片机引脚的串口电平为TTL电平,传输距离有限。
RS232:全双工,通常为单片机与电脑通信时使用,抗干扰能力较弱,传输距离最多十几米。
RS485:半双工,传输距离几十米至上千米,采用差分信号,因此抗干扰能力较强,传输速率也较高。
RS422:可以理解为RS485的全双工版本。
2.2 STM32的串口
在STM32中串口分为USART和UART,主要区别为USART支持同步通信,UART支持异步通信。嵌入式应用中异步串口通常就能满足绝大部分使用需求。STM32F103中的串口功能:
3. CubeMX创建工程
在CubeMX中使能USART1为异步通信,选择波特率115200,8位数据位,无奇偶校验,1位停止位,并且使能USART1中断。
4. 程序代码
// usart.c
#define USART1_BUFF_LEN 200
static uint8_t rx_data = 0; // 接收缓存
static uint8_t rx_len = 0; // 接收字节计数
static uint8_t usart1_buff[USART1_BUFF_