stm32f103 超声波测距
在STM32F103上实现超声波测距(如HC-SR04模块)的步骤如下:
1. 硬件连接
- Trig引脚:连接STM32的GPIO(输出模式),用于发送触发信号。
- Echo引脚:连接STM32的GPIO(输入模式,建议开启外部中断或输入捕获),用于接收回波信号。
- VCC/GND:接5V电源和地。
2. 核心原理
- 触发测距:向Trig引脚发送至少10us的高电平脉冲。
- 接收回波:Echo引脚会输出高电平,其持续时间与距离成正比。
- 计算距离:
距离 = (高电平时间 * 声速) / 2(声速按340m/s计算)。
3. 代码实现(基于定时器)
步骤1:配置GPIO
// Trig引脚配置(输出)
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_0; // 示例:PA0
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// Echo引脚配置(输入,开启外部中断)
GPIO_InitStruct.Pin = GPIO_PIN_1; // 示例:PA1
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING; // 双边沿触发
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
步骤2:配置定时器(输入捕获)
// 定时器初始化(TIM2为例,72MHz主频)
TIM_HandleTypeDef htim;
htim.Instance = TIM2;
htim.Init.Prescaler = 71; // 分频后1MHz(1us计数)
htim.Init.CounterMode = TIM_COUNTERMODE_UP;
htim.Init.Period = 0xFFFF; // 最大计数值
HAL_TIM_IC_Init(&htim);
// 配置输入捕获通道
TIM_IC_InitTypeDef IC_InitStruct;
IC_InitStruct.ICPolarity = TIM_ICPOLARITY_BOTHEDGE; // 双边沿捕获
IC_InitStruct.ICSelection = TIM_ICSELECTION_DIRECTTI;
IC_InitStruct.ICPrescaler = TIM_ICPSC_DIV1;
IC_InitStruct.ICFilter = 0;
HAL_TIM_IC_ConfigChannel(&htim, &IC_InitStruct, TIM_CHANNEL_1);
步骤3:触发测距
void Trigger_Sensor() {
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
delay_us(20); // 发送20us高电平触发信号
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
}
步骤4:计算回波时间
volatile uint32_t start_time = 0, end_time = 0;
volatile float distance_cm = 0;
// 外部中断回调函数(Echo引脚)
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
if (GPIO_Pin == GPIO_PIN_1) {
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == GPIO_PIN_SET) {
start_time = TIM2->CCR1; // 记录上升沿时间
} else {
end_time = TIM2->CCR1; // 记录下降沿时间
uint32_t pulse_time = end_time - start_time;
distance_cm = pulse_time * 0.0343 / 2; // 计算距离
}
}
}
4. 注意事项
- 超时处理:添加定时器超时检测,避免无回波时死等。
- 温度补偿:声速随温度变化,需校准(公式:
声速 = 331.5 + 0.6*温度)。 - 滤波处理:多次测量取平均,提高稳定性。
5. 示例主循环
while (1) {
Trigger_Sensor();
HAL_Delay(100); // 每隔100ms测一次
printf("Distance: %.2f cm\n", distance_cm);
}
通过以上步骤,即可在STM32F103上实现超声波测距。实际应用中需根据硬件连接和需求调整参数。
第七章-V1.5 STM32超声波测距STM32F103C8t6超声波避障小车 超声波避障模块 STM32超声波测距
5STM32超声波测距STM32F103C8t6
2024-08-15 16:25:10
基于STM32F103单片机的超声波避障小车设计
本设计以STM32F103单片机为核心控制器,加上其他的模块一起组成超声波避障的整个系统,其中包含中控部分、输入部分和输出部分。中控部分采用了STM32F10
基于stm32的超声波测距报警系统
方案介绍相关文件相关内容电子产业图谱申请入驻产业图谱 方案介绍STM32F103C8T6单片机超声波测距通过HC-SR04
资料下载
香香技术员
2022-12-28 15:57:16
LCD+摄像头+GPS超声波测距 源码+视频说明
基于stm32f103的LCD显示,摄像头视频,红外感应,超声波测距。源码+视频说明。
资料下载
马克图布123
2021-12-27 15:18:00
HAL实现多个超声波测距(输入捕获实现)
模块HC-SR043.STM32F103C8T6最小系统板实现功能:选用两个超声波实现实时测距,并测得的距离在串口1显示。思路:使用定时器2实现
资料下载
李杰
2021-11-23 18:07:06
使用STM32F103单片机实现超声波测距OLED显示的设计程序和电路图
本文档的主要内容详细介绍的使用使用STM32F103单片机实现超声波测距OLED显示的设计程序和电路图及工程文件免费下载
资料下载
李le凡
2020-11-09 08:00:00
如何对基于STM32F103VET6的超声波传感器HC-SR04进行测距呢
HC-SR04超声波模块的工作原理是什么?如何对基于STM32F103VET6的超声波传感器HC-SR04进行
STM32——超声波OLED显示 精选资料推荐
要求:用超声波模块,通过定时器(中断)实现超声波测距,并且自己搭建电路,可以通过OLED屏(IIC协议)或者LCD屏来显示数据。方法:通过设置定
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- EDA是什么?有什么作用?
- dtmb信号覆盖城市查询
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- amoled屏幕和oled区别
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机
- 元宇宙概念龙头股一览