uart之发送和接收的区别

UART最基本的函数接口:

      1)Send函数功能:将数据写到发送数据寄存器,当移位寄存器空时,自动移到移位寄存器中,移位寄存器会一位一位的将数据移出到TX线上。

 

     2)Receive函数功能:从接收数据寄存器中读取数据(当接收数据寄存器被读取一次后,该寄存器状态为空,再次接收新的数据后,变为非空),当从一个空的接收数据寄存器读取数据时,会产生阻塞

 

在某些场景下(比如,用AT指令查询蓝牙的名称时),接收数据时,不能确定数据的长度,因此接收长度设置会偏大。此时,接收时会产生阻塞,为避免阻塞的产生,可以增加超时或接收结束标志来中断无效的接收。

 

void uart_receive(uint8_t * indata, uint8_t len)
{
    for (uint8_t i = 0; i < len; i++) {
        indata[i] = usart_read(UART3);
        if (indata[i] == 'O'){
            i++;
            indata[i] = usart_read(UART3);
            if (indata[i] == 'K'){
                i++;
                indata[i] = usart_read(UART3);
                i++;
                indata[i] = usart_read(UART3);
                break;
            }
        }
    }
}

比如上面这段程序,当接收到O和K这两个字符时,说明接收快结束了,接收完字符'\r'和'\n'后,接收结束,通过break中断接收。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值