STM32实现简单蜂鸣器功能
1.1 项目信息功能基于寄存器操作实现 PB2 引脚控制无源蜂鸣器间歇发声芯片型号STM32F10x版权atguigu驱动器件无源蜂鸣器方波驱动直流电平无法发声1.2 实现目标寄存器直接操作 GPIO不调用标准库封装函数输出固定频率方波驱动无源蜂鸣器鸣叫鸣叫一段时间后暂停循环间歇发声提供 SysTick 高精度微秒 / 毫秒 / 秒延时基础函数。2 硬件原理说明2.1 硬件连接控制引脚GPIOB Pin2PB2无源蜂鸣器驱动逻辑 无源蜂鸣器内部无振荡电路必须输入一定频率方波才能发声恒定高 / 低电平仅无声或微弱杂音。电路要求PB2 增加三极管驱动电路GPIO 驱动电流不足无法直接驱动蜂鸣器高电平导通三极管蜂鸣器得电。2.2 时钟与 IO 配置参数系统主频72MHzIO 模式通用推挽输出最大翻转速度 50MHz初始电平低电平蜂鸣器断电静音3 寄存器原理详解3.1 RCC_APB2ENR 外设时钟寄存器c运行RCC-APB2ENR | RCC_APB2ENR_IOPBEN;作用使能 GPIOB 端口外设时钟GPIO 未开时钟时寄存器读写无效。3.2 GPIOB_CRL 端口配置低寄存器PB0~PB7PB2 对应寄存器 bit8~bit11每组 4bit 控制一个引脚清除原有配置GPIOB-CRL ~(0x0F 8)设置模式写入0x03→ 50MHz 通用推挽输出bit0-101 通用输出模式bit2-311 最大速度 50MHz3.3 GPIOB_ODR 输出数据寄存器关闭蜂鸣器GPIOB-ODR ~(1 2)PB2 输出低电平电平翻转生成方波GPIOB-ODR ^ (1 2)异或翻转引脚电平3.4 SysTick 系统滴答定时器延时底层SysTick 挂载内核时钟 72MHzLOAD 装载计数值 72 × 微秒数 倒计时完成后 COUNTFLAG 置 1作为延时判断标志实现高精度微秒延时。4 代码分层功能说明4.1 全局函数声明c运行void Delay_us(uint16_t us); // 微秒级延时 void Delay_ms(uint16_t ms); // 毫秒级延时 void Delay_s(uint16_t s); // 秒级延时 void delay_10us(u16 ten_us); // 10us单位延时封装4.2 main () 主函数流程开启 GPIOB 时钟APB2 总线 IOPB 时钟使能PB2 模式配置CRL 寄存器配置为 50MHz 推挽输出初始静音ODR 置 PB2 低电平主循环逻辑plaintextwhile(1) { 循环2000次翻转PB2电平 1000us延时 → 输出固定频率方波蜂鸣器鸣叫 强制拉低PB2停止方波输出蜂鸣器静音 }方波周期翻转间隔 1000us完整周期 2000us频率 500Hz单次鸣叫时长2000 次翻转持续约 2s无延时间隔鸣叫结束立刻再次启动鸣叫持续间歇滴滴声。4.3 延时函数说明delay_10us1 个单位代表 10 微秒调用底层 Delay_usDelay_usSysTick 硬件精准延时72MHz 专用配置Delay_ms循环调用 1000us 延时实现毫秒延时Delay_s循环调用 1000ms 延时实现秒级延时。5 运行时序与发声参数方波频率500Hz单次电平保持 1000μs高低电平完整周期 2000μs单次鸣叫持续时间 2000 次 × 1000μs 2000000μs 2 秒发声效果持续 2 秒 500Hz 蜂鸣无停顿立刻重复鸣叫连续短促长鸣循环。6 编译与运行说明6.1 开发环境内核Cortex-M3芯片库STM32F10x 标准外设库仅调用寄存器地址无库函数封装编译工具Keil MDK / STM32CubeIDE6.2 编译注意事项系统时钟必须配置为 72MHz否则 Delay_us 延时不准、发声频率偏移无源蜂鸣器必须搭配驱动三极管直接 GPIO 驱动音量极小如需调整音调修改delay_10us(100)参数数值越大延时越长频率越低声音低沉数值越小频率越高声音尖锐如需调整鸣叫时长修改u16 i 2000循环次数数值越大鸣叫时间越长。7 故障排查蜂鸣器完全无声排查GPIOB 时钟是否开启、PB2 输出模式是否配置正确、硬件三极管接线是否颠倒验证屏蔽循环翻转代码手动拉高 PB2测量引脚电平是否变化。蜂鸣器杂音 / 微弱响声原因延时参数错误方波频率偏离蜂鸣器谐振区间或系统时钟不是 72MHz蜂鸣器常鸣不间歇代码逻辑当前鸣叫结束无停顿延时如需停顿需在GPIOB-ODR ~(1 2);后增加Delay_ms(500)等停顿延时。8 扩展修改方案8.1 增加鸣叫停顿鸣叫 2s暂停 0.5s 循环在静音代码后添加毫秒延时c运行GPIOB-ODR ~(1 2); Delay_ms(500); // 暂停500ms8.2 修改音调升高频率将delay_10us(100)改为delay_10us(50)方波周期变短音调变高。8.3 切换 IO 引脚如 PB5修改 CRL 移位偏移量4 * 5ODR 移位1 5即可更换输出引脚。9 详细代码#include stm32f10x.h void Delay_us(uint16_t us); void Delay_ms(uint16_t ms); void Delay_s(uint16_t s); void delay_10us(u16 ten_us); int main(void) { RCC-APB2ENR | RCC_APB2ENR_IOPBEN; GPIOB-CRL ~(0x0F (4 * 2)); GPIOB-CRL | (0x03 (4 * 2)); GPIOB-ODR ~(1 2); while(1) { u16 i 2000; while(i--) { GPIOB-ODR ^ (1 2); delay_10us(100); } GPIOB-ODR ~(1 2); } } void delay_10us(u16 ten_us) { Delay_us(ten_us * 10); } void Delay_us(uint16_t us) { SysTick-LOAD 72 * us; SysTick-CTRL | 0x05; while ((SysTick-CTRL SysTick_CTRL_COUNTFLAG) 0); SysTick-CTRL ~SysTick_CTRL_ENABLE; } void Delay_ms(uint16_t ms) { while (ms--) { Delay_us(1000); } } void Delay_s(uint16_t s) { while (s--) { Delay_ms(1000); } }

