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

相关推荐
v先v关v住v获v取13 小时前
风电机变桨系统8张cad+设计说明书+三维图
科技·单片机·51单片机
电子科技圈15 小时前
Durin:Aliro标准赋能,打造无缝移动入户体验
人工智能·mcu·物联网·网络协议·智能家居·智能硬件·iot
如愿小李15 小时前
基于STM32的智能水质监测系统
stm32·单片机·嵌入式硬件
Heartache boy16 小时前
野火STM32_HAL库版课程笔记-TIM通道捕获应用之编码器模式
笔记·stm32·单片机·嵌入式硬件
恒森宇电子有限公司18 小时前
芯晞微CSM057 线性充电管理芯片 封装SOT23-6
单片机·嵌入式硬件
蓝凌y18 小时前
51单片机之LCD1602
单片机·嵌入式硬件·51单片机
charlie11451419119 小时前
嵌入式C++教程实战之Linux下的单片机编程:从零搭建 STM32 开发工具链(4)从零构建 STM32 构建系统
linux·开发语言·c++·stm32·单片机·学习·嵌入式
欢乐熊嵌入式编程19 小时前
用 ESP32 + WiFi 做远程控制插座(从原理到实战)
单片机·wifi·智能路由器·esp32·远程控制插座
weixin_4629019720 小时前
esp32测试DH11模块
单片机
蓝凌y20 小时前
51单片机之按键扫描
单片机·嵌入式硬件·51单片机