Я в процессе написания программного обеспечения для STM32F4. STM32 необходимо протянуть строку через UART. Эта строка имеет переменную длину и поступает от датчика каждую секунду. Строка хранится в фиксированном буфере, поэтому содержимое буфера постоянно изменяется.
Входящая строка выглядит так: A12941; P2507; T2150; C21; E0;
Настройки UART:
- Скорость передачи: 19200
- Длина слова: 8 бит
- Четность: Нет
- Остановить ставки: 1
- Передискретизация: 16 образцов
- Глобальное прерывание: включено
- Нет настроек DMA
Часть используемого кода в функции main.c:
uint8_t UART3_rxBuffer[25];
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
HAL_UART_Receive_IT(&huart3, UART3_rxBuffer, 25); //restart interrupt reception mode
int main(void)
{
HAL_UART_Receive_IT (&huart3, UART3_rxBuffer,25);
}
while (1)
{
}
}
Часть кода в stm32f4xx_it.c
void USART3_IRQHandler(void)
{
/* USER CODE BEGIN USART3_IRQn 0 */
/* USER CODE END USART3_IRQn 0 */
HAL_UART_IRQHandler(&huart3);
/* USER CODE BEGIN USART3_IRQn 1 */
/* USER CODE END USART3_IRQn 1 */
}
Это действительно работает, чтобы заполнить буфер переменными строками таким образом, но поскольку буфер постоянно пополняется, трудно извлечь начало и конец строки. Например, буфер может выглядеть так: [0] 'E' [1] '0' [2] '/ n' [3] 'A' [4] '1' [5] '2' [6] '9' [7] '4' [8] '1' [9] ';' [10] «P» и т. Д. Но я бы хотел иметь буфер, который начинается с «A».
У меня вопрос, как я могу правильно обрабатывать входящие строки на uart, чтобы у меня была только строка A12941; P2507; T2150; C21; E0 ;?
Заранее спасибо!!