STM32中定义基地址,modbus协议中的寄存器地址作为偏移地址,基地址偏移量目标数据地址。然后通过内存拷贝将结构体拷贝到发送缓冲区。STM32发送格式为小端模式,昆仑通态触摸屏的驱动中设置对应的解析格式即可自动解析出单片机发来的数据。采用DMA方式发送,可减少单片机CPU的占用,提高效率减少卡顿 名称:voidHMIMsgCheck() 功能:RFID串口命令解析 输入: 返回: 说明: voidHMIMsgCheck(UARTHandleTypeDefhuart){RFIDUARTMsgCheckRFID串口信息解析 uint8tstationIDhuartpRxBuffPtr〔0〕; uint8tCMDhuartpRxBuffPtr〔1〕; uint16toffset((huartpRxBuffPtr〔2〕)8huartpRxBuffPtr〔3〕)2; uint16tdatalen((huartpRxBuffPtr〔4〕)8huartpRxBuffPtr〔5〕)2; if(CMD0x03){ 读程序参数地址2500以下是程序参数,地址2500以上是实时参数(实时参数无法掉电保存) if(offset5000){ dataPackage(stationID,CMD,(void)((u32)Pdata〔offsetsizeof(Pdatat)1〕),datalen); }else{读实时数据 if(offset5000sizeof(Rdatat)2) dataPackage(stationID,CMD,(void)((u32)RDATABASEADDRoffset5000),datalen); } } 写入参数 if(CMD0x06){ dataSet(huartpRxBuffPtr,offset,2); } } 功能:数据打包并发送 输入:data:Rdata或P1data、P2data。。。;dataLen:结构体长度 voiddataPackage(uint8tstationID,uint8tCMD,voiddata,uint8tdataLen){ uint8tSendData〔2048〕{0}; SendData〔0〕stationID; SendData〔1〕CMD; SendData〔2〕dataL memcpy(SendData〔3〕,data,dataLen); uint16tcrcCRC16(SendData,dataLen3); SendData〔dataLen3〕 SendData〔dataLen4〕crc8; DMAUSART1TxData(SendData,dataLen5); } 名称:voiddataSet(uint8tdata,uint16toffset,uint16tdataLen) 功能:参数设置 输入: 返回: 说明: voiddataSet(uint8tdata,uint16toffset,uint16tdataLen){ u32DST0; if(offset5000){ DST(u32)Pdata〔offsetsizeof(Pdatat)1〕offset(offsetsizeof(Pdatat))sizeof(Pdatat);这里的offset的baseAddr是以第一个程序参数为基准 memcpy((void)DST,data〔4〕,2); }else{ if(offset5080){实时数据中的浮点数不能修改 }else{整数 DST(u32)(Rdata)offset5000;这里的offset的baseAddr是以第一个程序参数为基准 memcpy((void)DST,data〔4〕,2); } } DMAUSART1TxData(data,8); }