当前位置: 首页 > news >正文

(四)stm32之通信协议

一.串口通信

1、全双工、半双工、单工
单工:只能一个人传输,只能向一个方向传输
半双工:只能一个人传输,可以多个方向传输
全双工:多方传输,多个方向传输

2、同步通信、一步通信
异步通信:双方时钟可以不同步,发送的信息封装(加上起始位、停止位)实现同步,效率低,用在低速传输中
同步通信:使用频率一致的时钟,数据帧通过独特的bit串作为启停标志,效率高,适合高速传输

3、波特率
数据传输速率使用波特率来表示,单位bps(bits per second)

串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信
单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大地扩展了单片机的应用范围,增强了单片机系统的硬件实力
硬件电路
简单双向串口通信有两根通信线(发送端TX和接收端RX)
TX与RX要交叉连接
当只需单向的数据传输时,可以只接一根通信线
当电平标准不一致时,需要加电平转换芯片
在这里插入图片描述
电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:

电平标准
TTL电平:+3.3V或+5V表示1,0V表示0
RS232电平:-3-15V表示1,+3+15V表示0
RS232是一种串行通信标准,全称为“推荐标准232”(Recommended Standard 232),由电子工业联盟(EIA)在1960年代制定。RS232广泛用于计算机和各种设备之间的串行数据传输,如调制解调器、打印机、扫描仪等。RS232定义了电气特性、信号功能、连接器类型和信号线的物理连接方式。

RS232的特点:

  1. 电气特性:RS232使用负逻辑电平,逻辑“1”通常表示为-3V到-15V之间的电压,而逻辑“0”表示为+3V到+15V之间的电压。这种电平标准允许在较长的电缆上进行可靠的数据传输。

  2. 信号线:RS232标准定义了多条信号线,包括发送数据(TXD)、接收数据(RXD)、请求发送(RTS)、清除发送(CTS)、数据终端就绪(DTR)、数据设备就绪(DSR)、数据设置就绪(DSR)、载波检测(DCD)等。

  3. 连接器:RS232标准最初使用DB-25连接器,后来随着设备的简化,DB-9连接器变得更为常见。DB-9连接器通常有9个引脚,而DB-25连接器有25个引脚。

  4. 通信模式:RS232支持全双工通信,即数据可以在两个方向上同时传输。

  5. 速率和距离:RS232标准支持的最高数据传输速率为20kbps(千比特每秒),在较低的数据速率下,传输距离可以达到15米以上。随着数据速率的提高,传输距离会相应减少。

RS232的应用:

RS232由于其简单性和可靠性,在许多应用中被广泛使用。例如:

  • 计算机与外围设备:连接计算机与打印机、扫描仪等外围设备。
  • 工业控制:用于工业设备之间的通信。
  • 测试设备:连接测试仪器和计算机进行数据交换。
  • 嵌入式系统:在嵌入式系统中,RS232常用于调试和数据传输。

RS232的局限性:

尽管RS232非常普及,但它也有一些局限性:

  • 速率限制:随着数据传输需求的增加,RS232的速率限制成为了一个问题。
  • 距离限制:在高速率下,RS232的传输距离受到限制。
  • 电平差异:RS232的电平标准与现代电子设备常用的TTL电平不兼容,需要电平转换。

随着技术的发展,RS232逐渐被USB、RS485、以太网等更高速、更远距离的通信标准所取代。然而,由于其历史的普及性和设备的广泛存在,RS232在许多场合仍然被使用。

RS485电平:两线压差+2+6V表示1,-2-6V表示0(差分信号)
RS485是一种电气接口标准,用于实现多点通信网络中的串行数据传输。它由电子工业联盟(EIA)在1983年发布,是RS232的改进版,旨在提供更远距离和更高数据传输速率的通信能力。RS485广泛应用于工业自动化、楼宇自动化、电信、电力系统等领域。

