通信协议

串口通信详解
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. JavaScript在离开页面是提示用户
  2. 关于windows10用c++部署libtorch过程中遇到的一些问题
  3. 绘图: Python matplotlib简介
  4. NoSuchMethodError 发生原因和解决办法
  5. for惠普2013实习生
  6. linux 桌面显示视频播放器,Ubuntu 13.10开启媒体播放器VLC桌面通知的步骤
  7. linux shell 0403-011,shell脚本出现 test:0403-004 Specify a paramater with this command
  8. 计算机领域hpec会议,2018 IEEE High Performance extreme Computing Conference HPEC
  9. python两个字符串数据可以复制吗_无论如何,是否要将Python pandas数据框中的单个数据中的数据复制到字符串或列表中以进行进一步处理?...
  10. Visual Studio Code编辑器的实用插件和工作中实用的技巧
  11. 1:MTK 6737 Flash配置
  12. 微型计算机中的位置的是什么,电脑基础知识问答卷
  13. VMOS+小黄鸟无root抓包(解决抓包无网络问题)(附工具)
  14. 通过官网怎么查找联盟申请链接
  15. 电机加减速S曲线算法 Sigmoid 函数
  16. 8.1~8.2 周末翻倍奖励——滴滴快车单
  17. Java实现基于国密SM2、SM4生成证书密钥进行字串的加解密
  18. Command——Windows
  19. NoSQL数据库笔谈 转载
  20. 计算机数字小,直观:打开和关闭笔记本计算机的数字小键盘

热门文章

  1. 求变的名创优品,“困”于求变
  2. 为什么划分内核态、用户态?
  3. 银行数字化转型导师坚鹏:金融科技与银行转型
  4. 【Linux】缓冲区的概念
  5. linux 常用命令 小白快速入门
  6. python裂缝检测_python 裂缝识别 这是一个使用Python和PyQt5开发的一个计算机视觉辅助裂缝标注工具 - 下载 - 搜珍网...
  7. limit与OFFSET
  8. 一键生成藏头诗小程序源码
  9. 找了一下午的错误 ~
  10. python必背英语单词的手机软件_有哪些适合背英语单词的手机app?