STM32实战-串口通信方式汇总

2023-05-16

STM32实战-串口通信方式汇总

  • 1.串口基本概念
    • 1.1 串口通讯(Serial Communication)
    • 1.2 串口通讯的数据格式
    • 1.3 通讯方式
    • 1.4 串口物理链路形式
    • 1.5 同步通信和异步通信
  • 2.STM32 串口配置
    • 2.1 USART句柄
  • 3.串口发送
    • 3.1 发送方式
    • 3.2 重定向发送
    • 3.3 STM32日志信息
  • 4.串口接收
  • 5.接收一帧数据
  • 6.串口进阶应用

1.串口基本概念

1.1 串口通讯(Serial Communication)

是指外设和计算机间,通过数据信号线、地线等,按位进行传输数据的一种通讯方式。

1.2 串口通讯的数据格式

起始位(低电平),数据位,停止位(高电平),奇校验,偶校验

停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

在这里插入图片描述

1.3 通讯方式

  • 全双工模式(Full Duplex)、
  • 单工模式(Simplex Communication)、
  • 半双工模式(Half Duplex 485、232)
    EIA RS232(通常简称“RS232”): 1962年由美国电子工业协会(EIA)制定。
    EIA RS485(通常简称“RS485”): 1983年由美国电子工业协会(EIA)制定。

1.4 串口物理链路形式

  • TTL用于两个MCU之间,全双工(逻辑电平1:2.4V–5V 逻辑电平0:0V–0.5V )
  • RS-232用于MCU与PC机之间,全双工(逻辑电平1:-15V–+5V 逻辑电平0:+3V–+15V )串行通信中,线路空闲时,线路的 TTL 电平总是高,经反向 RS232 的电平总是低。一个数据的开始 RS232 线路为高电平,结束时 Rs232 为低电平。
  • 485和422,RS485是半双工的,RS422是全双工的。数据稳定但是增加通信功耗,差分方式传输信号方式,并不需要相对于某个参照点来检测信号,系统只需检测两线之间的电位差就可以了,422共模电压范围为-7~+7V,而RS-485收发器共模电压范围为-7~+12V。有更高的抗干扰能力,传输距离可以达到上千米。

1.5 同步通信和异步通信

  • 同步通信,通信双方必须先建立同步,即双方的时钟要调整到同一个频率。收发双方不停地发送和接收连续的同步比特流。但这时还有两种不同的同步方式。一种是使用全网同步,用一个非常精确的主时钟对全网所有结点上的时钟进行同步。另一种是使用准同步,各结点的时钟之间允许有微小的误差,然后采用其他措施实现同步传输。(对发送器和接收器要求成本较高,传输效率高)
  • 异步通信,异步串行通信是指发送端和接受端在相同的波特率下不需要严格地同步,允许有相对的时间时延,即收、发两端的频率偏差在10%以内,就能保证正确实现通信。异步通信在不发送数据时,数据信号线上总是呈现高电平状态,称为空闲状态。(实现容易广泛应用,通讯速率较低)
  • 两者区别
    同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。
    同步通信效率高,异步通信效率较低。
    同步通信较复杂,双方时钟的允许误差较小;异步通信简单,双方时钟可允许一定误差。
    同步通信可用于点对多点,异步通信只适用于点对点。

2.STM32 串口配置

2.1 USART句柄

在这里插入图片描述
串口初始化结构体
在这里插入图片描述

  • 配置串口参数:波特率、字长、停止位、校验位、模式(发送模式、接收模式、收发模式)、硬件流控模式
  • USART_RTS、USART_CTS,大部分都没怎么使用过,
    RTS → Request To Send 请求发送。是模块的输入端,用于MCU通知模块,MCU是否准备好,模块是否可向MCU发送信息,RTS的有效电平为低。(Require ToSend,发送请求)为输出信号,用于指示本设备准备好可接收数据,低电平有效,低电平说明本设备可以接收数据。
    CTS ← Clear To Send 允许发送。是模块的输出端,用于模块通知MCU,模块是否准备好,MCU是否可向模块发送信息,CTS的有效电平为低。用于判断是否可以向对方发送数据,低电平有效,低电平说明本设备可以向对方发送数据。
  • OverSampling 过采样,对串口数据采样,一般使用16倍波特率时钟进行采样,接收器的设计最主要的一点是如何提高采样的准确率,最好是保证采样点处于被采样数据的时间中间点。所以,在接收采样时要用比数据波特率高n倍(n≥1)速率的时钟对数据进行采样。
  • OneBitSampling 指定是选择单个样本还是选择三个样本的多数投票。选择单采样方法增加了接收机对时钟的容忍度偏差。
    在这里插入图片描述