相关新闻

微信API架构演进:从消息通道到业务入口

微信API架构演进:从消息通道到业务入口

在很多后端开发者的认知里,微信API通常被定义为“消息推送的管道”。每当业务系统需要通知某人,就调用一下接口,消息发出去,任务也就结束了。 但随着企业级业务场景的复杂化,这种“单向通知”的模式越来越难以满足需求…

2026/7/16 1:05:48阅读更多 →
微信接口接入四大解耦方案,让业务流畅无忧

微信接口接入四大解耦方案,让业务流畅无忧

在企业信息化建设中,很多研发团队都有过这样的经历:为了把财务审批、系统报警或者库存预警推送到微信,不得不维护一套极其复杂的、充满各种“补丁”的通信代码。 随着业务需求的增加,这套通信代码成了整个系统最脆弱的环节——微…

2026/7/16 1:05:48阅读更多 →
45岁职场人不想继续内卷,证书应该服务于哪种定位?

45岁职场人不想继续内卷,证书应该服务于哪种定位?

45岁还在纠结“考什么证能涨薪”,大概率已经走错了方向。这个阶段的证书,不该再是“求加薪”的工具,而应该是“求定位”的武器——帮你把20年的行业经验,翻译成市场愿意买单的服务。 一、45岁的职场困境:不是能力不行…

2026/7/16 1:05:48阅读更多 →
Claude Sonnet 5智能体能力解析:性价比最优的大语言模型实践指南

Claude Sonnet 5智能体能力解析:性价比最优的大语言模型实践指南

在实际 AI 应用开发中,选择合适的大语言模型往往需要在性能、成本和可用性之间做出权衡。Anthropic 最新发布的 Claude Sonnet 5 以其"最具智能体能力的 Sonnet 模型"定位,在开发者社区引发了广泛讨论。这款模型承诺以 Opus 4.8 约六成的价格提…

