以电表的读取数据为例,通过STM32的串口接收中断将电表的数据解析出来,因为要兼容两种协议,分开解析较麻烦,想着合在一起,将真正要读取的数据按照顺序存储在一个数组之中。

首先简述下两种协议关于读取数据的区别:

1、97规约的读取数据控制码为0x01,07规约为0x11;

2、97的数据域为2个字节,07的数据域为4个字节;

3、设备应答的控制码97为0x81,07为0x91;

相同的格式:

不超过四个的0xFE+0x68的数据包头+6个字节的电表地址+0x68+控制码+数据长度+数据域+数据(N1,N2...Nn)+校验码+0x16

所以将设备应答的数据在中断中这样解析:

void USART1_IRQHandler(void)                   
{
    u8 res;
    static u8 count,num,t;

if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//接收到数据
    {
        res =USART_ReceiveData(USART1);//;读取接收到的数据USART2->DR       
          switch(count){
            case 0: if(res==0xFE)count=0;else if(res==0x68)count++;break;//判断包头
            case 1: RS485_RX_BUF_1[t]=res;t++;if(t==6)count++;break;//将电表6个字节地址存入数组之中
            case 2: if(res==0x68)count++;break;//包头
            case 3: RS485_RX_BUF_1[t]=res;count++;t++;break;//将响应的控制码放入数组
            case 4: num=res;RS485_RX_BUF_1[t]=num;t++;count++;break;//将数据长度放入数组
            case 5: RS485_RX_BUF_1[t]=res;t++;if((num+8)==t)count++;break;//数据存入数组
            case 6: count++; break;//校验码位
            case 7:if(res==0x16){          //结束符  清空数组

count=0;t=0;

}  break;    
     }

}

RS485_RX_BUF_1[t]数组可以定义成全局变量,最后分析此数组里的数据即可得到关于电表的信息。主要要找到数组中的数据长度,通过数据长度判断读取数据的位置。

如果用的实时操作系统,即将数组RS485_RX_BUF_1数据发送到队列后清零(用中断的API函数发送队列)。另一个任务读取队列数据即可。

STM32对于1997与2007电表数据规约的解析相关推荐

  1. [转]适应多种智能电表通信规约的无线抄表解决方案

    Pastedfrom <http://www.cnki.com.cn/Article/CJFDTotal-DZJY200105023.htm> 摘 要:阐述了一种适应多种智能电表通信规约的 ...

  2. 【Python数据分析】数据预处理3——数据规约(含主成分分析详解、Python主要预处理函数)

    数据规约产生更小且保持完整性的新数据集,在规约后的数据集上进行分析和挖掘将提高效率 一.属性规约 属性规约通过属性合并创建新属性维数,或者通过直接删除不相关的属性来减少数据维数,从而提高数据挖掘的效率 ...

  3. 什么是数据规约,数据规约的策略都有哪些

    数据规约是指在数据处理过程中,通过对原始数据进行规范化.统一化.去重和约减等操作,使数据更加一致.统一和有意义. 数据规约的策略包括: 标准化:对数据进行统一的格式转换,使数据在不同的系统或应用中具有 ...

  4. 如何使用STM32和BLE收集SHT85传感器数据?

    简述 这是一个简单的BLE项目.现在,它常常被设计用于智能家居的中. 下面文章展示了如何使用 javascript 获取连接到 STM32 Nucleo-144 的SHT85湿度温度传感器数据. 我们 ...

  5. 数学类笔试题(四分位数、数据规约和协方差)

    1.考虑值集{12, 24, 33, 2, 4, 55, 68, 26},其四分位数极差是:(A) A 31 B 24 C 55 D 3 四分位数(Quartile),即统计学中,把所有数值由小到大排 ...

  6. STM32基于HAL工程读取DHT11数据

    STM32基于HAL工程读取DHT11数据 ✨申明:本文章仅发表在CSDN网站,任何其他网站,未注明来源,见此内容均为盗链和爬取,请多多尊重和支持原创!

  7. MJKDZ PS2手柄控制OskarBot小车(三):STM32接收无线串口模块的数据并处理

    MJKDZ PS2手柄控制OskarBot小车(三):无线串口模块接收数据并处理 [目录] 1.硬件与软件设计思路 - 1.1 硬件资源 - 1.2 STM32串口接收数据的方法 2.源代码详解 - ...

  8. 数据预处理之数据清理,数据集成,数据规约,数据变化和离散化

    目录 数据清理 数据集成 数据规约 数据的变换 1.Min-Max 规范化 [0,1]规划

  9. 数据预处理—-(数据探索、数据清理、数据集成、数据规约、数据变换)

    数据挖掘概念与技术 定义挖掘目标–>数据取样–>数据探索–>数据预处理–>挖掘建模–>模型评价 第一章.数据 挖掘的数据类型:时间序列,序列,数据流,时间空间数据,多媒体 ...

  10. STM32+MAX6675 获取4路温度数据原理图及代码

    STM32+MAX6675 获取4路温度数据原理图及代码 说明:1.片选任意IO管脚即可,低电平有效! 2.K型热电偶分别接T+,T-: 3.介于STM32只读,就只用3根线,SO,SCL,CS 见图 ...

最新文章

  1. 什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI?
  2. 《无线网络安全攻防实战》读书笔记
  3. iPhone销售额下滑12%,但AirPods和手表救了苹果
  4. 2021-01-10 Halcon初学者知识 【10】形状匹配 【二】模板的形状匹配
  5. 2021-07-03
  6. mysql 打包表在phpmyadmin提示正在使用中..
  7. MFC SendMessage()函数传递字符串
  8. 属性类:Properties
  9. java post webservice_[java.webservice] 如何通过HttpPost从服务器上获得一个sessionid
  10. android自动化框架简要剖析(一):运行原理+基本框架
  11. vue如何获取年月日_好程序员web前端教程分享Vue相关面试题
  12. Oracle学习(一)SQL基础
  13. mv强制覆盖 shell_生产力工具:shell 与 Bash 脚本
  14. SQL Server中的动态SQL
  15. 第一节:创建SpringBoot项目并运行HelloWorld
  16. OpenGL基础14:摄像机
  17. 微信小程序之实现下拉刷新效果
  18. SAP MM 增值税改革导致采购业务的变化
  19. 英文文献翻译的几款实用工具
  20. [CF1131F] Asya And Kittens

热门文章

  1. 高分一号(GF-1)影像数据下载方法
  2. Python实践3-Tenacity提高自动测试健壮性
  3. Rust的错误处理机制
  4. 飞鹅WiFi打印机配置,php调用接口
  5. Flutter Dio Post请求
  6. Java用ListArray以人名的姓氏排队
  7. 百家企业短信网关(背景及核心代码)-1-开源项目短信接口征集
  8. 【第16章】 网络安全风险评估技术原理与应用 (软考:信息安全工程师)-- 学习笔记
  9. 马哥SRE第八周课程作业
  10. python手把手安装_小白手把手搭建python开发环境