stm32串口查询方式接受16位数据(us100超声波模块),只能接受高8位数据,为啥????

2019-07-20 01:21发布

最近在用US100超声波模块,已经用串口中断方式实现,想尝试用串口查询方式接受数据,但经检验:只能接收到高8位正常数据,低8位跟高8位数据相同。US—100:
  • 串口触发测距工作原理
在模块上电前,首先插上模式选择跳线上的跳线帽,使模块处于串口触发模式在此模式下只需要在Trig/TX管脚输入0X55(波特率9600),系统便可发出8个40KHZ的超声波脉冲,然后检测回波信号。当检测到回波信号后,模块还要进行温度值的测量,然后根据当前温度对测距结果进行校正,将校正后的结果通过Echo/RX管脚输出。输出的距离值共两个字节,第一个字节是距离的高8位(HDate),第二个字节为距离的低8位(LData),单位为毫米。即距离值为(HData*256 +LData)mm。

int main(void)
{
        u8 Hdata=0,Ldata=0;
        u16 data=0;
        uart_init(9600);
        usart_init(9600);
        delay_init(84);
        while(1)
        {

                USART_SendData(USART2,0x55);        //超声波模块串口模式 测距 触发数据
                Hdata=USART_ReceiveData(USART2);
                Ldata=USART_ReceiveData(USART2);
                data=((Hdata*256 +Ldata)/10);     //计算距离
                printf(" 您发送的消息为:%d",data);
                delay_ms(1000);       

        }

}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
天荒
1楼-- · 2019-07-20 03:16
 精彩回答 2  元偷偷看……
xuande
2楼-- · 2019-07-20 09:04
 精彩回答 2  元偷偷看……
civic7366
3楼-- · 2019-07-20 12:24
像上面講的一樣 你根本沒作查詢就直接讀了...
所以你讀到的不知道是啥東東...確定是high byte?? 我怎麼覺得是讀到上一筆的low byte
你要先檢查SR的RXNE位是不是1才能讀...
yqp
4楼-- · 2019-07-20 16:27
 精彩回答 2  元偷偷看……

一周热门 更多>