论坛大神晚上好,我在看原子串口程序时候有个地方不明白,在while循环里面每次RxXferCount自减之后就直接把DR寄存器中的值赋给缓存区了,while循环这么快,会不会两次读DR寄存器是同一个值,这个时候把同一个值赋给缓冲区不是有问题了吗。
/* Check the remain data to be received */
while(huart->RxXferCount > 0)
{
huart->RxXferCount--;
if(huart->Init.WordLength == UART_WORDLENGTH_9B)
{
if(UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_RXNE, RESET, Timeout) != HAL_OK)
{
return HAL_TIMEOUT;
}
tmp = (uint16_t*) pData ;
if(huart->Init.Parity == UART_PARITY_NONE)
{
*tmp = (uint16_t)(huart->Instance->DR & (uint16_t)0x01FF);
pData +=2;
}
else
{
*tmp = (uint16_t)(huart->Instance->DR & (uint16_t)0x00FF);
pData +=1;
}
}
else
{
if(UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_RXNE, RESET, Timeout) != HAL_OK)
{
return HAL_TIMEOUT;
}
if(huart->Init.Parity == UART_PARITY_NONE)
{
*pData++ = (uint8_t)(huart->Instance->DR & (uint8_t)0x00FF);
}
else
{
*pData++ = (uint8_t)(huart->Instance->DR & (uint8_t)0x007F);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
假如数据缓冲区的长度是200,while循环里面只要计数值不是0就在一直读DR的值啊,我的意思是读之前为什么没有检查RXNE,判断有没有数据之后再读。以115200的波特率发数据,是远远小于while循环的处理速度的
一周热门 更多>