Цитата
while (!CharNum==32)
Во-первых, такой код вообще работать не будет. У ! приоритет больше, чем у сравнения, поэтому цикл не выполнится ни разу.
Цитата
А сам вопрос звучит так: как вычленить только определённые символы из этой последовательности: время без десятых и сотых, и дату?
Самое простое решение для вас: читать все символы с юарта в буфер. Когда обнаружится символ *, чтение прекратить, а буфер отправить на обработку. Буфер можно обрабатывать как строку - тут надо смотреть, есть ли у вас возможность пользоваться стандартной библиотекой си для работы со строками. Если можно, то есть функция поиска подстроки в строке: ищете подстроку $GPZDA в буфере - так вы определите начало строки с NMEA. Потом от начала NMEA ищете подстроку - запятую (или просто проверяете посимвольно в цикле). Таким образом отсчитываете нужное количество запятых. Так вы попадете на поле с нужными данными. Их читаете вплоть до следующей запятой (или любого нечитаемого символа) и уже дальше думаете, как конвертировать полученные символы в число.