2026/7/16 2:21:02阅读更多 →
Playwright同步与异步模式深度解析:从原理到实战选择指南

Playwright同步与异步模式深度解析:从原理到实战选择指南

1. 项目概述:同步与异步,Playwright脚本的两种灵魂如果你刚开始接触Playwright,或者从Selenium这类传统同步框架转过来,第一个让你挠头的可能就是“同步”和“异步”这两个词。官方文档和社区案例里,两种写法并行&…

2026/7/16 2:21:02阅读更多 →
《猫猫碎冰冰》 视频|资源|在线观看

《猫猫碎冰冰》 视频|资源|在线观看

《猫猫碎冰冰》 视频|资源|在线观看资料可在线播放《猫猫碎冰冰》https://tool.nineya.com/s/1jskahdln English Practice Cute Animal Edition 以《猫猫碎冰冰》为主题的英语练习,边看视频边学英语。Part 1 Vocabulary Choose the best word.The cat sat on the …

2026/7/16 2:21:02阅读更多 →
JVM 元空间(Metaspace)深度解析:从永久代到本地内存的演进与实战

JVM 元空间(Metaspace)深度解析:从永久代到本地内存的演进与实战

1. 元空间的前世今生:从永久代到本地内存的进化第一次遇到java.lang.OutOfMemoryError: PermGen space错误时,我正调试一个频繁热部署的Web应用。当时通过简单粗暴地加大-XX:MaxPermSize参数解决了问题,但这让我开始好奇:为什么Ja…

2026/7/16 2:21:02阅读更多 →
机器学习实战笔记1——从线性回归到神经网络:三大经典模型的核心实验与调优

机器学习实战笔记1——从线性回归到神经网络:三大经典模型的核心实验与调优

1. 线性回归:从房价预测到模型调优记得我第一次用线性回归预测房价时,对着满屏的误差数字直挠头。当时用的就是Kaggle那个经典的房价数据集,现在想来真是新手必经之路。线性回归看似简单,但要把MAE(平均绝对误差&#…

2026/7/16 2:21:02阅读更多 →
护眼钢化膜有用吗?从悟赫德观复盾看内外双护光学原理

护眼钢化膜有用吗?从悟赫德观复盾看内外双护光学原理

很多人换上标称“护眼”的钢化膜后,发现眼睛该累还是累,画面甚至还泛黄变糊,于是开始怀疑护眼钢化膜是不是智商税。问题其实出在大部分护眼膜只抓住了表面概念,却没有触及护眼的根本——同时管理屏幕外部的环境反光和屏幕内部的高…

2026/7/16 2:16:02阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/15 6:42:19阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/15 6:12:45阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/15 10:54:00阅读更多 →
A--10 Codex Review与GitHub PR工作流实战指南:从代码审查到安全合并

A--10 Codex Review与GitHub PR工作流实战指南:从代码审查到安全合并

摘要:本文系统讲解如何利用Codex App的Review功能与GitHub PR工作流,实现从代码修改到安全合并的完整流程。涵盖Review面板深度使用、/review命令实战、GitHub Connector配置、PR描述撰写技巧,以及常见问题排查方法。通过多个实战案例和流程图,帮助开发者建立高效的AI辅助代…

2026/7/16 0:00:38阅读更多 →
遗传算法解5皇后问题:从Hello World到工业优化的进化实验室

遗传算法解5皇后问题:从Hello World到工业优化的进化实验室

1. 项目概述:为什么用遗传算法解5皇后问题,而不是直接回溯?我带过十几届算法课,也给不少初创团队做过AI架构咨询。每次讲到组合优化问题,学生和工程师的第一反应永远是“写个回溯试试”。这没错——55棋盘上找所有合法…

2026/7/16 0:00:38阅读更多 →
5.1V稳压管输出为何只有4.7V?工作电流与负载影响分析

5.1V稳压管输出为何只有4.7V?工作电流与负载影响分析

前几天调试一个简单的电源模块,用到了5.1V稳压管。电路接好,上电测试,万用表一量——输出居然只有4.7V。第一反应是稳压管坏了,换了一个新的,结果还是4.7V。这让我想起很多初学者都会遇到的困惑:明明标称5.…

2026/7/16 0:00:38阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/15 15:50:47阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/15 8:52:38阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/15 14:06:23阅读更多 →