IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【无标题】 -> 正文阅读

[嵌入式]【无标题】

STM32 串口多处理器通信

1.原理分析

  1. 串口通信原理
    STM32的USART全称为通用同步异步收发器,能够灵活实现同步、异步、半双工、全双工的数据交换。由于通信时数据按照bit的方式在一根数据线上传输,所以也被称为串行接口,简称串口。
    关于STM32的通信特点与原理介绍,网上优秀博主的介绍不计其数,有兴趣深入了解可点击此链接网址:STM32串口通信原理介绍 。本文主要介绍多处理器通信的原理与实现流程。
  2. 多处理器通信(以下简称多机通信)
    USART进行多处理器通信(多个USART连接在一个网络中),其中一个 USART 可以是主 USART,其 TX 输出与其它 USART 的 RX 输入相连接。其它 USART 为 从 USART,其各自的 TX 输出在逻辑上通过与运算连在一起,并与主 USART 的 RX 输入相连接。
    关于多设备(从机)挂载在同一条总线的通信方式十分常见,MCU常见的有CAN总线、I2C总线、SPI总线、串行总线,串口多处理器通信类似于这类总线。
    使用总线挂载多设备是为了节约外设资源、简化硬件电路设计,方便管理多设备通信,切记匆与总线多设备可以同时通信混淆。总线某时刻只有一组设备在通信,其他设备要等待总线空闲时才可申请发起通信。
    总线通信可有或可无主从机之分,这里只介绍主从机的概念:
    划分主从机主要确定一个中心站,方便通过中心站接收从机的状态、数据进行处理、给从机发送控制命令。如此,从机必须要有一个ID或者类节点地址去区分它们,以便主机通过这个唯一的ID区分是哪个从机、从机通过ID确认主机在给谁发信号。
    总线从机的节点地址一般通过DIP开关、从机主动设置或者动态分配方式,本串口多机通信则是通过从机主动设置节点地址。
    理论上,串口多机通信的所有从设备都可以收到主机串口发出的所有数据,相当于每个MCU都被迫接收、处理主机数据。无疑,这增加了未被寻址的从设备USART服务开销。而理想的主从设备通信时,肯定是主机每次只与被寻址的从设备通信,其他未寻址的从设备当个旁观者(那凉快那待,不是!)。所以引出了串口多机通信的静音模式。
    静音模式与停止模式是两个不同的概念:静音模式针对通信过程而言,不是为了降低功耗,只为了做到一对一通信和减少第三者的函数服务开销。 停止模式是针对MCU的低功耗而言,在停止模式外设禁止运行。
    2.1 串口多处理器通信类型
    STM32 MCU的串口多机通信的静音功能将未被寻址的器件置于静音模式下,在静音模式下:
    ● 不得将接收状态位置 1。
    ● 禁止任何接收中断。
    ● USART_CR1 寄存器中的 RWU 位置 1。RWU 可由硬件自动控制,或在特定条件下由软
    件写入。
    根据 USART_CR1 寄存器中 WAKE 位的设置,USART 可使用以下两种方法进入或退出静
    音模式:
    ● 如果 WAKE 位被复位,则进行空闲线路检测,
    ● 如果 WAKE 位置 1,则进行地址标记检测。
    空闲线路检测(WAKE = 0)
    当向 RWU 位写入 1 时,USART 进入静音模式。 当检测到空闲帧时,它会被唤醒。此时 RWU 位会由硬件清零,但 USART_SR 寄存器中的 IDLE 位不会置 1。还可通过软件向 RWU 位写入 0。
    注意:必须要等串口接收至少一个字节都,才能进入空闲检测线路下的静音模式,否则进入静音模式失败,也就不会执行空闲线路检测。
    注意:空闲帧与数据线路拉高不一样,空闲帧为数据发送或者接收完成后的空闲字符,可以理解为整个帧周期内电平均为“1”,它的出现为数据发送完成之后。数据线路拉高只是无数据时处于高电平的状态,可以是数据之前或之后。
    在这里插入图片描述
    如图,在接收到数据1后进入静音模式,数据2、3、4对于串口而言都被屏蔽了,也就不会再接收处理,这样的静音模式持续到数据发送完成,出现一个空闲帧,所有静音模式下的串口被一同唤醒,所以静音模式是针对通信过程而言,总线空闲后,所有从机串口处于激活模式。
    空闲线路检测一般用于同步唤醒的所有从机,方便主机同时向所有从机发出对所有从机有效的指令。利用数据1的特性,可以选择前若干位数据(一般1字节即可)作为从机的唯一ID,还可以根实际情况需要规定公共ID、对某组从机规定公共组ID等,实现与Modbus协议一样的一主控制多从的功能,但减少了Modbus协议层的硬件电路。
    地址标记检测 (WAKE=1)
    在此模式下,如果字节的 MSB 为 1,则将这些字节识别为地址,否则将其识别为数据。在
    地址字节中,目标接收器的地址位于 4 个 LSB 上。接收器会将此 4 位字与其地址进行比
    较,该接收器的地址在 USART_CR2 寄存器的 ADD 位中进行设置。
    当接收到与其编程地址不匹配的地址字符时,USART 会进入静音模式。此时,RWU 位将由硬件置 1。由于当时 USART 已经进入了静音模式,所以 RXNE 标志不会针对此地址字节置 1,也不会发出中断或 DMA 请求。
    当接收到与编程地址匹配的地址字符时,它会退出静音模式。然后 RWU 位被清零,可以开始正常接收后续字节。由于 RWU 位已清零,RXNE 位会针对地址字符 置 1。
    注意:当接收器的缓冲区不包含任何数据(USART_SR 寄存器中 RXNE=0)时,可向 RWU 位写 入 0 或 1。否则会忽略写尝试。
    在这里插入图片描述

