通信协议

串口通信详解
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。

RS232:全双工传输;负逻辑电平格式,-5V~-15V为1,5V到+15V为0。

RS485:半双工传输;差分传输电平格式,压差在-2V~-6V之间为1,在2V到6V之间为0。
(RS485通常适用于远距离传输)

串口协议原理

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

传输协议

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

传输状态

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

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

需要定义的参数

  • 数据位长度
  • 奇偶校验位长度
  • 停止位长度
  • 传输模式:只用于收/发,收/发均使用
  • 传输速率设置:波特率

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

发送函数USART_SendData

发送函数中核心在于

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及其实例相关推荐

  1. 搭建机器人电控系统——通信协议——CAN通信及其实例

    通信协议 串口通信详解 IIC通信详解 SPI通信详解 CAN通信详解 文章目录 通信协议 CAN通信 什么是CAN通信? CAN通信的优点: CAN通信电平格式: CAN通信的结构: CAN通信协议 ...

  2. 搭建机器人电控系统——MCU基石——STM32 GPIO原理

    文章目录 搭建机器人电控系统--MCU基石 GPIO是什么? GPIO的模式 5种输入模式: 4种输出模式: GPIO的输出速度 搭建机器人电控系统--MCU基石 在上一章中,我讲解了搭建一个机器人电 ...

  3. 搭建机器人电控系统——如何从零开发主控?——文件下载、工程配置、烧录

    文章目录 搭建机器人电控系统--如何从零开发主控? 如何开发主控?(软件实现烧录控制功能) 确定你选择的MCU参数 ①首先去ST官网上找到对应的单片机型号: ②找到对应型号的三大关键参数: ③找到官网 ...

  4. 搭建机器人电控系统——PID算法——什么是PID?

    PID算法 PID算法介绍,不同系数仿真,优缺点 位置式.增量式.模糊式PID 大林算法.史密斯算法和PID算法的区别 文章目录 PID算法 控制系统介绍 开环控制系统 前馈控制系统 单闭环控制系统 ...

  5. 搭建机器人电控系统——器件选型——如何选择电机?

    器件选型 电源选择 传感器选择 电机选择 电机选型 电机是机器人电控系统控制机构动力的直接来源,一个好的电机可以解决很多机械的问题,也能解决很多控制的问题.电机的选型不仅和电控有关,也和机械环境密切相 ...

  6. 搭建机器人电控系统——器件选型——如何选择传感器?

    器件选型 电源选择 传感器选择 电机选择 传感器 传感器是电控中非常重要的元件,对于不同的传感器,我们也需要对其进行选型,在学校的时候,也许我们不用考虑到太多的成本问题.对于我们来说,选择一个传感器应 ...

  7. 搭建机器人电控系统——如何从零画一块主控板?——搭建最小系统电路原理图

    文章目录 如何画好一块主控? 搭建最小系统电路原理图 以STM32F407ZET6为例: 晶振电路原理 如何搭建晶振电路? 复位电路原理 如何搭建复位电路? 下载电路 电源电路原理 如何搭建电源电路? ...

  8. 搭建机器人电控系统——器件选型——如何选择机器人系统电源?

    器件选型 电源选择 传感器选择 电机选择 电源的参数 一般来说,一款电池的参数主要如下图所示.其中的电压V.容量MAH.持续放电电流A是我们主要的选型依据,接口端子和重量尺寸也是需要考虑的因素. 如何 ...

  9. 搭建机器人电控系统——常用电路——输入保护,过压保护,过流保护,光耦隔离抗干扰,输入补偿,稳压

    文章目录 一些常用电路的总结 输入保护电路 ①PMOS+电容防反接和缓冲 ②TVS瞬态电压抑制二极管 ③稳压(齐纳)二极管 过压保护电路 ①稳压二极管和三极管配合 ②双稳压二极管的反向串联 过流保护电 ...

最新文章

  1. 9.1 mnist_softmax 交叉熵多分类器
  2. 活动报名 | 6位技术女神关于智能技术的实践分享
  3. java文本编辑器 运行_能编译运行java的简单文本编辑器
  4. matlab 倾斜矫正,matlab图像倾斜校正
  5. 获取Spring容器中Bean实例的工具类(Java泛型方法实现)
  6. VS2010旗舰版安装步骤
  7. 支付宝支付加密规则梳理,写的太好了!
  8. Windows 10 系统关闭自动更新
  9. Java算法实现 BAT公司为什么要考算法 github
  10. shell脚本——学习笔记(包含应用案例)
  11. Dell戴尔笔记本电脑G15 5515 Ryzen Edition原装出厂Windows11系统恢复原厂oem系统
  12. 送给1985年左右的朋友 怀念小时候的我们
  13. crackme02——Afkayas.1
  14. 国务院建议探索区块链等技术缩短承兑期限 | 产业区块链发展周报
  15. 网店美工之你不知道的图片设计技巧
  16. 简单的自动化测试模型(python+selenium)
  17. 关于Redux到底是个什么鬼
  18. PINQ-查询数据集-简介
  19. 云南初中计算机学业水平要求,云南省初中信息技术学业水平考试复习合集
  20. android ogg mp3,OGG MP3 AAC Audio Converter

热门文章

  1. c语言程序设计熊壮,C语言程序设计
  2. 银行数字化转型导师坚鹏:银行数字化转型创新与应用前沿
  3. 百家争鸣:Android开源框架排行榜
  4. 华为虚拟home键关闭_华为P20怎么隐藏虚拟键?前置指纹键可轻触返回!
  5. 广播变量kyro_利用Kryo序列化库是你提升Spark性能要做的第一件事
  6. 常用到的身份证,验证码,密码验证
  7. MySQL-SQL优化10大最经典案例详解
  8. IT培训毕业之后,选什么城市比较好?
  9. 正式宣布取消!能让 Linus 本人同谷歌微软达成一致的,只有它了!
  10. Python之动态规划算法