手把手教你一步步完成基于STM32的HC-SR04超声波测距模块的驱动
一STM32CubeMx的工程配置创建STM32工程首先勾选SYS里面的Debug选择Serial Wire否则下一次将无法烧录关闭SWD烧录接口会出现无法烧录的情况。之后配置RCC时钟选择高速的外部晶振。首先在直接红框1内配置输入72点击回车之后选择OKSTM32CubeMx会自动帮你把时钟修改为72Mhz可以在时钟树的右侧看到此时挂载在APB和APPB2上的时钟频率都是72Mhz我们本次采用定时器2设置时钟源为内部时钟使用通道一设置为输入捕获直接模式这个可以去读取Echo反馈引脚的时间状态下面会讲解。同时设置PSC频率为72-1也就是技术每次加一经过1us。开启定时器2的全局中断。在右侧可以看到定时器2的通道一对应PA0引脚。也就是Echo引脚接入PA0下面会讲解。之后需要设置Trig引脚我们选择PA5作为触发引脚设置其为推挽输出模式。另外我们起了个别的名字叫做Trig后面使用可以方便一点。按照下面配置生成信息Copy only the necessary library files 勾选该选项可以只生成需要的文件可以加快编译速度以及减少文件体积。勾选Generate peripheral initialization as a pair of.c/.h files per peripheral 可以去把每种文件都独立生成.C和.h文件点击Open Project可以直接打开Keil二Hal库代码的编写下面是超声波模块,以及其引脚的标注注意Echo和Trig引脚观察超声波模块的时序图发现触发信号是10us的高电平也就是给Trig引脚10us的高电平之后模块内部会自动触发信号回响信号高电平持续的时间就是距离对应的时间也就是需要读取Echo引脚高电平的持续时间。标况下声速是340m/s读取的时间是发射到接受一来一回也就是实际距离的两倍。首先我们定义两个标志位以及写出读取函数的初始化函数在初始化函数中再次确认计数值为0然后设置输入捕获是高电平捕获之后在开启输入捕获的中断。也就是说 PA0读取到高电平时候会进入中断我们记录时间。uint8_t echo_flag 0; // 捕获标志位uint16_t rising_cnt 0, falling_cnt 0; // 上升沿、下降沿数值void distance_init(){__HAL_TIM_SET_COUNTER(htim2, 0);// 开始捕获__HAL_TIM_SET_CAPTUREPOLARITY(htim2, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING);HAL_TIM_IC_Start_IT(htim2, TIM_CHANNEL_1);}之后我们书写输入捕获终中断回调函数第一次进来是上升沿我们记录此时的时间之后再设置为下降沿捕获当下降沿捕获后再次进入中断我们可以读取下降沿的此时时间。void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim){if (htim htim2 htim-Channel HAL_TIM_ACTIVE_CHANNEL_1){if (!echo_flag) // 捕获到上升沿{rising_cnt HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);echo_flag 1;__HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_FALLING);}// 捕获到下降沿else{falling_cnt HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);echo_flag 0;__HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING);}}}在上面我们已经获得了高电平持续的时间我们就可以编写距离读取的函数了我们先给触发引脚高电平在经过一个11us的延时之后进入低电平再次确保我们的计数值是0防止溢出然后就可以用高电平的时间计算时钟。uint16_t distance_read(){uint16_t distance;HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_SET);delay_us(11);HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_RESET);__HAL_TIM_SET_COUNTER(htim2, 0);distance (falling_cnt - rising_cnt) * 0.017;return distance;}该方法可以就阻塞11us不需要一直等待测距结束测距记录时间在中断中实现。使用时候我们定义一个距离数值如下。uint16_t distance;之后在While(1)前面初始化时候调用初始化函数如下。distance_init();最后在while(1)里面一直调用距离读取函数distance就是我们读取到的距离distancedistance_read();至此教程结束感谢大家观看欢迎大家评论留言。有求必应

相关新闻

从零吃透 C 语言数组:大一萌新的复盘总结

从零吃透 C 语言数组:大一萌新的复盘总结

数组的认识大家好呀,好久不见~转眼假期已经到啦,大一上半程的校园生活伴着期末复习备考的忙碌告一段落,我也总算对大学的学习节奏慢慢熟悉了。这段时间跟着课程啃完了 C 语言指针的内容,也刷了不少对应的练习题&#x…

2026/7/14 7:35:49 阅读更多 →
在Windows 11上运行Android应用的终极指南:告别模拟器的全新体验

在Windows 11上运行Android应用的终极指南:告别模拟器的全新体验

在Windows 11上运行Android应用的终极指南:告别模拟器的全新体验 【免费下载链接】WSA Developer-related issues and feature requests for Windows Subsystem for Android 项目地址: https://gitcode.com/gh_mirrors/ws/WSA 你是否曾经希望在电脑上流畅运行…

2026/7/14 7:35:49 阅读更多 →
GitHub中文界面解决方案:告别语言障碍的智能翻译插件实践指南

GitHub中文界面解决方案:告别语言障碍的智能翻译插件实践指南