串口相关寄存器
在这里插入图片描述

  • RDR、TDR 数据收发寄存器
  • ISR、ICR 中断标志寄存器和中断清除寄存器
  • CR1、CR2、CR3 控制寄存器
  • GTPR 保护时间和预调度器寄存器
  • RTOR 接收超时寄存器
  • RESERVED1、RESERVED2 定义保留字
  • BRR 波特率寄存器

3.串口发送

3.1 发送方式

  • 普通发送 HAL_UART_Transmit
     是HAL库提供的串口发送函数。在HAL库的手册中,或者在代码中跳转到函数可以找到函数的说明信息。这个发送函数是阻塞式的。参数Timeout是超时时间,代表某次执行函数,最多占用串口的时间,单位是毫秒。简单来说,在本次数据发送完之前,不能发送别的数据。所以,调用函数的时候要指明参数,本次发送占用多长时间,在此期间,由于串口资源被独占,不能成功调用发送函数。如果在规定的时间内,数据发送完毕,那就释放占用的串口资源;如果到了时间,即便数据还没有发送完毕,(比如数据量很大),仍需要归还串口资源的控制权,让别人来用。

  • 中断发送 HAL_UART_Transmit_IT
    相比普通发送,发送最好也用中断,特别是批量数据发送不会造成阻塞,数据帧不大可以用阻塞发送,用中断效率高。

  • DMA发送 HAL_UART_Transmit_DMA

  • 中止发送 HAL_UART_AbortTransmit
    此过程可用于中止在中断或DMA模式下启动的任何正在进行的传输。禁用UART中断(Tx和Rx)、-禁用外围寄存器中的DMA传输(如果启用)、通过调用HAL_DMA_Abort中止DMA传输(在DMA模式下传输的情况下)

*-将句柄状态设置为就绪

3.2 重定向发送

3.3 STM32日志信息

4.串口接收

5.接收一帧数据

6.串口进阶应用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32实战-串口通信方式汇总 的相关文章

