嗨伙计们,我正在尝试使用stm32 HAL库进行串行rx中断,我得到了我不知道的错误。
这是非常简单的程序。 PC为stm32板提供字节,stm32将使用rx中断例程获取这些字节。
问题是当我发送超过4个字节,例如“12345”时,stm32板只有4个字节,最后一个字节(5)在某个地方消失了。 这是为了更好地理解的图片。
这是我在HAL_UART_RxCpltCallback例程中的代码:
HAL_UART_Transmit(&huart4, &receive1, 1, 1000); HAL_UART_Receive_IT(&huart4, &receive1, 1);如果您有任何想法,请评论:)
Hi guys I am trying to make serial rx interrupt using stm32 HAL library and I got error what I dont know.
It is really simple program. PC gives bytes to stm32 board and stm32 will take those bytes using rx interrupt routine.
Problem is when i send over 4 bytes ,such as "12345", stm32 board only got 4 bytes and last one byte(5) is gone somewhere. Here is picture for better understanding.
Here is my code in HAL_UART_RxCpltCallback routine:
HAL_UART_Transmit(&huart4, &receive1, 1, 1000); HAL_UART_Receive_IT(&huart4, &receive1, 1);If you have any idea, please comment :)
最满意答案
检查函数: HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) ;
例如,制作一个足够长的大小,如16bytes;将HAL_UART_RxCpltCallback例程调用到函数HAL_UART_Receive_IT(...) 。 我建议你添加这样的结束字符( \n )检测:
if ( (*huart->pRxBuffPtr) == '\n') { HAL_UART_RxCpltCallback(huart); //-------------------------------------------///////// } else { huart->pRxBuffPtr++; }check the function: HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
make a size enough longer like 16bytes for example;call your HAL_UART_RxCpltCallback routine into the function HAL_UART_Receive_IT(...). I suggest to you to add an end character (\n) detection like this:
if ( (*huart->pRxBuffPtr) == '\n') { HAL_UART_RxCpltCallback(huart); //-------------------------------------------///////// } else { huart->pRxBuffPtr++; }更多推荐
发布评论