OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3238|回复: 2

串口阻塞接收数据在读DR寄存器值之前为什么没有检查RXNE标志位

[复制链接]

10

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
247
金钱
247
注册时间
2015-3-19
在线时间
52 小时
发表于 2018-12-9 21:51:01 | 显示全部楼层 |阅读模式
1金钱
论坛大神晚上好,我在看原子串口程序时候有个地方不明白,在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);
        }

      }

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2018-12-9 22:28:37 来自手机 | 显示全部楼层
有数据读,没数据你读了干嘛
回复

使用道具 举报

10

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
247
金钱
247
注册时间
2015-3-19
在线时间
52 小时
 楼主| 发表于 2018-12-10 15:17:01 | 显示全部楼层
yklstudent 发表于 2018-12-9 22:28
有数据读,没数据你读了干嘛

假如数据缓冲区的长度是200,while循环里面只要计数值不是0就在一直读DR的值啊,我的意思是读之前为什么没有检查RXNE,判断有没有数据之后再读。以115200的波特率发数据,是远远小于while循环的处理速度的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 04:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表