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的缓冲区

相关推荐
炸膛坦客7 小时前
单片机/C/C++八股:(二十六)IIC 专题(I²C)---- 上集
c语言·c++·单片机
华清远见IT开放实验室12 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
GeekArch14 小时前
第24讲:Vibe模式代码风格控制——适配Keil/STM32工程规范
人工智能·stm32·单片机·嵌入式硬件·mcu·决策树·ai编程
Freedom_my15 小时前
STM32项目3
stm32·单片机·嵌入式硬件
国科安芯16 小时前
星间光链路:AS32S601型抗辐射MCU在空间激光通信终端控制中的技术实现
服务器·网络·单片机·嵌入式硬件·物联网·安全·信息与通信
小李不困还能学18 小时前
基于 51 单片机的8 路抢答器设计教程
单片机·嵌入式硬件·mongodb·抢答器
萌动的小火苗18 小时前
嵌入式开发中的栈与队列:任务调度为什么依赖数据结构
数据结构·c++·单片机·嵌入式硬件
振浩微433射频芯片19 小时前
工业遥控器总在关键时刻“掉链子”?——433MHz芯片方案如何破局
网络·单片机·嵌入式硬件·物联网·工业遥控
blevoice19 小时前
抖抖燃脂机单 AC6966B 主控调试踩坑:Type-C 整机供电喇叭无声排障
c语言·开发语言·单片机
三易串口屏20 小时前
三易串口屏开发教程:如何使用键盘控件输入参数并发送给单片机
单片机·嵌入式硬件·串口屏·三易串口屏·键盘控件