我有些困难在USART上接收数据。我的目标是能够通过USART接收任意长度的命令(只限于最大长度)。我使用中断程序来检查每个接收到的字符,但是我仍然无法实现我的目标。该程序每次接收新字符时都会被调用,但是HAL_UART_Receive_IT(&huart1,rx_data,buff_size_rx)不会实时更新,因此当我检查rx_data[pointer]时无法看到接收的字符,但几秒钟后它会在rx_data缓冲区中出现。
目前我所拥有的:
目前我所拥有的:
int pointer =0;
...
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
if ( USART1->ISR & UART_IT_TXE) {
}
if ( USART1->ISR & UART_IT_RXNE) {
HAL_UART_Receive_IT(&huart1,rx_data,buff_size_rx);
if(rx_data[pointer]=='\0') {
pointer=0;
readCommand(rx_data);
clearBuffer(rx_data,buff_size_rx);
} else {
pointer++;
if(pointer>=buff_size_rx) {
pointer=0;
}
}
}
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
/* USER CODE END USART1_IRQn 1 */
}