[MCU] 【小华HC32F448测评】+串口通讯及其应用

jinglixixi   2023-9-14 09:30 楼主

在HC32F448开发板上配有相应的串口资源,通过它既可进行串行数据传送,也可进行各种串口设备的控制。

这里是用串口来控制超声波测距模块进行物距检测,其外观如图1所示。

image.png  

图1 测距模块

 

该超声波测距模块可提供 21cm-600cm 的非接触式距离感测功能,测距精度可达高到 3mm ;模块包括收发一体的超声波传感器与控制电路组成,其检测区域如图2所示。

image.png  

图2 检测区域

 

该模块支持以指令的方式来采集检测值,其指令字为0x55。在发出指令后,可得到4个字节的数据,其形式为:FF 08 1C 23。

其中: FF为标识符,08和1C为检测值,0x08 为距离的高位数据,0x1C为距离的低位数据,23为校验码。

将距离值0x081C转换成十进制则为2076,其单位为毫米,即2. 076m。

对于校验码,其计算方法为:(0x08 +0x1C+0xFF)&0x00FF=0x23

在直接用串口对检测模块进行测试时,其结果如图3所示。

image.png  

图3 串口测试

 

当上电进入工作模式后,每触发一次指令灯就会亮一次,频率与触发周期相同,灯每触发两次才会完成翻转而熄灭。

 

测试串口发送采集指令与读取检测数据的程序为:

while(1)
{
	  if (SET == USART_GetStatus(USART_UNIT, USART_FLAG_RX_FULL)) {
           u16RxData = USART_ReadData(USART_UNIT); 
		   ch=u16RxData;
		   if(ch==0xFF)
		   {
			   i=0;
			   s[0]=ch;
		   }
		   else
		   {
			   i=i+1;
			   s[i]=ch;
		   }
		   if(i==3)
		   {
			   l=s[1]*256+s[2];
		       DDL_DelayMS(1500);
			   while (RESET == USART_GetStatus(USART_UNIT, USART_FLAG_TX_EMPTY));
		       USART_WriteData(USART_UNIT, 0xAA);
		  }
}

其测试结果如图4所示,即首先有开发板向检测模块发送采集指令,在接收到采集指令后,再通过串口向开发板发送模拟检测数据,则会触发下一次采集指令的发送。

image.png  

图4 串口测试

 

在添加OLED屏显示的情况下,则可以直接将检测的距离显示到屏幕上,其结果如图5所示。

稍感不足的是,在使用中串口容易产生阻塞现象,不如串口测试那样稳定。

image.png  

图5 测试效果

本帖最后由 jinglixixi 于 2023-9-14 09:33 编辑

回复评论 (6)

可以指令的方式来采集检测值这个可以试用一下

点赞  2023-9-15 07:24
引用: 火辣西米秀 发表于 2023-9-15 07:24 可以指令的方式来采集检测值这个可以试用一下

用起来比较省事儿!!!

点赞  2023-9-15 08:33

这种超声波测距能精确到多少?  

在爱好的道路上不断前进,在生活的迷雾中播撒光引
点赞  2023-9-15 17:09

用串口通信的传感器,是最容易使用的!

点赞  2023-9-15 17:20
引用: 秦天qintian0303 发表于 2023-9-15 17:09 这种超声波测距能精确到多少?  

通常在6米以内

点赞  2023-9-16 09:04
引用: wangerxian 发表于 2023-9-15 17:20 用串口通信的传感器,是最容易使用的!

同感!!!

点赞  2023-9-16 09:04
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复