==上位机(CPU)与下位机(STM32)通讯协议==
====物理层协议====
*通过串口通讯,115200波特率,校验位无,数据位8位,停止位1位
=====帧格式表=====
{| class="wikitable sortable"
|-
! 起始位 !! 数据位 !! 校验位置 !! 结束位置
|-
|0xA5 1个字节长度||见数据位表,变长||数据位CRC16校验,2个字节长度,低位在前||0x5A 1个字节长度
|}
=====数据位表=====
{| class="wikitable sortable"
|-
! 数据来源地址 !! 目的地址 !! 帧序号 !!数据长度 !! 数据命令以及数据内容
|-
|0x01表示第一块CPU板,0x02表示第二块CPU板,0x03表示第三块CPU板;
0x81表示第一块STM32板,0x82表示第二块STM32电路板,0x83表示第二块STM32电路板,一个字节||0x01表示第一块CPU板,0x02表示第二块CPU板,0x03表示第三块CPU板;
0x81表示第一块STM32板,0x82表示第二块STM32电路板,0x83表示第二块STM32电路板;
0x80表示目的地址是广播给所有的CPU电路板,0xfe表示目的地址是所有的STM32电路板,0xff表示广播给系统中所有设备,其他地址备用,一个字节长度||帧序号,两个字节,低位在前,应答数据的帧序号与收到的帧序号相同||数据命令以及数据内容部分数据长度,两个字节,低位在前||见数据命令以及数据内容表('''是否需要回复'''是数据内容最后一个字节),变长
|}
=====数据命令以及数据内容表=====
{| class="wikitable sortable"
|-
! 命令序号(两个字节长度) !! 命令内容 !! 是否需要回复!! 备注
|-
|1,CPU读取STM32硬件版本号||无||0表示无需返回,1表示需要返回||
|-
|2,STM32回复硬件版本号||例如,"HMHD.VT.A1"||0表示无需返回||
|-
|3,CPU读取STM32软件版本号||无||0表示无需返回,1表示需要返回||
|-
|4,STM32回复软件版本号||例如,"VT.A1.1907171",||0表示无需返回||
|-
|5,STM32主动上传硬件版本||例如,"HMHD.VT.A1"||0表示无需返回,1表示需要返回||
|-
|6,CPU应答||数据正常应答0x00,错误应答0x01,一个字节长度||0表示无需返回||
|-
|7,STM32主动上传软件版本||例如,"VT.A1.1907171"||0表示无需返回,1表示需要返回||
|-
|8,CPU应答||数据正常应答0x00,错误应答0x01,一个字节长度||0表示无需返回||
|-
|9,CPU提出升级STM32代码||无||0表示无需返回,1表示需要返回||
|-
|10,STM32回复CPU提出升级STM32代码||数据正常应答0x00(STM32进入升级状态),错误应答0x01,一个字节长度||0表示无需返回||
|-
|11,CPU发送代码数据长度给STM32||4个字节长度,低位在前,低位在后||0表示无需返回,1表示需要返回||
|-
|12,STM32应答CPUX发送代码数据长度给STM32||数据正常应答0x00,错误应答0x01,一个字节长度||0表示无需返回||
|-
|13,CPU发送代码数据给STM32||见'''CPU发送代码数据给STM32数据内容表'''||0表示无需返回,1表示需要返回||
|-
|14,STM32应答CPU发送代码数据给STM32||'''STM32应答CPU发送代码数据给STM32表'''||0表示无需返回||
|-
|15,CPU发送数据升级完毕||无||0表示无需返回,1表示需要返回||
|-
|16,STM32应答CPU发送数据升级完毕||数据正常应答0x00,错误应答0x01,一个字节长度||0表示无需返回||
|-
|17,CPU发送强行结束升级命令||无 ||0表示无需返回,1表示需要返回||
|-
|18,STM32应答|| 数据正常应答0x00,错误应答0x01,一个字节长度||0表示无需返回||
|-
|19,STM32主动上报升级完成命令||升级是否成功标志,1个字节(0,STM32升级成功,1,STM32升级未成功),例如,"VT.A1.1907172"||1表示需返回||
|-
|20,CPU应答升级||无||0表示无需返回||
|}
=====数据命令以及数据内容表,与产气相关命令=====
{| class="wikitable sortable"
|-
! 命令序号(两个字节长度) !! 命令内容 !! 是否需要回复!! 备注
|-
|129,STM32上报系统状态切换||上一个系统状态(1个字节,'''3,空闲状态;4准备产气状态,5产气状态,6产气2小时补水前15S延时状态,7产气2小时15S后补水状态,8产气暂停状态,9电机找位置状态),当前系统状态(1个字节),切换成功与否(1个字节,0切换成功,1切换失败),当前'''系统状态运行标识码'''(8个字节) ||0表示无需返回,1表示需要返回 ||
|-
|130,CPU应答|| 数据正常应答0x00,错误应答0x01||0表示无需返回||
|-
|131,CPU下达开始产气命令|| 产气时间,4个字节,单位秒,低位在前;产气量,1个字节:0,低,1:中,2:高,其他无效;雾化量(1个字节):0 - 6,其他无效;电解电源极性(1个字节):0正常极性,1反转极性; 是否是睡眠模式,1个字节,0不是睡眠,1是睡眠模式;是否检查开始产气湿化杯超高,一个字节,0不检查,1检查||0表示无需返回,1表示需要返回 ||
|-
|132,STM32应答|| 数据正常,且满足产气条件应答0x00,其他应答0x01,一个字节长度。当前'''系统状态运行标识码'''(8个字节)||0表示无需返回||
|-
|133,CPU发送停止产气命令|| 无 ||0表示无需返回,1表示需要返回 ||
|-
|134,STM32应答|| 数据正常应答0x00,错误应答0x01,一个字节长度。(在产气准备状态下,非产气状态,产气补水状态下,产气暂停状态下,返回0x00)||0表示无需返回||
|-
|135,CPU发送暂停产气命令|| 无 ||0表示无需返回,1表示需要返回 ||
|-
|136,STM32应答|| 数据正常应答0x00,错误应答0x01,一个字节长度。(在非产气准备状态下,非产气状态,非产气补水状态下,返回0x01)||0表示无需返回||
|-
|137,CPU发送恢复产气命令|| 产气量,1个字节:0,低,1:中,2:高,其他无效;雾化量,一个字节:0 - 6,其他无效; ||0表示无需返回,1表示需要返回 ||
|-
|138,STM32应答|| 数据正常应答0x00,错误应答0x01,一个字节长度。(在非产气暂停状态下,返回ox01)||0表示无需返回||
|-
|139,产气过程中,CPU发送雾化量控制命令|| 1个字节,0 - 6 ||0表示无需返回,1表示需要返回 ||
|-
|140,STM32应答|| 数据正常应答0x00,错误应答0x01,一个字节长度。(在产气准备状态下,非产气状态,产气补水状态下,产气暂停状态下,返回0x01)||0表示无需返回||
|-
|141,准备产气状态下,STM32上报|| 产气设置时间(4个字节,低位在前),产气运行时间(4个字节,低位在前),准备产气运行时间(4个字节,低位在前), '''系统状态运行标识码''',8个字节 ||0表示无需返回,1表示需要返回 ||1S定时上报一次
|-
|142,CPU应答|| 数据正常应答0x00,错误应答0x01,一个字节长度。||0表示无需返回||
|-
|143,准备产气状态下,STM32上报准备产气超时|| 产气设置时间(4个字节,低位在前),产气运行时间(4个字节,低位在前),准备产气运行时间(4个字节,低位在前), '''系统状态运行标识码''',8个字节 ||0表示无需返回,1表示需要返回 ||
|-
|144,CPU应答|| 数据正常应答0x00,错误应答0x01,一个字节长度。||0表示无需返回||
|-
|145,产气状态下,STM32上报产气过程|| 产气设置时间(4个字节,低位在前),产气运行时间(4个字节,低位在前),设置产气挡位(1个字节,0,低,1:中,2:高),雾化量(1个字节):0 - 6,其他无效, '''系统状态运行标识码''',8个字节 ||0表示无需返回,1表示需要返回 ||1S定时上报一次
|-
|146,CPU应答|| 数据正常应答0x00,错误应答0x01,一个字节长度。||0表示无需返回||
|-
|147,产气状态下,STM32上报产气时间到|| 产气设置时间(4个字节,低位在前),产气运行时间(4个字节,低位在前),设置产气挡位(1个字节,0,低,1:中,2:高),雾化量(1个字节):0 - 6,其他无效, '''系统状态运行标识码''',8个字节 ||0表示无需返回,1表示需要返回 ||1S定时上报一次
|-
|148,CPU应答|| 数据正常应答0x00,错误应答0x01,一个字节长度。||0表示无需返回||
|-
|149,产气中补水15S等待状态下,STM32上报|| 产气设置时间(4个字节,低位在前),产气运行时间(4个字节,低位在前),等待运行时间(4个字节,低位在前), '''系统状态运行标识码''',8个字节 ||0表示无需返回,1表示需要返回 ||1S定时上报一次
|-
|150,CPU应答|| 数据正常应答0x00,错误应答0x01,一个字节长度。||0表示无需返回||
|-
|151,产气中补水15S等待超时,进入正式补水状态|| 产气设置时间(4个字节,低位在前),产气运行时间(4个字节,低位在前),等待运行时间(4个字节,低位在前), '''系统状态运行标识码''',8个字节 ||0表示无需返回,1表示需要返回 ||1S定时上报一次
|-
|152,CPU应答|| 数据正常应答0x00,错误应答0x01,一个字节长度。||0表示无需返回||
|-
|153,产气中补水状态下,STM32上报|| 产气设置时间(4个字节,低位在前),产气运行时间(4个字节,低位在前),补水运行时间(4个字节,低位在前), '''系统状态运行标识码''',8个字节 ||0表示无需返回,1表示需要返回 ||1S定时上报一次
|-
|154,CPU应答|| 数据正常应答0x00,错误应答0x01,一个字节长度。||0表示无需返回||
|-
|155,产气中补水状态下,补水超时|| 产气设置时间(4个字节,低位在前),产气运行时间(4个字节,低位在前),补水运行时间(4个字节,低位在前), '''系统状态运行标识码''',8个字节 ||0表示无需返回,1表示需要返回 ||
|-
|156,CPU应答|| 数据正常应答0x00,错误应答0x01,一个字节长度。||0表示无需返回||
|-
|157,准备产气时,水箱水位正常,进入真正产气状态|| '''系统状态运行标识码''',8个字节 ||0表示无需返回,1表示需要返回 ||
|-
|158,CPU应答|| 数据正常应答0x00,错误应答0x01,一个字节长度。||0表示无需返回||
|-
|159,2小时加水时,水箱水位正常,进入产气状态|| '''系统状态运行标识码''',8个字节 ||0表示无需返回,1表示需要返回 ||
|-
|160,CPU应答|| 数据正常应答0x00,错误应答0x01,一个字节长度。||0表示无需返回||
|-
|161,CPU产气过程睡眠与否设置|| 一个字节,0标识非睡眠模式;1标识睡眠模式;其他数据无效 ||0表示无需返回,1表示需要返回 ||
|-
|162,STM32应答|| 数据正常应答0x00,错误应答0x01,一个字节长度。||0表示无需返回||
|-
|255,CPU下发关机命令|| 无 ||1表示需要应当||
|-
|256,STM32应答|| 数据正常,0,数据错误,1 || 0表示不需要返回 ||'
|-
|}
=====系统状态运行标识码=====
{| class="wikitable sortable"
|-
! 状态数据!! bit0 !! bit1 !! bit2 !! bit3 !! bit4 !! bit5 !! bit6 !! bit7 !!说明 !! 备注
|-
|数据1,1个字节|| 水箱低于低水位,1||水箱低于高水位1||湿化杯低于低水位1||湿化杯低于中水位1 || 湿化杯低于高水位1 || 湿化杯高于超高水位1 || 氢水杯低于低1 ||氢水杯高于高 || ||
|-
|数据2,1个字节|| 雾化器低于低1 ||雾化器高于高1 || 备用||备用||水箱温度过高于75||水箱平均温度过高于70 || 雾化器温度过高|| 备用 || ||
|-
|数据3,1个字节|| 备用||氢气浓度超标1||风扇1故障1||风扇2故障1 || 电源IIC故障|| 电源未接地 || 电源过温 ||电源过压 || ||
|-
|数据4,1个字节|| 电源欠压||电源过流||减速电机位置出错||氢水杯不在线 ||灯板不在线|| 备用 || 备用 ||备用|| ||
|-
|数据5,1个字节|| 备用||备用||备用 || 备用 || 备用 || 备用 ||备用 || 备用 || ||
|-
|数据6,1个字节|| 备用 ||备用 || 备用||备用||备用||备用 || 备用|| 备用 || ||
|-
|数据7,1个字节|| 备用||备用||备用||备用 || 备用|| 备用 || 备用 ||备用 || ||
|-
|数据8,1个字节|| 备用||备用||备用||备用 || 备用|| 备用 || 备用 ||系统状态出错 || ||
|}
=====数据命令以及数据内容表,非产气相关命令=====
{| class="wikitable sortable"
|-
! 命令序号(两个字节长度) !! 命令内容 !! 是否需要回复!! 备注
|-
|257,STM32上报状态||见'''上报系统状态表''' ||0表示无需返回,1表示需要返回 ||定时上报
|-
|258,CPU应答|| 数据正常应答0x00,错误应答0x01,一个字节长度||0表示无需返回||
|-
|259,STM32上报触摸按键状态||1,按键按下;2,按键长按;3,按键重发,其他无效 ||0表示无需返回,1表示需要返回 ||
|-
|260,CPU应答|| 数据正常应答0x00,错误应答0x01,一个字节长度||0表示无需返回||
|-
|}
=====CPU设置参数相关命令=====
{| class="wikitable sortable"
|-
! 命令序号(两个字节长度) !! 命令内容 !! 是否需要回复!! 备注
|-
|385,CPU设置准备产气超时时长||时长(4个字节,低位在前),单位:秒 ||0表示无需返回,1表示需要返回 ||
|-
|386,STM32应答|| 数据正常应答0x00,错误应答0x01,一个字节长度||0表示无需返回||
|-
|387,CPU设置准备补水等待延时超时时长||时长(4个字节,低位在前),单位:秒 ||0表示无需返回,1表示需要返回 ||
|-
|388,STM32应答|| 数据正常应答0x00,错误应答0x01,一个字节长度||0表示无需返回||
|-
|389,CPU设置补水超时时长||时长(4个字节,低位在前),单位:秒 ||0表示无需返回,1表示需要返回 ||
|-
|390,STM32应答|| 数据正常应答0x00,错误应答0x01,一个字节长度||0表示无需返回||
|-
|391,CPU设置最高保护温度阀值||实际温度值+30,一个字节长度 ||0表示无需返回,1表示需要返回 ||
|-
|392,STM32应答|| 数据正常应答0x00,错误应答0x01,一个字节长度||0表示无需返回||
|-
|393,CPU设置平均保护温度阀值||实际温度值+30,一个字节长度 ||0表示无需返回,1表示需要返回 ||
|-
|394,STM32应答|| 数据正常应答0x00,错误应答0x01,一个字节长度||0表示无需返回||
|-
|395,CPU设置雾化器保护温度阀值||实际温度值+30,一个字节长度 ||0表示无需返回,1表示需要返回 ||
|-
|396,STM32应答|| 数据正常应答0x00,错误应答0x01,一个字节长度||0表示无需返回||
|-
|397,CPU设置雾化器极性||一个字节长度,0真极性,其他反极性 ||0表示无需返回,1表示需要返回 ||
|-
|398,STM32应答|| 数据正常应答0x00,错误应答0x01,一个字节长度||0表示无需返回||
|-
|}
=====软件测试时相关命令=====
{| class="wikitable sortable"
|-
! 命令序号(两个字节长度) !! 命令内容 !! 是否需要回复!! 备注
|-
|513,CPU发送软件控制指令||1个字节。bit0:1,开启软件控制,0,关闭;bit1:1,开启ADC值软件输入,1,关闭;bit2:1,开启温度值,电流值模拟输入,0,关闭;bit3:1,开启IO输入状态模拟,0关闭;bit4:1,开启IO输出状态模拟,0关闭;其他备用 ||0表示无需返回,1表示需要返回 ||
|-
|514,STM32应答|| 数据正常应答0x00,错误应答0x01,一个字节长度。||0表示无需返回||
|-
|515,CPU发送软件ADC值|| 见'''软件AD值控制表'''(只有在开启软件控制且开启ADC值软件输入时候,才可以控制) ||0表示无需返回,1表示需要返回 ||
|-
|516,STM32应答|| 数据正常应答0x00,错误应答0x01,一个字节长度。||0表示无需返回||
|-
|517,CPU发送温度值,电流值模拟输入|| 见'''温度值,电流值模拟输入控制表''' ||0表示无需返回,1表示需要返回 ||
|-
|518,STM32应答|| 数据正常应答0x00,错误应答0x01,一个字节长度。||0表示无需返回||
|-
|519,CPU发送开启IO输入状态模拟|| 见'''IO输入状态模拟控制表''' ||0表示无需返回,1表示需要返回 ||
|-
|520,STM32应答|| 数据正常应答0x00,错误应答0x01,一个字节长度。||0表示无需返回||
|-
|}
=====STM32上报系统状态表=====
{| class="wikitable sortable"
|-
! 状态数据!! 说明 !! 备注
|-
|数据1,1字节(输入)||bit0:电源DC OK信号,0,DC OK;bit1:浮球水位高信号,0,表示水位到高水位处,1表示水位未到;bit2:浮球水位低信号,1,表示水位到低水位处,0表示水位未到;bit3:湿化杯1水位超高信号,1,表示水位到超高水位处;bit4:湿化杯1水位高信号,1,表示水位到高水位处;bit5:湿化杯1水位中信号,1,表示水位到中水位处;bit6:湿化杯1水位低信号,1,表示水位到低水位处;bit7:湿化杯2水位高信号,1,表示水位到高水位处;||
|-
|数据2,1字节(输入)||bit0:湿化杯2水位中信号,1,表示水位到中水位处;bit1:湿化杯2水位低信号,1,表示水位到低水位处;bit2:产气通道不经过阳台;bit3:产气通道经过阳台;bit4:雾化器水位高信号,1,表示水位到高水位处;bit5:雾化器水位低信号,1,表示水位到低水位处,0表示水位未到;bit6:雾化器反馈信号;bit7:CPU输出到STM32 GPIO信号;||
|-
|数据3,1字节(输入)||bit0:按键信号,0表示按键按下,其他备用||
|-
|数据4,1字节(输入)||备用||
|-
|数据5,1字节(输出)||bit0:电源CH1 极性信号。(0正常极性,1极性反转);bit1:电源CH1开关信号,1打开CH1电源;bit2:电源CH2开关信号,1打开CH2电源;bit3:散热器风扇1打开信号,1打开风扇;bit4:散热器风扇2打开信号,1打开风扇;bit5:LED控制信号0,1打开LED灯;bit6:MU420雾化器打开信号,1打开MU420雾化器;bit7:雾化器温度电源信号,1打开电源;||
|-
|数据6,1字节(输出)||bit0:循环水泵打开信号,1打开循环水泵;bit1:真空泵打开信号,1打开真空泵;bit2:电磁阀1,1打开电磁阀1;bit3:电磁阀2,1打开电磁阀2;bit4:485GPIO状态;;bit5:LED 绿色GPIO;bit6:输出到CPU的GPIO状态;bit7:CPU电源开启电源信号,1打开电源||
|-
|数据7,1字节(输出)||bit0:雾化器风扇控制信号,1打开雾化器风扇;bit1:正压机GPIO输出信号;其他备份||
|-
|数据8,1字节(输出)||备用||
|-
|数据9,10,2个字节||备用||
|-
|数据11,12,2个字节||水温 ADC值,低位在前||
|-
|数据13,14,2个字节||雾化器电流采样 ADC值,低位在前||
|-
|数据15,16,2个字节||雾化器自带温度传感器 ADC值,低位在前||
|-
|数据17,18,2个字节||马达电流采样 ADC值,低位在前||
|-
|数据19,20,2个字节||雾化器水位计传感器 ADC值,低位在前||
|-
|数据21,22,2个字节||备用||
|-
|数据23,24,2个字节||备用||
|-
|数据25,26,2个字节||备用||
|-
|数据27,28,2个字节||水温温度值。数据为实际温度值+30||
|-
|数据29,30,2个字节||备用||
|-
|数据31,32,2个字节||雾化器自带温度传感器温度值。数据为实际温度值+30||
|-
|数据33,34,2个字节||备用||
|-
|数据35,36,2个字节||雾化器水位计传感器温度值。数据为实际温度值+30||
|-
|数据37,38,2个字节||备用||
|-
|数据39,40,2个字节||备用||
|-
|数据41,1个字节||电源是否在线标志,0电源在线,1电源不在线,2电源通讯错误||
|-
|数据42,1个字节||电源i2c读取状态,见电源规格书||
|-
|数据43,1个字节||bit0:1,ch2 on,0,ch2 off;bit1:1,ch1 on,0,ch1 off;bit2:1,ch1 反向;bit3:0,DC ok;其他备用||
|-
|数据44,1个字节||备用||
|-
|数据45,46,2个字节||实际电流||
|-
|数据47,48,2个字节||设置电流||
|-
|数据49,50,2个字节||电源温度||
|-
|数据51,52,2个字节||输出电压||
|-
|数据53,54,2个字节||风扇1,PWM||
|-
|数据55,56,2个字节||风扇1,速度||
|-
|数据57,1个字节||风扇1,是否打开,1打开||
|-
|数据58,1个字节||风扇1,是否异常,1异常||
|-
|数据59,60,2个字节||风扇2,PWM||
|-
|数据61,62,2个字节||风扇2,速度||
|-
|数据63,1个字节||风扇2,是否打开,1打开||
|-
|数据64,1个字节||风扇2,是否异常,1异常||
|-
|数据65 -- 72 96,8个字节||系统状态运行标识码||
|-
|数据73,74,2个字节,氢气浓度||2个字节,氢气浓度x10,比如101,表示氢气浓度位10.1%||
|-
|数据75,76,2个字节,环境温度||2个字节,正常温度值加30,比如数值位28,表示温度位-2摄氏度||
|-
|数据77,78,2个字节,环境亮度||2个字节||
|-
|数据79,80个字节,LED灯板状态0||2个字节||bit0:LED灯状态,1打开LED灯;bit1:红色LED灯状态,1打开红色LED灯(氢气超标打开);bit2:氢水杯低水位,1到达氢水杯低水位;bit3:氢水杯高水位,1到达氢水杯高水位;bit4:氢水杯是否在线,1,在线;bit6:led灯板是否在线,1在线;其他备用
|-
|数据第81个字节||当前系统状态,1个字节,3,空闲状态;4准备产气状态,5产气状态,6产气2小时补水前15S延时状态,7产气2小时15S后补水状态,8产气暂停状态,9电机找位置状态||
|-
|数据82 -- 96,15个字节||备用||
|-
|}
=====IO输入状态模拟控制表=====
{| class="wikitable sortable"
|-
! 状态数据!! 说明 !! 备注
|-
|数据1,1个字节||bit0:电源DC OK信号,0,DC OK;bit1:浮球水位高信号,0,表示水位到高水位处,1表示水位未到;bit2:浮球水位低信号,0,表示水位到低水位处,1表示水位未到;bit3:湿化杯1水位超高信号,1,表示水位到超高水位处;bit4:湿化杯1水位高信号,1,表示水位到高水位处;bit5:湿化杯1水位中信号,1,表示水位到中水位处;bit6:湿化杯1水位中信号,1,表示水位到低水位处;bit7:湿化杯2水位高信号,1,表示水位到高水位处;||
|-
|数据2,1个字节||bit0:湿化杯2水位中信号,1,表示水位到中水位处;bit1:湿化杯2水位中低信号,1,表示水位到低水位处;bit2:清水杯在线信号1;bit3:清水杯在线信号2;bit4:雾化器水位高信号,1,表示水位到高水位处;bit5:雾化器水位低信号,1,表示水位到低水位处,0表示水位未到;bit6:雾化器反馈信号;bit7:CPU输出到STM32 GPIO信号;||
|-
|数据3,1个字节||bit0:按键信号,0表示按键按下,其他备用||
|-
|数据4,1个字节||备用||
|}
====='''温度值,电流值模拟输入控制表'''=====
{| class="wikitable sortable"
|-
! 状态数据!! 说明 !! 备注
|-
|数据1,2,2个字节||备用||
|-
|数据3,4,2个字节||水温温度值,低位在前||
|-
|数据5,6,2个字节||雾化器电流采样 ADC值,低位在前||
|-
|数据7,8,2个字节||雾化器自带温度传感器 温度值,低位在前||
|-
|数据9,10,2个字节||电流采样 电流值,低位在前||
|-
|数据11,12,2个字节||雾化器水位计传感器 温度值,低位在前||
|-
|数据13,14,2个字节||备用||
|-
|数据15,16,2个字节||备用||
|}
====='''软件AD值控制表'''=====
{| class="wikitable sortable"
|-
! 状态数据!! 说明 !! 备注
|-
|数据1,2,2个字节||备用||
|-
|数据3,4,2个字节||水温 ADC值,低位在前||
|-
|数据5,6,2个字节||备用||
|-
|数据7,8,2个字节||雾化器自带温度传感器 ADC值,低位在前||
|-
|数据9,10,2个字节||电流采样 ADC值,低位在前||
|-
|数据11,12,2个字节||雾化器水位计传感器 ADC值,低位在前||
|-
|数据13,14,2个字节||备用||
|-
|数据15,16,2个字节||备用||
|}
=====335X控制命令表=====
{| class="wikitable sortable"
|-
! 控制命令 !! 说明
|-
|0xXX,1个字节||bit0:电源DC OK信号,0,DC OK;bit1:雾化器水位高信号,0,表示水位到高水位处,1表示水位未到;bit2:雾化器水位低信号,0,表示水位到低水位处,1表示水位未到;bit3:湿化杯水位超高信号,0,表示水位到超高水位处,1表示水位未到;bit4:湿化杯水位高信号,0,表示水位到高水位处,1表示水位未到;bit5:湿化杯水位中信号,0,表示水位到中水位处,1表示水位未到;bit6:湿化杯水位中低信号,0,表示水位到低水位处,1表示水位未到;bit7:注水口盖到位信号,0,表示注水口盖到位;
|}
=====335X发送代码数据给STM32数据内容表=====
{| class="wikitable sortable"
|-
! 代码包序号 !! 代码数据 !! 校验
|-
|0x0001,两个字节,低位在前,表示第一包数据,依次递增||代码数据,256个字节,不够256字节补充0xff||代码数据位(256个字节)CRC16校验,两个字节长度,低位在前
|}
=====STM32应答335X发送代码数据给STM32表=====
{| class="wikitable sortable"
|-
! 代码包序号 !! 应答码
|-
|0x0001,两个字节,低位在前,表示第一包数据,依次递增||0x00表示数据正常,0x01表示错误
|}
==上位机和测试底板STM32通讯协议==
*在工作状态下,每1秒STM32将采集到的数据发送给上位机,上位机无需应答;
*数据传输格式采用大端模式;
====物理层协议====
*通过串口通讯,9600波特率,校验位无,数据位8位,停止位1位
=====帧格式表=====
{| class="wikitable sortable"
|-
! 起始位 !! 数据位 !! 校验位置 !! 结束位置
|-
|0xA5,一个字节长度||见数据位表,变长||数据位异或校验,一个字节长度||0x5A,一个字节长度
|}
=====数据位表=====
{| class="wikitable sortable"
|-
! 数据来源地址 !! 目的地址 !! 数据长度 !! 数据命令以及数据内容
|-
|0xa0表示上位机,0xb0表示惠美7寸A8版本平板,0xb1表示惠美7寸A8版本测试底板,如测试底板发送给上位机则来源地址为0xb1,目的地址为0xa0||0xa0表示上位机,0xb0表示惠美7寸A8版本平板,0xb1表示惠美7寸A8版本测试底板,其他地址备用,一个字节长度||数据命令以及数据内容部分数据长度,两个字节,低位在前||见数据命令以及数据内容表,变长
|}
{| class="wikitable sortable"
|-
! 命令序号 !! 命令内容 !! 是否需要回复!! 备注
|-
|101,生产测试指令, 上位机->测试底板STM32||见'''生产测试数据命令以及数据内容表'''||0表示无需返回,1表示需要返回||
|-
|102,生产测试指令应答||数据正常应答0x00,错误应答0x01,一个字节长度||0表示无需返回||
|-
|103,测试版主动上报测试版状态||见'''生产测试数据命令以及数据内容表'''||0表示无需返回,1表示需要返回||
|}
=====生产测试数据命令以及数据内容表=====
{| class="wikitable sortable"
|-
! 标示编号 !! 命令字节 !! 测试项数量!! 测试项!!保留字!!测试项附加数据段长度!!数据段
|-
|2个字节,上位机发送,STM32响应和主动上传数据时都需原样复制此编号||1个字节,详见'''命令字列表'''||1个字节||1个字节,详见'''测试项列表'''||1个字节||1个字节||可变长,测试项如只是响应,则0标示OK,1标示执行Fail
|}
=====生产测试命令字列表=====
{| class="wikitable sortable"
|-
! 命令字列表!! 说明
|-
|1||设置指令, 上位机->生产测试底板STM32
|-
|2||设置指令响应, 生产测试底板STM32->上位机
|-
|3||表示测试底板STM32主动上传数据
|}
=====生产测试项列表=====
{| class="wikitable sortable"
|-
! 测试项列表 !! 说明
|-
|0x50|| 设置HIGH状态,全部输出口设置,状态参见设置矩阵
|-
|0x51|| 设置LOW状态,全部输出口设置,状态参见设置矩阵
|}
=====STM32上报接口PIN脚定义=====
{| class="wikitable sortable"
|-
! 接口PIN脚定义 !! 说明
J01_01_NC=1,
J01_02_TXD,
J01_03_RXD,
J01_04_GND,
J02_01_SPK_P,
J02_02_SPK_N,
J08_01_24VP,
J08_02_24VN,
J09_01_POW_P_GPIO1_16_OUT,
J09_02_POW_N,
J09_03_CONT_PA5_DAC_OUT,
J09_04_NC,
J09_05_TMP_PA3_ADC_IN,
J09_06_TMP_POW_P_3V3,
J10_01_POW_3V3,
J10_02_LEVEL_H_PC11_IN,
J10_03_LEVEL_L_PB2_IN,
J10_04_GND,
J10_05_TMP_PC5_ADC_IN,
J10_06_TMP_POW_P_3V3_PB11,
J13_01_24VP_GPIO1_24_OUT,
J13_02_24VN,
J15_01_PC1,
J15_02_NC,
J15_03_PC0_OUT,
J15_04_NC,
J15_05_POW_5V,
J15_06_NC,
J15_07_GND,
J15_08_GPIO1_23_IN,
J15_09_GND,
J15_10_NC,
J15_11_LEVEL_H_PC12_IN,
J15_12_LEVEL_L_PB9_IN,
J16_01_24VP_GPIO1_25_OUT,
J16_02_24VN,
J17_01_24VP_GPIO1_26_OUT,
J17_02_24VN,
J19_01_24VP_GPIO3_18_OUT,
J19_02_24VN,
J20_01_USB_VBUS,
J20_02_DM,
J20_03_DP,
J20_04_GND,
J21_01_GND,
J21_02_GND,
J21_03_5V,
J21_04_5V,
J21_05_GND,
J21_06_GPIO1_19_OUT,
J21_07_GPIO1_20_OUT,
J21_08_PB1_OUT,
J21_09_NC,
J21_10_NC,
J21_11_NC,
J21_12_NC,
J21_13_GPIO2_1_IN,
J21_14_NC,
J21_15_NC,
J21_16_NC,
J21_17_SCL,
J21_18_SDA,
J25_01_24VP_PC10_OUT,
J25_02_24VN,
J26_01_MP, PA0_ADC_IN,
J26_02_MM,
J26_03_FEEDBACK,
J34_01_GND,
J34_02_NC,
J34_03_AIN_PA2_ADC_IN,
J34_04_POW_5V,
J41_01_FAN_N,
J41_02_24VP_GPIO0_20_OUT,
J41_03_FAN_FEEDBACK_PB10_PWM_IN,
J41_04_FAN_CONT_PA8_PWM_OUT,
J42_01_FAN_N,
J42_02_24VP_GPIO0_7_OUT,
J42_03_FAN_FEEDBACK_PC9_PWM_IN,
J42_04_FAN_CONT_PC8_PWM_OUT,
J45_01_LEVEL_H_GPIO1_21_IN,
J45_02_GND,
J45_03_LEVEL_L_GPIO1_22_IN,
J45_04_GND,
J45_05_TMP_PA1_ADC_IN,
J45_06_POW_3V3,
J46_01_POW_3V3,
J46_02_PA6_IN,
J46_03_SIGNAL,
J46_04_GND,
J47_01_POW_5V,
J47_02_IO_PC4_IN,
J47_03_GND,
J49_01_POW_5V,
J49_02_LEVEL_SH_PC2_IN,
J49_03_LEVEL_H_PC3_IN,
J49_04_LEVEL_M_PC6_IN,
J49_05_LEVEL_L_PC7_IN,
J49_06_GND,
UNKOWN,
|}
=======CRC校验算法=======
'''#'''define CRC1(crc,byte) (((crc) >> 8 ) ^ tabel[((crc) ^ (unsigned int) (byte)) & 0XFF])
CPU_INT16U const tabel[256]={
0X0000, 0XC0C1, 0XC181, 0X0140, 0XC301, 0X03C0, 0X0280, 0XC241,
0XC601, 0X06C0, 0X0780, 0XC741, 0X0500, 0XC5C1, 0XC481, 0X0440,
0XCC01, 0X0CC0, 0X0D80, 0XCD41, 0X0F00, 0XCFC1, 0XCE81, 0X0E40,
0X0A00, 0XCAC1, 0XCB81, 0X0B40, 0XC901, 0X09C0, 0X0880, 0XC841,
0XD801, 0X18C0, 0X1980, 0XD941, 0X1B00, 0XDBC1, 0XDA81, 0X1A40,
0X1E00, 0XDEC1, 0XDF81, 0X1F40, 0XDD01, 0X1DC0, 0X1C80, 0XDC41,
0X1400, 0XD4C1, 0XD581, 0X1540, 0XD701, 0X17C0, 0X1680, 0XD641,
0XD201, 0X12C0, 0X1380, 0XD341, 0X1100, 0XD1C1, 0XD081, 0X1040,
0XF001, 0X30C0, 0X3180, 0XF141, 0X3300, 0XF3C1, 0XF281, 0X3240,
0X3600, 0XF6C1, 0XF781, 0X3740, 0XF501, 0X35C0, 0X3480, 0XF441,
0X3C00, 0XFCC1, 0XFD81, 0X3D40, 0XFF01, 0X3FC0, 0X3E80, 0XFE41,
0XFA01, 0X3AC0, 0X3B80, 0XFB41, 0X3900, 0XF9C1, 0XF881, 0X3840,
0X2800, 0XE8C1, 0XE981, 0X2940, 0XEB01, 0X2BC0, 0X2A80, 0XEA41,
0XEE01, 0X2EC0, 0X2F80, 0XEF41, 0X2D00, 0XEDC1, 0XEC81, 0X2C40,
0XE401, 0X24C0, 0X2580, 0XE541, 0X2700, 0XE7C1, 0XE681, 0X2640,
0X2200, 0XE2C1, 0XE381, 0X2340, 0XE101, 0X21C0, 0X2080, 0XE041,
0XA001, 0X60C0, 0X6180, 0XA141, 0X6300, 0XA3C1, 0XA281, 0X6240,
0X6600, 0XA6C1, 0XA781, 0X6740, 0XA501, 0X65C0, 0X6480, 0XA441,
0X6C00, 0XACC1, 0XAD81, 0X6D40, 0XAF01, 0X6FC0, 0X6E80, 0XAE41,
0XAA01, 0X6AC0, 0X6B80, 0XAB41, 0X6900, 0XA9C1, 0XA881, 0X6840,
0X7800, 0XB8C1, 0XB981, 0X7940, 0XBB01, 0X7BC0, 0X7A80, 0XBA41,
0XBE01, 0X7EC0, 0X7F80, 0XBF41, 0X7D00, 0XBDC1, 0XBC81, 0X7C40,
0XB401, 0X74C0, 0X7580, 0XB541, 0X7700, 0XB7C1, 0XB681, 0X7640,
0X7200, 0XB2C1, 0XB381, 0X7340, 0XB101, 0X71C0, 0X7080, 0XB041,
0X5000, 0X90C1, 0X9181, 0X5140, 0X9301, 0X53C0, 0X5280, 0X9241,
0X9601, 0X56C0, 0X5780, 0X9741, 0X5500, 0X95C1, 0X9481, 0X5440,
0X9C01, 0X5CC0, 0X5D80, 0X9D41, 0X5F00, 0X9FC1, 0X9E81, 0X5E40,
0X5A00, 0X9AC1, 0X9B81, 0X5B40, 0X9901, 0X59C0, 0X5880, 0X9841,
0X8801, 0X48C0, 0X4980, 0X8941, 0X4B00, 0X8BC1, 0X8A81, 0X4A40,
0X4E00, 0X8EC1, 0X8F81, 0X4F40, 0X8D01, 0X4DC0, 0X4C80, 0X8C41,
0X4400, 0X84C1, 0X8581, 0X4540, 0X8701, 0X47C0, 0X4680, 0X8641,
0X8201, 0X42C0, 0X4380, 0X8341, 0X4100, 0X81C1, 0X8081, 0X4040
};
static CPU_INT16U CalcCRC(CPU_INT08S *data, CPU_INT32S size)
{
CPU_INT32S i;
CPU_INT16U crc = 0;
for (i = 0; i < size; i++)
{
crc = CRC1(crc, data[i]);
}
return crc;
}
=====说明=====
*
*
*
*
*
*
*
*
*
*