如上图,地址标记检测法是为每个串口从机设置了一个节点地址,节点地址可以采用 4bit 或 7bit,通过控制寄存器(USART_CR)的其中4bit或7bit来设置,具体哪些bit根据型号系列和寄存器而定。进入静音模式后,接收的第一个字节会默认与从机的节点地址对比,如果地址一致,则恢复激活模式,否则保持静音模式。
节点地址的设置

如上图,STM32G070RBT6 MCU是用USART_CR2寄存器的[31:24]位来设置地址的,这些位共一个字节,可以根据需要设置4bit或7bit地址。4bit的有效地址仅有16个,7bit有128个。
如果串口接收的第一个字节最高位(7)为1,代表地址,否则为数据。如果为地址,则进行地址匹配检测,成功则串口激活,否则保持静音。
如果节点地址为4bit,则ADD[3:0]有效,串口接收的第一个字节为地址的情况下,只使用该字节的[3:0]进行地址匹配,所以,如果地址为0x2,发送0xf2 或 0x92 都可以匹配成功。所以在设置4bit地址时,注意避免地址重复错误。
注意:处于静音模式下的从机一旦被激活,都需要从新进入,串口不会默认自动重新进入静音模式。

  1. 函数分析
  2. HAL库函数
    HAL库函数以STM32G070RBT6为例,使用上位机串口助手模拟主机,一个STM32G070RBT6核心板为从机,模拟串口多机通信的过程。实际串口多机通信只需要实现从机的TX引脚相与即可(即从机TX脚配置为开漏输出,连接到一起)。
    1.1串口初始化配置
    在这里插入图片描述

串口初始化的参数与通常的串口通信参数一致,只是初始化函数由HAL_UART_Init 改变为HAL_MultiProcessor_Init。初始化后使能多机通信(HAL_MultiProcessor_EnableMuteMode),然后根据多机通信类型进入静音模式(HAL_MultiProcessor_EnterMuteMode)。
HAL库涉及的函数就3个,如果需要配置7bit节点地址,增加一个设置节点地址长度的函数HAL_MultiProcessorEx_AddressLength_Set。
1.2 空闲线路检测(WAKE = 0)
执行下方红框内的函数,对多机通信的清除标志位、唤醒方法和使能多机通信模式进行了设置,接下来就是等待至少一个字节后进入静音模式。
在这里插入图片描述

进入静音模式:在中断进入静音模式。
在这里插入图片描述

1.3 地址标记检测(WAKE = 1)
地址标记检测可以直接配置进入静音模式。
在这里插入图片描述
在这里插入图片描述

  1. LL库函数
    LL库在此不做过多的解释,配置流程都是一样的,只不过函数名会有所区别。
    在这里插入图片描述

上图是设置进入静音模式的模式和地址,使能多处理器通信模式,最后一行代码申请进入静音模式。上面使用的是地址标记的方法,所以不需要接收至少一个字节。下面的代码块使用的是空闲线路检测法,必须至少接收一个字节才能进入静音模式成功。
在这里插入图片描述

红框内是配置多机通信用到的函数,从函数名即可看出它的意义。这里不重复解释。因为CSDN无法直接上传本人的工程代码(估计是因为工程里面有官方的库函数文件,有许可证权限),有需要源码的朋友可私聊我。

本人也是初入职场的小白,工作任务繁忙,文笔有限,难免纰漏,请大家多多斧正。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-11-23 12:31:43  更:2021-11-23 12:32:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:27:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码