对于IAP项目中如何接收上位机分包

发布时间:2026/5/21 13:14:09

对于IAP项目中如何接收上位机分包 最近在做IAP项目被他折磨的欲仙欲死一开始也不知道如何将一个文件进行分包然后让单片机进行接收分包我现在是通过上位机的串口进行发送数据包我这里是用自己规定的协议栈包头2字节命令2字节2字节总长度N字节数据区4字节保留2字节crc16校验1字节包尾下面是代码部分//串口接收数据uint8_t ch;//接收缓冲区uint8_t data[256];static uint16_t i 0;int n 0;//帧完成标志uint8_t frame_ok 0;extern Protocol_t protocol;void DEBUG_USART_Handler(void){if (USART_GetITStatus(DEBUG_USART,USART_IT_RXNE)!RESET){ch USART_ReceiveData(DEBUG_USART);//防止溢出if(i256) i 0;//存数据data[i] ch;//帧头校验if(i2){if(data[0]!0xAB || data[1]!0xCD){i 0;return;}if(data[i - 1]0xEF i141){// 一帧收完开始解析protocol.cmd (data[2] 8) | data[3];protocol.total_len (data[4] 8) | data[5];// 数据区 128字节for(n0; n128; n){protocol.data[n] data[6 n];}// 保留区 4字节protocol.reserve[0] data[61280];protocol.reserve[1] data[61281];protocol.reserve[2] data[61282];protocol.reserve[3] data[61283];// CRCprotocol.crc16 (data[61284] 8) | data[61285];//写入APP区SPI_FLASH_BufferWrite(data,APP_START_ADDR,128);// 标记完成frame_ok 1;i 0;}}}}这就是分包的代码

相关新闻