【小华HC32F448测评】+串口通讯及其应用
[复制链接]
本帖最后由 jinglixixi 于 2023-9-14 09:33 编辑
在HC32F448开发板上配有相应的串口资源,通过它既可进行串行数据传送,也可进行各种串口设备的控制。
这里是用串口来控制超声波测距模块进行物距检测,其外观如图1所示。
图1 测距模块
该超声波测距模块可提供 21cm-600cm 的非接触式距离感测功能,测距精度可达高到 3mm ;模块包括收发一体的超声波传感器与控制电路组成,其检测区域如图2所示。
图2 检测区域
该模块支持以指令的方式来采集检测值,其指令字为0x55。在发出指令后,可得到4个字节的数据,其形式为:FF 08 1C 23。
其中: FF为标识符,08和1C为检测值,0x08 为距离的高位数据,0x1C为距离的低位数据,23为校验码。
将距离值0x081C转换成十进制则为2076,其单位为毫米,即2. 076m。
对于校验码,其计算方法为:(0x08 +0x1C+0xFF)&0x00FF=0x23
在直接用串口对检测模块进行测试时,其结果如图3所示。
图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所示,即首先有开发板向检测模块发送采集指令,在接收到采集指令后,再通过串口向开发板发送模拟检测数据,则会触发下一次采集指令的发送。
图4 串口测试
在添加OLED屏显示的情况下,则可以直接将检测的距离显示到屏幕上,其结果如图5所示。
稍感不足的是,在使用中串口容易产生阻塞现象,不如串口测试那样稳定。
图5 测试效果
|