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

相关推荐
CET中电技术12 小时前
不用外挂传感器、不用停机检测——CET中电技术如何重构电动机运维范式?
单片机·嵌入式硬件
都在酒里12 小时前
FreeRTOS 手动移植教程(四):队列 —— 任务间通信的最佳起点
stm32·单片机·rtos
0x3F(小茶)13 小时前
嵌入式C设计模式完全指南(基于《C嵌入式编程设计模式》)
c语言·开发语言·单片机·嵌入式硬件·设计模式
都在酒里13 小时前
FreeRTOS 手动移植教程(二):任务管理——多任务创建、优先级抢占与删除
stm32·单片机·嵌入式硬件·rtos
都在酒里14 小时前
FreeRTOS 手动移植教程(五):信号量 —— 任务同步与中断通知的优雅解决方案
stm32·单片机·rtos·嵌入式软件
紫阡星影14 小时前
【STM32CubeMX项目】智能家居门禁系统
c语言·单片机·嵌入式硬件
txh050715 小时前
从零开始学习FOC
单片机·嵌入式硬件·学习
2601_9611940215 小时前
考研政治历年真题及解析pdf
stm32·单片机·嵌入式硬件·物联网·考研·pdf
今日待办15 小时前
STM32H747I-DISCO 开发指南【数字麦克风使用】
stm32·单片机·嵌入式硬件
世微 如初16 小时前
【方案】AP5127摩托车灯驱动设计:12-100V输入,2.5A恒流
单片机·嵌入式硬件