#include "EC800M.h" char GPSDATA[GPSDATA_LENGTH]; int GPSDATA_LEN; void uart_send_string(const char *str) { size_t len = strlen(str); uart_write_blocking(GPS_UART, (const uint8_t *)str, len); } void uart_read_string() { while (uart_is_readable(GPS_UART)) { char c = uart_getc(GPS_UART); if (GPSDATA_LEN < GPSDATA_LENGTH - 1) { GPSDATA[GPSDATA_LEN++] = c; GPSDATA[GPSDATA_LEN] = '\0'; } sleep_ms(1); } } void uart_read_string_until_response(const char *expected_response) { int response_len = strlen(expected_response); char response_buffer[1024]; // 假设响应不会超过 100 个字符 int i = 0; while (1) { while (uart_is_readable(GPS_UART)) { char c = uart_getc(GPS_UART); GPSDATA[i++] = c; GPSDATA[i] = '\0'; // 添加字符串结束符 if (strstr(GPSDATA, expected_response) != NULL) { return; // 找到了预期的响应,退出循环 } } sleep_ms(1); // 等待一小段时间再继续读取 } } // 重置数据缓冲区 void reset_data() { memset(GPSDATA, 0, GPSDATA_LENGTH); GPSDATA_LEN = 0; } int EC800M_INIT() { uart_init(GPS_UART, 2400); gpio_set_function(9, GPIO_FUNC_UART); // UART1_TX gpio_set_function(8, GPIO_FUNC_UART); // UART1_RX int __unused actual = uart_set_baudrate(GPS_UART, GPS_UART_BAUD_RATE); uart_set_hw_flow(GPS_UART, false, false); uart_set_format(GPS_UART, 8, 1, UART_PARITY_NONE); //uart_set_fifo_enabled(GPS_UART, false); uart_send_string("AT+QGPSCFG=\"outport\",\"uartdebug\"\r\n"); sleep_ms(100); uart_read_string(); uart_send_string("AT+QGPSCFG=\"nmeasrc\",1\r\n"); sleep_ms(100); uart_read_string(); uart_send_string("AT+QGPSCFG=\"gpsnmeatype\",63\r\n"); sleep_ms(100); uart_read_string(); uart_send_string("AT+QGPSCFG=\"gnssconfig\",1\r\n"); sleep_ms(100); uart_read_string(); uart_send_string("AT+QGPSCFG=\"autogps\",0\r\n"); sleep_ms(100); uart_read_string(); uart_send_string("AT+QGPSCFG=\"apflash\",0\r\n"); sleep_ms(100); uart_read_string(); uart_send_string("AT+QGPS=1\r\n"); sleep_ms(100); uart_read_string(); // 打印第一次初始化输出 printf("%s %d\n", GPSDATA, strlen(GPSDATA)); return 0; } char *EC800M() { uart_send_string("AT+QGPSLOC=0\r\n"); uart_read_string_until_response("OK"); sleep_ms(100); //printf("%s %d\n", GPSDATA, strlen(GPSDATA)); //printf("\r\n"); return GPSDATA; } char *EC800M_GPS_DATA_PARSING(char *GPS_DATA) { char *p = NULL; p = strstr(GPSDATA, "QGPSLOC:"); printf("%s\n", p); return 0; }