[MCU] 【上海航芯 ACM32F070开发板+触控功能评估板测评】+UART及超声波测距

jinglixixi   2022-10-31 21:51 楼主

ACM32F070开发板配有3个串行口,其引脚分配及波特率设置如下:
UART1 :打印调试串口,支持printf,管脚:A9:Tx、A10:Rx,波特率:115200。
UART2 :用户串口,管脚:A2:Tx、A3:Rx ,波特率:115200。
UART3  :用户串口,管脚:B10:Tx、B11:Rx,波特率: 9600。
充分利用好这些串口,可控制各种串口设备和器件来有效地扩展系统的功能。
这里以一款串口控制的超声波距离检测模块为例来介绍串口的使用,所使用的是UART2,其线路构成如图1所示。
image.png 图1 线路构成

该测距模块的使用方法是,以串口发送采集指令“0x55”,则可接收到一个4字节的反馈数据。
设反馈数据的数据为:“FF 07 A1 A7”,则0x FF 为引导符,0x07 为距离的高位数值,0xA1 为距离的低位数值,0xA7是校验码。
其中校验码的计算方法为: SUM=A7=(0x07+0xA1+0Xff)&0x00ff
距离值0x07A1转换成十进制则是 1953,其单位是毫米。
该测距模块的最近检测距离约 21cm,最远检测距离约 600cm。

在串口调试工具的帮助,可直接对测距模块进行检测,其测试结果如图2所示。
image.png 图2 串口测试

在OLED屏的配合下,实现图3和图4所示检测效果的主程序如下:

int main(void)
{
    int l;
    uint8_t gu8_TxBuffer1[1]={0X55};
    uint8_t gu8_RxBuffer1[5];
    System_Init();
    Uart_Init(9600);
    app_OLED_Init();
    OLED_Init();
    OLED_Clear();
    OLED_ShowString(0,0,"ACM32F070 ",16);
    OLED_ShowString(0,2,"OLED & DYP_A06 ",16);
    OLED_ShowString(0,4,"distance:",16);
    OLED_ShowString(48,6,"(mm)",16);
    HAL_UART_Transmit(&Uart2_Handle, gu8_TxBuffer1, 1, 0);
    while(1)
    {
            HAL_UART_Receive(&Uart2_Handle, gu8_RxBuffer1, 4, 200);
            if(gu8_RxBuffer1[0]==0XFF)
            {
                 l=gu8_RxBuffer1[1]*256+gu8_RxBuffer1[2];
                 OLED_ShowNum(0,6,l,4,16);
                 System_Delay_MS(500);
                 HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3, GPIO_PIN_CLEAR);
                 gu8_RxBuffer1[0]=0XEE;
                 gu8_RxBuffer1[1]=0;
                 gu8_RxBuffer1[2]=0;
                 HAL_UART_Transmit(&Uart2_Handle, gu8_TxBuffer1, 1, 0);
            }
    }
}

image.png 图3 检测效果1

 

image.png 图4检测效果2

当然,也可以同功能扩展板上的LCD屏相配合来显示检测结果。
 

回复评论 (2)

超声波测距用的探头是哪个频段的?有没有尝试过测气体浓度

在爱好的道路上不断前进,在生活的迷雾中播撒光引
点赞  2022-11-1 06:54
引用: 秦天qintian0303 发表于 2022-11-1 06:54 超声波测距用的探头是哪个频段的?有没有尝试过测气体浓度

哪个频段手头没有相关的资料介绍,要测气体浓度恐怕要求气体对声波的速度影响比较明显才能反映出时间差。

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