求原子哥看一下下面这个程序

2019-07-21 02:36发布

unsigned char uart_recByte(void)
{
                uint16_t Data,i=130;
          while(i&&(!USART_GetFlagStatus(USART1,USART_FLAG_RXNE)))
                {
                        i--;
                }
                Data=USART_ReceiveData(USART1);
                return (Data & 0xff);
       
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
哆啦A梦p
1楼-- · 2019-07-21 05:52
mickey丶初夏 发表于 2019-4-19 16:18
有没有好点的接收字节的函数写法呢

针对你现在的程序,简单修改了下
unsigned char uart_recByte(void)
{
        uint16_t Data;
        while(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
        {
              USART_ClearITPendingBit(USART1, USART_IT_RXNE);  
              Data = USART_ReceiveData(USART1);
        }
        return Data;
}
mickey丶初夏
2楼-- · 2019-07-21 07:00
while这个循环的作用
Psheng
3楼-- · 2019-07-21 09:59
 精彩回答 2  元偷偷看……
哆啦A梦p
4楼-- · 2019-07-21 15:09
USART_FLAG_RXNE是接收寄存器非空标志位。我认为 while中对i的判断以及处理是为了防止接收寄存器一直非空而导致程序停在这里不继续向下执行。
mickey丶初夏
5楼-- · 2019-07-21 19:13
Psheng 发表于 2019-4-19 15:10
就是一个等待时间的  i减到0 还没有接受数据就跳出

这个时间是怎么来确定的呢,我发现在低波特率下,接收到的数据会丢失部分,增大i的值,数据就正常了
mickey丶初夏
6楼-- · 2019-07-21 23:02
哆啦A梦p 发表于 2019-4-19 15:20
USART_FLAG_RXNE是接收寄存器非空标志位。我认为 while中对i的判断以及处理是为了防止接收寄存器一直非空而 ...

这个时间是怎么来确定的呢,我发现在低波特率下,接收到的数据会丢失部分,增大i的值,数据就正常了,而且去掉这个,单独判断接收标志位,也不能正常接收数据

一周热门 更多>