|
1 Byte
|
4 Byte
|
N Byte
|
4 Byte
|
1 Byte
|
| 0x02 |
报文长度
| 报文 |
CRC16
| 0x03 |
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
-
- #define START_BYTE 0x02
- #define END_BYTE 0x03
-
- static int times = 0;
- int my_read(uint8_t *data, uint32_t max_len)
- {
- char *a="\x02\x30\x30\x37\x37\x7B\x22\x64\x61\x74\x61\x22\x3A\x7B\x22\x61";
- char *b="\x63\x74\x69\x6F\x6E\x22\x3A\x31\x7D\x2C\x22\x63\x6D\x64\x22\x3A\x22\x43\x32\x22\x2C\x22\x74\x69\x6D\x65\x22\x3A\x22\x31\x36\x39\x37\x31\x31\x30\x36\x39\x39\x30\x38\x33\x22\x2C\x22\x6D\x73\x67\x5F\x69\x64\x22\x3A\x22\x31\x36\x39\x37\x31\x31\x30\x36\x39\x39\x22";
- char *c="\x7D\x44\x42\x46\x32\x03";
-
- size_t bytesRead = 0;
-
- if(times==0)
- {
- bytesRead = 16;
- memcpy(data, a, 16);
- times++;
- }
- else if(times==1)
- {
- bytesRead = 65;
- memcpy(data, b, bytesRead);
- times++;
- }
- else
- {
- times = 0;
- bytesRead = 6;
- memcpy(data, c, bytesRead);
- }
-
- return bytesRead;
-
- }
-
- int my_recv(uint8_t *recv_data, uint32_t *recv_len)
- {
- // 从串口接收数据
- uint8_t buffer[1024] = {0};
- *recv_len = 0;
- size_t bytesRead = 0;
-
- while (true) {
-
- bytesRead = my_read(buffer, sizeof(buffer));
- // 处理接收到的数据
- if (bytesRead <= 0)
- {
- break;
- }
-
- printf("bytesRead=%ld\n",bytesRead);
- if(buffer[0] == START_BYTE)
- {
- *recv_len = bytesRead;
- memcpy(recv_data, buffer, bytesRead);
- }
- else
- {
- if((*recv_len+bytesRead)> sizeof(buffer))
- {
- *recv_len = 0;
- break;
- }
- memcpy(recv_data+*recv_len, buffer, bytesRead);
- *recv_len += bytesRead;
- }
-
- if(recv_data[0] != START_BYTE)
- {
- *recv_len = 0;
- break;
- }
-
- if(recv_data[*recv_len-1] == END_BYTE)
- {
- return *recv_len;
- }
- }
-
- return -1;
- }
-
- int main() {
- uint8_t frame[1024];
- int frame_len;
- memset(frame, 0, sizeof(frame));
-
- printf("len=%d\n", my_recv(frame, &frame_len));
-
- if(frame_len > 6)
- {
- // 打印报文数据
- printf("Received frame: ");
- for (size_t i = 0; i < frame_len-10; i++) {
- printf("%02x ", frame[i+5]);
- }
- printf("\n");
- }
-
- return 0;
- }