搭建机器人电控系统——通信协议——串口通信USART/UART、RS232、RS485及其实例

通信协议

串口通信详解
IIC通信详解
SPI通信详解
CAN通信详解

文章目录

  • 通信协议
  • 什么是串口?
  • 串口分类
    • USART/UART、RS232、RS485的区别
  • 串口协议原理
    • 传输协议
    • 需要定义的参数
    • 发送函数USART_SendData
    • 接收中断USART3_IRQHandler中的USART_GetITStatus位
    • 串口通信硬件管脚
  • 串口通信实例——蓝牙和RS232通信的定位模块
    • 蓝牙模块
    • RS232陀螺仪定位模块


计算机与外界的信息交互称为通信

基本的通信方式分为两种:
串行通信:所传送的数据各位按顺序一位一位地发送或接受,占用资源少,速度相对较慢。
并行通信:所传送的数据的各个位是同时发送或接受。速度快,占用引脚资源多。

通信的速率
比特率(bit rate):每秒能传输的二进制位数。
波特率(Baud rate):每秒能传输的码元数(不一定是二进制)。
对于数字信号而言,波特率=比特率。

串行通信的种类
同步通信:带时钟同步信号传输,通讯双方是受同一个时钟源控制,如I2C、SPI、USART。
异步通信:不带时钟信号同步,不是同一个时钟源,按照一定规则传输,如USART、UART、单总线、CAN。

串行通信的方式
单工:只允许单方向传输,只需一条信号线
半双工:允许非同时进行的双方向传输,只需一条信号线。
全双工:允许同时进行双方向传输,需要两条信号线。

通信协议是主控MCU与各类驱动器、传感器之间实现信息交互的基本逻辑,搞懂通信协议在机器人的电控系统中占有很重要的地位。在接下来的内容中,我将分别讲解串口IICSPICAN通信协议的区别原理以及结合实际一些模块的代码部分。


什么是串口?

串口,全称串行接口(Series Interface),是指以串口协议为基础,数据一位一位地按顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信。

串口分类

根据串口具体实物表现的不同,我们将串口分为UART/USART、RS232、RS485等。其中UART只能异步通信,而USART既能够异步也能同步通信。

USART/UART、RS232、RS485的区别

不同串口分类遵循相同的协议——串口协议
它们的本质区别是遵循的通信方式电平格式不一样

UART/USART:全双工传输;TTL电平格式,常见以3.3V/5V高电平为1,以0V低电平为0。
搭建机器人电控系统——通信协议——串口通信USART/UART、RS232、RS485及其实例_第1张图片

RS232:全双工传输;负逻辑电平格式,-5V~-15V为1,5V到+15V为0。
搭建机器人电控系统——通信协议——串口通信USART/UART、RS232、RS485及其实例_第2张图片

RS485:半双工传输;差分传输电平格式,压差在-2V~-6V之间为1,在2V到6V之间为0。
(RS485通常适用于远距离传输)
搭建机器人电控系统——通信协议——串口通信USART/UART、RS232、RS485及其实例_第3张图片

串口协议原理

以上,不管是串口的何种分类,不管电平格式或者通信方式有多大的不同,它们都遵循统一的一种协议,即串口协议,这也是为什么不管是RS232、RS485或者UART/USART,它们在程序上的写法都是一样的

传输协议

空闲状态:TX、RX信号线为“1”高电平。(电压表测USART线为3.3V/5V,测RS232线为-5—-15V)

传输状态

  • 起始位(发送线置“0”表示开始传输);
  • 数据位(一般为8位,最高为9位,先发低位再发高位);
  • 奇偶校验位(0位/1位);
  • 停止位(发送线置“1”表示结束传输,1位/2位)。
    在这里插入图片描述

*数据帧格式:把用于完成数据传输的格式称为数据帧。

需要定义的参数

  • 数据位长度
  • 奇偶校验位长度
  • 停止位长度
  • 传输模式:只用于收/发,收/发均使用
  • 传输速率设置:波特率
    搭建机器人电控系统——通信协议——串口通信USART/UART、RS232、RS485及其实例_第4张图片

在这一章的开头,我讲解过,要想学会MCU控制传感器、电机等,先要掌握MCU的三大基石——时钟、GPIO和中断。现在可以看到MCU三大基石在我们想要利用MCU控制一个模块时的作用。

发送函数USART_SendData

搭建机器人电控系统——通信协议——串口通信USART/UART、RS232、RS485及其实例_第5张图片

发送函数中核心在于

USARTx->DR = (Data & (uint16_t)0x01FF)

其中将你要发送的数据Data与十六进制的01FF(二进制为0000 0001 1111 1111)做与运算,是因为我们讲过串口协议发送的数据位最高可以设置为9位

Example:比如我要发送的数据为0x01(0000 0000 0000 0001),那么与0x01FF做与运算后就为我发送的数据本身。
(如果不与0x01FF与运算,那么当你实际写入一个0x11FF时,就会发生错误,接收方接收不到正确的信息,0x01FF的存在就是防止此类事件的发生)

接收中断USART3_IRQHandler中的USART_GetITStatus位

前提:初始化开启USART外设中断

USART_GetITStatus位将默认为0(RESET),当串口中断发生时,将变为1(SET),所以通常利用此位的变化作为接收数据的标志。

串口通信硬件管脚

TX(发送)、RX(接收)、VCC(提供传输电源)、GND(保证共地)
很显然,两个模块做通信时,发送方TX接接收方RX。


串口通信实例——蓝牙和RS232通信的定位模块

蓝牙模块

蓝牙模块通常有六个引脚:TX、RX、VCC、GND、MD0、MD1。
其中MD0和MD1用于蓝牙模块的模式选择,通常蓝牙模块有三种模式:

MD0 MD1
00:通信功能(在使用蓝牙模块进行通信时,将这两个管脚拉低即可)
01:固件升级
10:配置功能
(根据厂商不同,可能不一样)

RS232陀螺仪定位模块

引脚:TX、RX、VCC、GND

你需要一个RS232转TTL电平格式的模块才能用MCU去控制。如果你买到了一个独立的模块,可以把该模块作为MCU的一部分,也可以把它当成陀螺仪定位模块的一部分。

(比如当成MCU的一部分时,从MCU引出的USART_TX接该模块的USART_TX,把该模块引出的RS232_TX接定位模块RS232_RX)
搭建机器人电控系统——通信协议——串口通信USART/UART、RS232、RS485及其实例_第6张图片

你可能感兴趣的:(单片机,stm32,嵌入式硬件)