基于stm32f103c8t6最小系统板的超声波避障模块
时间: 2025-03-27 07:34:11 浏览: 43
基于STM32F103C8T6最小系统板的超声波避障模块是一种常见的传感器应用,广泛用于机器人导航、自动避障等场景。以下是详细介绍:
### 硬件组成
1. **STM32F103C8T6**:这是基于ARM Cortex-M3内核的微控制器,具备高性能、低功耗的特点,适用于各种嵌入式应用场景。
2. **HC-SR04 超声波传感器**:这是一种常用的测距模块,通过发射和接收超声波来测量物体的距离。
- **Trig 引脚**:触发信号输入引脚,需要发送一个高电平脉冲(通常为10μs),以启动一次距离测量。
- **Echo 引脚**:回响信号输出引脚,在接收到返回的超声波后会输出一个高电平脉冲,其持续时间对应了往返的时间。
3. **其他元件**:如电阻、电容、LED指示灯等辅助电路组件。
### 工作原理
当向HC-SR04的`Trig`引脚发送一个大于10μs的高电平时,它将发出一串8个周期的40kHz方波,并开始计时;一旦检测到障碍物反射回来的超声波,`Echo`引脚就会变为高电平并保持一段时间,这段时间与实际距离成正比。计算公式如下:
\[ \text{Distance} = (\text{High Time}) / 58 [\mu s/cm] 或者 Distance = (High Time) * 340m/s / 2\]
其中“除以58”是因为该传感器出厂已校准过,“乘以340再除二”的方法则是直接利用声音传播速度进行换算。
### 编程步骤
#### 初始化配置
- 配置GPIO端口作为控制超声波模块工作的接口;
- 设置定时器中断或其他机制准确获取ECHO高低电平的变化时刻点位信息。
```c
// 示例代码片段(部分)
#include "stm32f1xx_hal.h"
TIM_HandleTypeDef htim2;
void GPIO_Init(void){
__HAL_RCC_GPIOA_CLK_ENABLE(); // 开启PA端口时钟
GPIO_InitTypeDef GPIO_InitStruct;
// TRIG Pin设置
GPIO_InitStruct.Pin = GPIO_PIN_9; /* 连接到TRIG */
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;/* 推挽输出模式*/
GPIO_InitStruct.Pull = GPIO_NOPULL; /* 悬浮状态无上拉下拉 */
HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);
}
uint32_t Get_Sonar_Distance(){
uint32_t duration;
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,SET);/* 发送 Trig Pulse */
delay_us(10); /* 触发脉宽约10us左右 */
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,RESET);
while(HAL_GPIO_ReadPin(GPIOB, ECHO_Pin)== RESET){}
TIM2->CNT=0x0000;// 清空定时器寄存器内容准备重新记录数值变化情况
while(HAL_GPIO_ReadPin(GPIOB,Echo_pin)!=RESET){}//等待下降沿到来结束循环体内部操作过程结束后即表示已经完成了本次完整的测量动作流程
duration=TIM2->CNT ;
return (duration/58); // 返回得到厘米单位下的结果值
}
```
注意上述代码仅为示例框架的一部分,还需要结合具体的硬件连接情况进行适当调整修改完善才能正常使用起来效果更好一些哦~
阅读全文
相关推荐


















