[活动] 【APM32M3514开发板测评】+串口通讯与超声波测距

[复制链接]
 楼主| jinglixixi 发表于 2025-2-2 21:52 | 显示全部楼层 |阅读模式
#申请原创#
@21小跑堂

超声波测距模块是一种利用超声波的回声效应来检测距离,是通过收发信号的时间差来转化出距离值。
超声波测距模块可分为2类,一类是通过捕捉收发脉冲的时间差,另一类则是配有串行通讯功能,是以指令的方式来启动检测和读取检测值。
这里选用的是后者,见图1和图2所示。
a1a69f835dae7d3bffc69e223ea140d3
图1 整体构成

2cd1061f46850524ba0be472d4afb16a
图2 核心模块

在使用时,可对串行通讯的波特率进行选择,这里选取的是9600bps,其检测效果如图3所示。
启动检测的指令为:0x55
接收到的是一个4字节的返回值,其中第一和第二字节是检测值,第三字节则是校验码。
以返回值是FF 07 C5 CB 为例,0x7C5 = 1989,即检测值为 1989mm。
检测结果:FF 06 15 1A = 1557 mm
ec167c28f397f0d98e8ca1f28f8702d9
图3 测试结果

在APM32M3514开发板上,是使用串口1来连接超声波测距模块,具体的引脚功能为:
PC4---TX1
PC5---RX1
04b19b086cac2c9521d02a623ac7bee3
图4 串口引脚

此外,为了能显示检测值,所用的OLED屏其占用的引脚为:
SCLK----PB0
SDIN----PB10
0472b6ab307d83f9ec47588ea6f7b7f2
319f9978803fd2ca77587b7727180324
图5 显示用引脚

对OLED屏所用引脚的配置函数为:
  1. void OLED_config(void)

  2. {

  3. GPIO_Config_T gpioConfig;

  4. gpioConfig.mode = GPIO_MODE_OUT;

  5. gpioConfig.outtype = GPIO_OUT_TYPE_PP;

  6. gpioConfig.speed = GPIO_SPEED_50MHz;

  7. gpioConfig.pupd = GPIO_PUPD_NO;

  8. RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOB);

  9. gpioConfig.pin = GPIO_PIN_0| GPIO_PIN_10;

  10. GPIO_Config(GPIOB, &gpioConfig);

  11. }

为输出高低电平,所定义的语句为:
#define OLED_SCLK_Clr()  GPIO_ClearBit(GPIOB, GPIO_PIN_0)
#define OLED_SCLK_Set()  GPIO_SetBit(GPIOB, GPIO_PIN_0)
#define OLED_SDIN_Clr()  GPIO_ClearBit(GPIOB, GPIO_PIN_10)
#define OLED_SDIN_Set()  GPIO_SetBit(GPIOB, GPIO_PIN_10)
接收检测数据并进行显示的中断处理函数为:
  1. void USART_Receive_Isr(void)

  2. {

  3. uint8_t dat;

  4. uint16_t l;

  5. if (USART_ReadStatusFlag(MINI_COM1, USART_FLAG_RXBNE) == SET)

  6. {

  7. dat = (uint8_t)USART_RxData(MINI_COM1);

  8. sj[j]=dat;

  9. j=j+1;

  10. }

  11. if(j==4)

  12. {

  13. l=sj[1]*256+sj[2];

  14. OLED_ShowNum(16,4,l,4,16);

  15. j=0;

  16. printf("%c", 0x55);

  17. }

  18. }

