【发布时间】:2021-07-17 03:21:14
【问题描述】:
我正在为 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;”?
提前致谢!!
【问题讨论】:
标签: uart hal stm32f4 stm32cubeide