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

【STM32F1标准库】理论——通信协议:串口

目录

一、简介

二、连接方式

三、串口参数与时序

        1.参数

        2.时序

四、STM32实现串口通信的方法

        1.使用软件模拟

        2.使用硬件外设

杂谈

        1.通信的目的

        2.常见可以使用串口通信的模块

        3.串口常用电平标准

        4.串口从波形反推数据

        5.奇偶校验


一、简介

        命名:USART(通用同步收发器)

                   UART  (通用异步收发器)

        引脚:TX  发送引脚

                   RX  接收引脚

                   串口通信的设备TX和RX交叉相连

        特性:全双工,设备之间可以相互收发数据,接收和发送可以同时进行

        时钟:同步,使用同一个时钟频率

                   异步,时钟频率不一致,需要额外约定通信速率

        电平:单端,信号的高低电平取决于对GND的电压差

        设备:点对点

二、连接方式

        不同设备TX和RX交叉连接

        VCC和GND正常连接    

        通信的高低电平取决于对GND的电压差,当两设备电平标准不一致时需要加电平转换芯片

三、串口参数与时序

        1.参数

                波特率:串口通信的速率

                            (每秒钟传输的二进制数个数,bit/s)

                起始位:标志一个数据帧的开始,固定为低电平

                数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行

                校验位:用于数据验证,根据数据位计算得来

                              奇校验:数据位 + 校验位共有奇数个 1

                              偶校验:数据位 + 校验位共有偶数个 1

                停止位:用于数据帧间隔,固定为高电平

                

                1帧数据的组成1:1位起始位 + 8位数据位                     + 1位停止位 = 10位数据

                1帧数据的组成2:1位起始位 + 8位数据位 + 1位校验位 + 1位停止位 = 11位数据

        2.时序

                空闲状态高电平

                将电平拉低产生下降沿转为起始状态

                正常发送数据(8/9bit)

                将电平拉高(因为发送数据的缘故不一定有上升沿,重点在于电平状态)转为停止状态

四、STM32实现串口通信的方法(主要是异步通信)

        1.使用软件模拟

例如要实现波特率为9600的数据传输,不必使用固定的IO口

发送时只需使用定时器每 1s / 9600 = 104us 按照数据帧的要求调用 GPIO_WriteBit() 对配置的引脚置高低电平即可,

读取时使用外部中断监测表示起始信号的下降沿,定时调用 GPIO_ReadInputDataBit() 对配置的引脚读取每一位高低电平最终拼成1帧数据即可。

        2.使用硬件外设

        根据数据寄存器内的字节数据,自动生成数据帧时序通过固定的TX引脚发出

        通过固定的RX引脚将收到的数据帧时序,拼接成一个字节存放在数据寄存器内

        即通过读写数据寄存器实现串口通信

        自带波特率发生器(对系统时钟分频)

        可配置数据帧长度、停止位长度

        可配置校验位

        支持同步模式、硬件流控制

                

杂谈

        1.通信的目的

                将一个设备的数据传送到另一个设备,扩展硬件系统

        2.常见可以使用串口通信的模块

                USB转串口模块

                陀螺仪(既支持USART又支持IIC)

                蓝牙串口模块

        3.串口常用电平标准

                TTL:            +3.3V或+5V表示1,                       0V表示0         

                RS232:              -3~-15V表示1,               +3~+15表示0

                RS485:两线压差+2~+6V表示1,                -2~-6V表示0       (差分信号)

        4.串口从波形反推数据

                因为采用低位先行:数据从低位开始发送   

                                                0xF=00001111   发送顺序   11110000

                                               所以从波形反推数据方法1——>波形从右往左看,数据从高往低写

                                               所以从波形反推数据方法2——>波形从左往右看,数据从低往高写

        5.奇偶校验

               奇校验:数据位 + 校验位共有奇数个 1

               偶校验:数据位 + 校验位共有偶数个 1

               缺陷:当同时有偶数个数据位发生变化则检测不出来数据出错了

        6.STM32F1对于输入噪声的处理及波特率计算

                对每一位信号都进行16次采样,将第8、9、10次采样位置定为被采信号的中间位置,并且比较这三次采样01的个数确定信号类型

                由此可得STM32F1波特率公式

                波特率 = (一或二分之一)时钟频率 / (16 * 分频系数)

                多除以16是因为每bit数据都被采样了16次

        7.硬件流控制

        在硬件电路中多使用一条信号线,用于发送速度的控制,防止发送快而接收慢导致的数据覆盖问题

http://www.xdnf.cn/news/322885.html

相关文章:

  • 大数据应用开发和项目实战-电商双11美妆数据分析2
  • 扣子(Coze)的记忆系统详解
  • unity 使用蓝牙通讯(PC版,非安卓)
  • linux 安装ssh server
  • 配电站室智能巡检:机器人 VS 固定摄像头,谁更胜一筹?
  • 聊一聊Qwen3思考模式实现以及背后原理探讨
  • 信息论11:从互信息到最大信息系数——信息论中的非线性关联度量
  • 内网和外网怎么互通?外网访问内网的几种简单方式
  • 在cursor中使用MCP插件生成旅行规划到桌面的执行步骤分析
  • PDF文档压缩攻略
  • Python循环进阶:嵌套与控制的深度解析
  • 详解Redis
  • 第三章—导数和微分错题
  • 【深度学习-Day 7】精通Pandas:从Series、DataFrame入门到数据清洗实战
  • 什么情况下会触发Full GC?
  • 【软件设计师:数据结构】2.数据结构基础(二)
  • Prometheus实战教程:k8s平台-Redis监控案例
  • 微软输入法常用快捷键介绍以及调教技巧
  • 新能源汽车BMS开发工程师视频教程合集(100+节课)
  • 【详细教程】ROC曲线的计算方式与绘制方法详细介绍
  • XMP-Toolkit-SDK 编译与示例程序
  • 大数据处理利器:Hadoop 入门指南
  • 代码随想录图论part4
  • 【Python Number(数字)】
  • 欧姆龙 PLC串口转网口模块cjcp系列SG-CJCP-110
  • 2021-11-11 C++泰勒sin(x)以2步进乘方除以阶乘加减第N项
  • 学习Linux的第四天
  • 前后端开发---分离 和 不分离开发
  • python批量配置交换机简单实现
  • 多功能气体检测报警系统,精准监测,守护安全