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

相关推荐
AOI小白新手上路8 小时前
江科协51单片机 17-2 红外遥控电机调速实验调试总结
单片机·嵌入式硬件·51单片机
oshan201210 小时前
零基础STM32入门教程--10-PWM 呼吸灯
stm32·单片机·嵌入式硬件
jianqiang.xue14 小时前
智能体整体架构设计:四大模块与目录组织
单片机·嵌入式硬件·物联网·架构·esp32
花 满 楼15 小时前
国芯科技CCFC3008PCS BIST (内建自测试) 分析总结
mcu·嵌入式·bist
Messy create15 小时前
【BMS-AFE-温度检测】
stm32·单片机·能源
东莞市永盛电气16 小时前
三相208V变380V变压器,出海工业设备供电适配方案
python·单片机·嵌入式硬件
桃蹊、16 小时前
串口/网络透传实战:FreeRTOS 多任务架构与连接池设计
stm32·物联网·wifi·freertos
新晨单片机设计18 小时前
S001A-基于STM32单片机超声波视力保护仪【Proteus仿真+Keil程序+原理图】
stm32·单片机·proteus
星河单片机18 小时前
STM32驱动Y01-3IN1空气质量模块+OLED显示完整教程
stm32·单片机·嵌入式硬件·空气质量·甲醛检测·二氧化碳检测·tvoc检测
玩转单片机与嵌入式18 小时前
深入浅出TinyML 21:INT8量化改变了模型中的哪些数据?
stm32·深度学习·tinyml