avatar

松果工作室

欢迎光临

  • 首页
  • ESP
  • LVGL
  • freeRTOS
  • 快速笔记
  • 考察日志
  • 个人收藏
  • 我的服务
Home (LIB)用串口中断解析Modbus数据
文章

(LIB)用串口中断解析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

Sep 27, 2025

(LIB)一个好用的Modbus解析函数

一个好用的Modbus解析函数 包含03/10/04/06 #include <stdio.h> #include <stdint.h> #include <string.h> #

Jun 21, 2024

(LIB)环形滤波算法

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

Jun 17, 2024

(STM32)STM32 ADC采集的三种方式

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

OLDER

(freeRTOS)Ubuntu Server 上网

NEWER

(Elec)电子管

Recently Updated

  • (ESP-IDF)LVGL 模拟器
  • (ESP-IDF)LVGL 自定义对象加入编码器组
  • (ESP-IDF)vscode配置文件
  • (Elec)来复再生式晶体管单管收音机
  • (ESP-IDF)ESPNOW

Trending Tags

LVGL WCH Linux Elec ThatProject freeRTOS STM ESP Flutter Others

Contents

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

Using the Halo theme Chirpy