在模拟I2C的方式下,实现距离检测与显示的主程序为:
  1. int main(void)

  2. {

  3. uint8_t dat,i;

  4. GPIO_Config_T gpioConfig;

  5. USART_Config_T usartConfig;

  6. APM_DelayInit();

  7. GPIO_Init();

  8. APM_DelayUs(100);

  9. OLED_Init();

  10. OLED_Clear();

  11. OLED_ShowString(0,0,"AMP32M3514",16);

  12. OLED_ShowString(0,2,"HC04 TEST",16);

  13. OLED_ShowString(0,4,"L=",16);

  14. APM_DelayUs(1000);

  15. APM_MINI_COMInit(COM1);

  16. RCM_EnableAHBPeriphClock(MINI_COM1_TX_GPIO_CLK | MINI_COM2_TX_GPIO_CLK);

  17. RCM_EnableAPB2PeriphClock(MINI_COM1_CLK);

  18. GPIO_ConfigPinAF(MINI_COM1_TX_GPIO_PORT, MINI_COM1_TX_SOURCE, MINI_COM1_TX_AF);

  19. GPIO_ConfigPinAF(MINI_COM1_RX_GPIO_PORT, MINI_COM1_RX_SOURCE, MINI_COM1_RX_AF);

  20. gpioConfig.mode = GPIO_MODE_AF;

  21. gpioConfig.pin = MINI_COM1_TX_PIN;

  22. gpioConfig.speed = GPIO_SPEED_50MHz;

  23. gpioConfig.outtype = GPIO_OUT_TYPE_PP;

  24. gpioConfig.pupd = GPIO_PUPD_PU;

  25. GPIO_Config(MINI_COM1_TX_GPIO_PORT, &gpioConfig);

  26. gpioConfig.pin = MINI_COM1_RX_PIN;

  27. GPIO_Config(MINI_COM1_RX_GPIO_PORT, &gpioConfig);

  28. usartConfig.baudRate = 9600;

  29. usartConfig.mode = USART_MODE_TX_RX;

  30. usartConfig.hardwareFlowCtrl = USART_FLOW_CTRL_NONE;

  31. usartConfig.parity = USART_PARITY_NONE;

  32. usartConfig.stopBits = USART_STOP_BIT_1;

  33. usartConfig.wordLength = USART_WORD_LEN_8B;

  34. USART_Config(MINI_COM1, &usartConfig);

  35. USART_EnableInterrupt(MINI_COM1, USART_INT_RXBNEIE);

  36. NVIC_EnableIRQRequest(MINI_COM1_IRQn, 2);

  37. USART_Enable(MINI_COM1);

  38. printf("%c", 0x55);

  39. while (1);

  40. }

经检测,其测试效果如图6和图7所示,说明在进入超声波测距模块后是可以运转起来的。
e92b9d124960ed2c3e190b79ff375b72
图6 测试效果1

603e90fe88d081bd8dc123df729fb3b6
图7 测试效果2


呐咯密密 发表于 2025-2-10 10:54 | 显示全部楼层
这是汽车上面的倒车雷达吗
 楼主| jinglixixi 发表于 2025-2-10 11:20 | 显示全部楼层
呐咯密密 发表于 2025-2-10 10:54
这是汽车上面的倒车雷达吗

应该是
幻影书记 发表于 2025-3-28 16:24 | 显示全部楼层
倒车模块是I2C接口吗?
我还以为是LIN总线或CAN呢
 楼主| jinglixixi 发表于 2025-3-29 14:32 | 显示全部楼层
幻影书记 发表于 2025-3-28 16:24
倒车模块是I2C接口吗?
我还以为是LIN总线或CAN呢

倒车雷达用串口就可完成,但对于多个探头可能会使用RS485类的协议通讯。
幻影书记 发表于 2025-3-29 20:38 | 显示全部楼层
嗯嗯,学习了。
汽车电子的门槛还是有一些的,所以一直也没有更详细的接触
 楼主| jinglixixi 发表于 2025-3-30 10:38 | 显示全部楼层
幻影书记 发表于 2025-3-29 20:38
嗯嗯,学习了。
汽车电子的门槛还是有一些的,所以一直也没有更详细的接触 ...

是的,汽车电子还是有一些自己特点的,需要专事专做。
亿年回响 发表于 2025-4-19 23:25 | 显示全部楼层
  好像汽车上面的倒车雷达啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

517

主题

2932

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部