我正在为 STM32F4 编写软件。STM32 需要通过 UART 拉入一个字符串。该字符串的长度可变,并且每秒从一个传感器输入。字符串存储在一个固定的缓冲区中,因此缓冲区内容不断变化。
传入的字符串如下所示:“A12941;P2507;T2150;C21;E0;”
UART的设置:
- 波特率:19200
- 字长:8Bits
- 奇偶校验:无
- 止损: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;”?
提前致谢!!