随机推荐

  • Keil4中C51的debug调试步骤技巧

    1 选择相应的调试仿真连接器 xff1a 选择 xff1a project gt Options for Target 如下图所示 xff1a 然后在弹出对话框的Debug选项下选择仿真器的型号 xff1a 2 进入调试 xff1a 3 部
  • 怎么操作linux服务器

    Linux 服务器就是采用 Linux 系统的网络服务器 xff0c 同时也有采用 windows 的服务器 xff0c 作用是类似的 而 Linux 并不是一个特定的系统 xff0c 而是使用 Linux 内核的系统 xff0c 现在发行
  • 人工智能如何可以思考?

    近日在给同事讲人工智能的时候 xff0c 提到当数据量不够的时候 xff0c 必要时需要加入人工工程 xff0c 引导计算机 归纳 一些知识 xff0c 毕竟计算机智能比起人类智能 xff0c 最大的缺陷可能在于不懂得 举一反三 换句话说
  • bag文件内topic对应的frame_id查看指令

    启动ROS roscore 运行数据集 span class token comment 数据集小的话 xff0c 建议慢速播放 span rosbag play xxx span class token punctuation span
  • GPS数据类型(ROS)

    文章目录 一 传感器分类二 作用三 系统组成四 位置表示五 数据格式六 ROS中GPS数据格式sensor msgs NavSatFixROS中GPS数据主要包含这四类 xff0c 分别是gps 裸数据ros封装 xff0c 位置 xff0
  • cmake使用教程

    CMakeLists txt文档编写以及packsge xml文档介绍 CMakeLists txt文档一 cmake minimum required命令二 CMake中的编译类型三 cmake编译选项 xff08 与2对应 xff09
  • 四旋翼无人机飞控系统设计(闭环控制系统)

    对于一个简单的飞控程序来说 xff0c 控制器是它最核心的部分 xff0c 这里主要与大家讨论控制系统的基本理论知识 xff08 自控大佬请绕道 xff09 xff0c 包括控制系统概念 闭环控制系统的原理 下篇将侧重包含pid控制算法的具
  • 针对frame_id和child_frame_id的理解

    ros基础必看之各个frame的理解 ROS坐标系统 xff0c 常见的坐标系和其含义 ROS中TF 坐标系转换 原理与使用
  • IMU预积分学习

    IMU预积分学习 一 IMU状态传递方程 一 IMU状态传递方程 几种不同的表达形式 xff1a 1 lio mapping xff1a 参考大佬 xff1a lio mapping 及 VINS Mono代码及理论推导 xff08 2 x
  • Python3 内置模块 - os

    方法名说明os access判断文件权限os chdir改变当前工作目录os chmod file 修改文件权限os execvp 启动一个新进程os execvp 执行外部程序脚本 xff08 Uinx xff09 os fork 获取父
  • AttributeError: module 'tornado.web' has no attribute 'asynchronous'解决方法

    AttributeError module tornado web has no attribute 39 asynchronous 解决方法 今天看tornado异步时发现的错误 xff0c 查了一下 xff0c 原来tornado6以后
  • 【STM32项目】- 人体检测(体温、心率、心跳、跌倒检测)

    STM32人体检测 xff08 体温 心率 心跳 跌倒检测 xff09 43 zigbee 笔者前言 在闲鱼有缘结识的一个哥们 xff0c 帮助做的基于STM32人体检测系统 xff0c 我负责硬件程序开发设计 xff0c 哥们负责客户端服
  • ESP32 之 esp32-cam wifi拍照传图系统1

    文章目录 ESP32 之 esp32 cam wifi拍照传图系统1 效果演示2 材料准备3 原理图接线4 下载代码 ESP32 之 esp32 cam wifi拍照传图系统 1 效果演示 2 材料准备 ESP32 camUSB转TTL按钮
  • ESP32 之 esp32-cam wifi拍照传图系统2

    ESP32 之 esp32 cam wifi拍照传图系统 补充说明 ESP32 CAM总结 一 ESP32初识 ESP32 CAM模组的核心芯片 xff1a ESP32 S 模块是一款超小体积的多功能通用型 802 11b g n WiFi
  • 【PX4 飞控二次开发】第一个程序 打印输出-模拟

    第一个程序 1 编写任务代码 Cmake文件2 编译 1 编写任务代码 Cmake文件 span class token operator span span class token operator span PIX4 span clas
  • 【PX4 飞控二次开发】UORB 发布及订阅自定义

    UORB测试 一 添加msg1 创建 msg文件2 Cmakelists txt修改3 编译错误4 编译成功 二 发布及订阅主题1 添加代码2 修改cmake3 再次编译 一 添加msg 1 创建 msg文件 span class toke
  • 【PX4 飞控二次开发】自制ESP8266WIFI数传

    ESP8266数传模块 一 简介二 下载烧录固件1 下载MavLink ESP8266固件2 烧录 三 连线四 配置ESP8266五 连接WIFI Bridge 一 简介 ESP8266是一款低成本 xff0c 易于使用的Wi Fi模块 x
  • 四旋翼无人机飞控系统设计(PID控制算法)

    PID控制算法 PID控制器是一个结构简单并且成熟稳定的控制器 xff0c 在工业上应用广泛 包括比例 xff08 Proportion xff09 积分 xff08 Integral xff09 微分 xff08 Differential
  • 树莓派入门-环境搭建

    树莓派环境搭建 一 修改文件1 1系统安装1 2添加修改文件 二 更换源加速2 1修改sources list2 2修改raspi list2 3更新系统 三 配置系统3 1摄像头 VNC3 2安装TFTP服务3 3固定IP3 4分辨率修改
  • STM32实战-串口通信方式汇总

    STM32实战 串口通信方式汇总 1 串口基本概念1 1 串口通讯 Serial Communication 1 2 串口通讯的数据格式1 3 通讯方式1 4 串口物理链路形式1 5 同步通信和异步通信 2 STM32 串口配置2 1 US