"Ръчно" сглобен начин, но работи

.
Код за потвърждение:
uint8_t buf[500] = {0};
uint8_t clock[8] = {0};
bool ok = false;
---
while (1) {
HAL_UART_Receive(&huart1, buf, sizeof(buf), 1000);
// $GPGGA,083836.00,8888.88888,N,88888.88888,E,1,04,4.25,45.7,M,34.7,M,,*62
for (uint16_t i = 0; i < 500; i++)
if (buf[i] == '$') {
i++;
if (buf[i] == 'G') {
i++;
if (buf[i] == 'P') {
i++;
if (buf[i] == 'G') {
i++;
if (buf[i] == 'G') {
i++;
if (buf[i] == 'A') {
i++;
if (buf[i] == ',') {
i++;
clock[0] = buf[i + 0];
clock[1] = buf[i + 1];
clock[2] = buf[i + 2];
clock[3] = buf[i + 3];
clock[4] = buf[i + 4];
clock[5] = buf[i + 5];
clock[6] = '\r';
clock[7] = '\n';
ok = true;
break;
}
}
}
}
}
}
}
if (ok) {
HAL_UART_Transmit(&huart3, clock, sizeof(clock), 1000);
ok = false;
}
buf[0] = ' ';
clock[0] = ' ';
HAL_Delay(50);
}
Текущо UTC време в HHMMSS, засега в char масив.
Два часа си "цъка" към Arduino Serial на 9600 и не губи данни.
Прикачени файлове:
cl.jpg [ 81.18 KiB | Прегледано 473 пъти ]