RS485通信设计

刷写数据通过RS485在上位机和MCU之间进行通信。

  • 为了兼容APP的download请求帧,上位机的握手帧和刷写帧,本设计提供了三种类型通信帧DOWNLOAD_REQUEST_FRAME,HANDSHAKE_FRAME和PROGRAM_FRAME,由系统状态机根据相应状态进行切换。切换函数分别为Uart_Download_Request_Init(),Uart_Handshake_Init()和Uart_Program_Init();
  • 底层的数据传输通过DMA来实现;
  • 底层数据池采用乒乓buffer来实现,从而解决消费者和生产者在读写共享区域的问题;

帧类型

  • 刷写请求
    刷写请求帧 上位机 -> MCU
    13bytes AA01BEEF000000000000000000
    请求回复帧 MCU -> 上位机
    app 13bytes AA01BEEF010000000000000000
    boot 8bytes AA01BEEF01000000
  • 握手
    握手请求帧 上位机 -> MCU
    8bytes 1357135713571357
    握手回复帧 MCU -> 上位机
    8bytes 2468246824682468
  • 刷写包长度
    刷写包长度帧 上位机 -> MCU
    8bytes AABBCCDDXXXXXXXX
    回复帧 MCU -> 上位机
    8bytes 1234567887654321
  • 刷写数据
    刷写数据帧 上位机 -> MCU
    256bytes
    回复帧 MCU -> 上位机
    8bytes 1234567887654321

通信主要函数分析

  1. 模式初始化函数 Uart_XXX_Init

通过初始化函数将通信模式初始化为DOWNLOAD_REQUEST_FRAME,HANDSHAKE_FRAME和PROGRAM_FRAME。

  1. 中断回调函数 HAL_UART_RxCpltCallback

当DMA完成数据接收时,会触发硬件中断,调用该回调函数。该函数根据当前通信所处的帧类型,切换乒乓buffer的存储区,并更新相应的状态。

  1. 获取乒乓缓存中当前ready的缓冲区

遍历乒乓缓存的两个缓冲区,返回ready的缓冲区

相关推荐
szxinmai主板定制专家11 小时前
X86 工控机 vs RK3588 异构主控:AMR 控制器 BOM、散热、长期运维对比
运维·stm32·单片机·嵌入式硬件·fpga开发·am62x
泛凡(Linyongui)15 小时前
基于 CW32L010 的智能厨卫调温旋钮方案--低成本 EC21 编码旋钮全解析
单片机·嵌入式硬件·c#
糖糖单片机设计16 小时前
基于单片机的热水器节能控制系统
单片机·嵌入式硬件
金色光环20 小时前
【DSP学习】C2000_PWM中断程序_笔记
笔记·单片机·学习
智购科技智能售货柜20 小时前
顾客已经关门,视觉售货柜还在处理旧画面:延迟积压怎么查?~YH
python·单片机·嵌入式硬件·物联网·eclipse
糖糖单片机设计20 小时前
基于 STM32 的智能电蚊香控制系统
stm32·单片机·嵌入式硬件
zhangrelay21 小时前
Arduino-MEGA-ESP单片机理论课笔记-01入门-02硬件-03开发环境-2026
笔记·单片机·嵌入式硬件·学习·机器人
AlanAshley1 天前
手机与电脑的屏幕计时器熄屏区别及协议栈
单片机·智能手机·电脑
AlanAshley1 天前
电脑烧屏的软件与硬件原因全解析
单片机·嵌入式硬件·电脑
ScilogyHunter1 天前
Hercules系列安全MCU功能安全原理详解
java·单片机·安全·hercules