GitHub中文界面解决方案:告别语言障碍的智能翻译插件实践指南 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese GitHub作为全…

2026/7/14 7:29:48 阅读更多 →

最新新闻

开发者必读:LibcarePlus源码结构与核心API详解

开发者必读:LibcarePlus源码结构与核心API详解

开发者必读:LibcarePlus源码结构与核心API详解 【免费下载链接】libcareplus LibcarePlus delivers live patches to any of your Linux executables or libraries at the runtime, without the need for restart of your applications. 项目地址: https://gitcod…

2026/7/14 8:44:12 阅读更多 →
Cane配置迁移指南:从旧版本到最新版的平滑过渡技巧

Cane配置迁移指南:从旧版本到最新版的平滑过渡技巧

Cane配置迁移指南:从旧版本到最新版的平滑过渡技巧 【免费下载链接】cane Code quality threshold checking as part of your build 项目地址: https://gitcode.com/gh_mirrors/ca/cane 你是否正在使用Cane代码质量检查工具,但担心从旧版本升级到…

2026/7/14 8:42:11 阅读更多 →
Hermes Agent MOA技术解析:多模型协同如何实现AI能力质变

Hermes Agent MOA技术解析:多模型协同如何实现AI能力质变

如果你正在使用 AI 助手处理复杂任务,可能会遇到这样的困境:单个模型在某些领域表现优秀,但在其他场景下却显得力不从心。传统解决方案要么需要手动切换模型,要么依赖复杂的集成逻辑,既影响效率又增加认知负担。Hermes…

2026/7/14 8:40:11 阅读更多 →
Linux 服务器运维:如何彻底禁用休眠与挂起以保障服务稳定

Linux 服务器运维:如何彻底禁用休眠与挂起以保障服务稳定

1. 为什么服务器需要禁用休眠与挂起? 我第一次管理生产服务器时就踩过这个坑。那是个普通的周二凌晨3点,监控系统突然报警——所有服务全部离线。我手忙脚乱赶到机房,发现服务器指示灯正常,但所有网络服务无响应。后来才发现是系统…

2026/7/14 8:40:11 阅读更多 →
开发者必看:Qwen2.5-Coder-7B-Instruct_rai_1.7.1_hybrid模型配置文件详解与参数调优指南

开发者必看:Qwen2.5-Coder-7B-Instruct_rai_1.7.1_hybrid模型配置文件详解与参数调优指南

开发者必看:Qwen2.5-Coder-7B-Instruct_rai_1.7.1_hybrid模型配置文件详解与参数调优指南 【免费下载链接】Qwen2.5-Coder-7B-Instruct_rai_1.7.1_hybrid 项目地址: https://ai.gitcode.com/hf_mirrors/amd/Qwen2.5-Coder-7B-Instruct_rai_1.7.1_hybrid 想要…

2026/7/14 8:38:10 阅读更多 →
激活函数:神经网络非线性能力的灵魂与实战选型指南

激活函数:神经网络非线性能力的灵魂与实战选型指南

1. 为什么神经网络需要激活函数 我第一次接触神经网络时,最困惑的问题就是:为什么要在每个神经元后面加个"奇怪"的函数?直接让数据流过所有层不行吗?后来在图像分类任务中踩了坑才明白,没有激活函数的神经网…

2026/7/14 8:36:10 阅读更多 →

日新闻

AI Agent数据越界行为如何被精准溯源?——基于GDPR/CCPA双合规的5层审计框架实战指南

AI Agent数据越界行为如何被精准溯源?——基于GDPR/CCPA双合规的5层审计框架实战指南

更多请点击: https://kaifayun.com 第一章:AI Agent数据越界行为的合规性挑战与溯源必要性 AI Agent在自主执行任务过程中,可能因提示注入、上下文污染或权限配置缺陷,无意或有意访问、缓存、传输受保护数据(如PII、G…

2026/7/14 0:01:13 阅读更多 →
Perplexity vs ChatGPT vs Claude:实测127组复杂查询任务,谁才是真正可靠的“事实型AI助手”?

Perplexity vs ChatGPT vs Claude:实测127组复杂查询任务,谁才是真正可靠的“事实型AI助手”?

更多请点击: https://codechina.net 第一章:Perplexity 怎么用 Perplexity 是衡量语言模型预测能力的核心指标,数值越低表示模型对文本序列的不确定性越小、预测越精准。它本质上是交叉熵损失的指数形式,计算公式为:…

2026/7/14 0:01:13 阅读更多 →
全球首发!五一视界定制物理AI卫星ECS-1剑指万亿赛道

全球首发!五一视界定制物理AI卫星ECS-1剑指万亿赛道

五一视界发布公告,近日,公司与环天智慧科技股份有限公司(“环天智慧”)正式达成空天领域战略合作。环天智慧是国内领先、聚焦天基对地观测遥感卫星总体研制与在轨运营的商业航天企业,同时也是西南地区规模最大、具备全自主可控遥感卫星星座建…

2026/7/14 0:03:13 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/13 4:38:36 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/13 4:38:38 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/14 7:15:24 阅读更多 →

月新闻