avatar

松果工作室

欢迎光临

  • 首页
  • freeRTOS
  • ESP
  • 开发手册
  • 快速笔记
  • 个人收藏
  • 工具
Home 用串口中断解析Modbus数据
文章

用串口中断解析Modbus数据

Posted 2024-05-8 Updated 2024-05- 12
By YCP
5~7 min read

状态机解析 Modbus 协议数据帧

原理:

  1. 中断接收到设备地址 0x01, 进入阶段 2
  2. 中断接收到寄存器地址, 进入阶段 3
  3. 中断接收到数据域长度, 进入阶段 4
  4. 往buf 存接收到的数据域字符,直到接收到应有的数据域长度加上 CRC
  5. 如果计算的 CRC 和接收到的 CRC 一致就发送信号通知任务
if (huart->Instance == USART3) {
    RxBuffer_copy_U3 = RxBuffer_U3;
    switch (ModbusFlag) {
      case SORNON:
        if(RxBuffer_copy_U3 == 0x01){
          ModbusFlag = SORADD;
        }
        break;
      case SORADD:
        if(RxBuffer_copy_U3 == 0x03){
          ModbusFlag = SORCMD;
          RxBuffer_ARR_U3[0] = 0x01;
          RxBuffer_ARR_U3[1] = 0x03;
        }
        break;
      case SORCMD:
        ModbusDalen = RxBuffer_copy_U3 + 5;
        RxBuffer_ARR_U3[2] = RxBuffer_copy_U3;
        ModbusFlag = SORDAT;
        break;
      case SORDAT:
        RxBuffer_ARR_U3[Point_U3] = RxBuffer_copy_U3;
        Point_U3++;
        if (Point_U3 >= ModbusDalen) {
          if (crc16(RxBuffer_ARR_U3, ModbusDalen - 2) == (RxBuffer_ARR_U3[17] | RxBuffer_ARR_U3[18] << 8)) {
            xSemaphoreGive(xBinarySemaphore);
            ModbusFlag = SORNON;
            Point_U3 = 3;
          } else {
            ModbusFlag = SORNON;
            Point_U3 = 3;
            memset(RxBuffer_ARR_U3, 0, 19);
          }
        }
        break;
      default:
        break;
    }
    HAL_UART_Receive_IT(&huart3, (uint8_t *) &RxBuffer_U3, 1);
坑和笔记
Others
License:  CC BY 4.0
Share

Further Reading

Dec 23, 2024

其他笔记

EC800K AT连接移远云 配置过程 # 配置产品信息(初次连接需配置) AT+QIOTCFG="productinfo","pxxxxt","cDVTxxxxxxxxWGVB" # 连接开发者中心 AT+QIOTREG=1 # 查询当前连接状态(+QIOTSTATE: 8为正常) AT+QI

Jun 21, 2024

环形滤波算法

#include <stdio.h> #include <stdlib.h> #define BUFFER_SIZE 10 // 缓冲区大小 #define THRESHOLD 180

Jun 17, 2024

STM32 ADC采集的三种方式

采样周期 单个采集模式 ADC_Settings: 程序使用 uint16_t ADC_Read(

OLDER

CRC校验

NEWER

Ubuntu Server 上网

Recently Updated

  • ESP32(八) 简单的webserver
  • ESP32(七) NVS
  • ESP32(四) STA & AP
  • 多级菜单
  • ESP32(五) ESP32 OTA

Trending Tags

WCH Linux Elec freeRTOS STM ESP Flutter Others SwiftUI

Contents

©2025 松果工作室. Some rights reserved.

Using the Halo theme Chirpy