RS485的特点:

  1. 差分信号:RS485使用差分信号传输,即使用两根线(A和B)来传输一个信号,其中A线传输正信号,B线传输负信号。这种设计可以有效抑制噪声干扰,提高信号的抗干扰能力。

  2. 多点通信:RS485支持多点通信,即一个主设备可以与多个从设备进行通信。这使得RS485非常适合于构建分布式控制系统。

  3. 较长的传输距离:RS485能够在较长距离上进行可靠的数据传输,通常在1200米范围内可以达到100kbps的数据速率。

  4. 较高的数据速率:RS485支持较高的数据速率,最高可达10Mbps,但实际应用中通常会根据传输距离和网络条件进行调整。

  5. 半双工通信:RS485通常工作在半双工模式下,即数据在同一时刻只能在一个方向上传输,但可以通过控制信号来切换发送和接收状态。

RS485的应用:

RS485由于其高可靠性和远距离传输能力,在许多领域得到了广泛应用:

  • 工业自动化:用于连接PLC(可编程逻辑控制器)、传感器、执行器等设备。
  • 楼宇自动化:用于智能建筑中的灯光控制、安全监控等系统。
  • 电力系统:用于电力监控和控制设备之间的通信。
  • 电信设备:用于远程通信设备之间的数据传输。

RS485的局限性:

尽管RS485具有许多优点,但它也有一些局限性:

  • 半双工通信:RS485的半双工通信模式限制了数据传输的效率,特别是在需要同时进行双向通信的应用中。
  • 复杂的网络设计:多点通信网络的设计和调试相对复杂,需要考虑终端匹配、信号反射等问题。

RS485作为一种成熟的技术,虽然在某些方面可能不如现代的通信标准(如以太网、CAN总线等)先进,但由于其稳定性和成本效益,它在许多应用中仍然是首选的通信方式。随着技术的发展,RS485也在不断地进行改进,以适应新的应用需求。
波特率:串口通信的速率
起始位:标志一个数据帧的开始,固定为低电平
数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行
校验位:用于数据验证,根据数据位计算得来
停止位:用于数据帧间隔,固定为高电平

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
波特率
发送器和接收器的波特率由波特率寄存器BRR里的DIV确定
计算公式:波特率 = fPCLK2/1 / (16 * DIV)

数据模式
HEX模式/十六进制模式/二进制模式:以原始数据的形式显示
文本模式/字符模式:以原始数据编码后的形式显示

serial.c

#include "stm32f10x.h"                  // Device header
#include <stdio.h>
#include <stdarg.h>
#include "Serial.h"uint8_t Serial_RxData;
uint8_t Serial_RxFlag;void Serial_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE)

相关文章:

  • 补码是什么意思_补码的性质_补码反码原码的转换
  • c++【入门】计算(a+b)*c的值
  • LLM大模型应用中的安全对齐的简单理解
  • 什么是数据同步服务RSYNC?
  • 快速排序算法Python实现
  • 【人工智能】-- 迁移学习
  • 包管理器-npm、yarn、cnpm、pnpm的比较
  • JDK安装详细教程(以JDK17为例)
  • c++将utf8转gb2312
  • Tomcat组件概念和请求流程
  • 【Redis】初识 Redis
  • [JS]认识feach
  • 设计模式的七大原则
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • 【Linux】进程间通信——命名管道和共享内存
  • [译] 怎样写一个基础的编译器
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • Apache Spark Streaming 使用实例
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • gops —— Go 程序诊断分析工具
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Java精华积累:初学者都应该搞懂的问题
  • Linux Process Manage
  • SOFAMosn配置模型
  • supervisor 永不挂掉的进程 安装以及使用
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 来,膜拜下android roadmap,强大的执行力
  • 前端面试总结(at, md)
  • 如何使用 JavaScript 解析 URL
  • 树莓派 - 使用须知
  • 思维导图—你不知道的JavaScript中卷
  • 用element的upload组件实现多图片上传和压缩
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (1)(1.13) SiK无线电高级配置(六)
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (汇总)os模块以及shutil模块对文件的操作
  • (十二)Flink Table API
  • (十七)Flink 容错机制
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一一四)第九章编程练习
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • .net开发日常笔记(持续更新)
  • .NET学习全景图
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示