STM32CubeIDE基础学习-BEEP蜂鸣器实验

STM32CubeIDE基础学习-BEEP蜂鸣器实验


文章目录

  • STM32CubeIDE基础学习-BEEP蜂鸣器实验
  • 前言
  • 第1章 硬件介绍
  • 第2章 工程配置
    • 2.1 工程外设配置部分
    • 2.2 生成工程代码部分
  • 第3章 代码编写
  • 第4章 实验现象
  • 总结


前言

前面学习了LED闪烁实验,现在来学习一下蜂鸣器发声实验,直接在LED的工程基础上进行添加蜂鸣器的功能代码就行,其它的功能不用修改。

STM32CubeIDE基础知识学习回顾

实验目的:
学习配置GPIO作为输出功能使用,从而实现控制BEEP每隔500ms交替响灭功能。


第1章 硬件介绍

本实验使用的开发板主控芯片是STM32F103C8T6,其核心原理图如下:

在这里插入图片描述

时钟来源使用的是外部高速8M晶振作为高速时钟。

蜂鸣器接到芯片的PA15引脚上,原理图如下图所示:

在这里插入图片描述

第2章 工程配置

本实验直接采用上一个LED闪烁实验的工程作为基础模板,直接拷贝粘贴即可,然后在上面添加BEEP的相关功能配置即可,其它不用修改,就不用再新建工程了。

2.1 工程外设配置部分

配置GPIO,跟着标号依次设置,如果找不到芯片的引脚,可以在右下角进行搜索,就可以看到芯片对应的引脚出现黑色闪烁的,然后点击进行选择需要配置的功能即可。

鼠标左键点击该引脚,选择对应需要的功能,BEEP发声实验的使用选择输出功能就行。如下图所示:

在这里插入图片描述

接着配置GPIO引脚工作模式,根据查看BEEP的连接原理图可知,控制蜂鸣器的引脚是接到三极管上的,根据该该型号三极管的开关原理可知,当单片机引脚输出高电平时,三极管会导通,输出低电平时三极管截止不工作,从而可以控制蜂鸣器的响或不响。

引脚的配置如下图所示:

在这里插入图片描述

端口功能配置如下:
1、由于初始上电要蜂鸣器不发声,则需要配置初始化状态为低电平状态。
2、模式配置为推挽输出。
3、输出保持设置不用上下拉即可,也可以设置输出上拉,这里输出设置这个上下拉作用不是很大。
4、输出速度选择中速或低速都行。
5、User Label建议定义一个自己喜欢见名知意的名字,方便写程序时查看和方便使用。

接着RCC时钟、调试接口都不用修改,保持默认设置即可。

最后新增的蜂鸣器引脚如下图所示:

在这里插入图片描述

到此,整个工程需要新增的功能就配置完成了,接下来就可以生成代码工程进行功能代码编写了。

2.2 生成工程代码部分

可以快捷键ALT+K,或者点击生成工程的图标按钮生成代码工程。

生成后最终会显示下图这样的代码:

在这里插入图片描述

可以看到继承了上一个LED实验功能的代码。

接着就可以在上面添加自己需要实现的蜂鸣器功能代码了。

第3章 代码编写

进入代码工程后,可以先点击编译一下,看代码工程是否会报错,如果没有警告和报错就可以进行代码编写了。不然如果在一开始的工程都报错了,后面就不好找问题了。

在main.h里面可以看到蜂鸣器相关的宏定义,如下图所示:

在这里插入图片描述

创建beep.h文件,在里面添加的代码如下图所示,可以直接从led.h文件里面拷贝,对应修改为beep相关的配置即可。

在这里插入图片描述

最终main函数里面的while循环里面可以写如下代码就可以了:

代码片示例如下:

while(1)
{
	BEEP(0);             /* 关闭BEEP */
	HAL_Delay(500);      /* 延时500ms */
	BEEP(1);             /* 打开BEEP */
	HAL_Delay(500);      /* 延时500ms */
}

在这里插入图片描述

要注意main文件里面对应添加引入头文件路径才行,不然会报警告的。如下图所示:

在这里插入图片描述

添加完上面这些代码后,编译下载,可以听到板子上的蜂鸣器每隔500毫秒在交替响灭了。

附加部分:
为了方便测试,可以在创建的beep.c文件里面添加函数代码如下图所示,可以直接从led.c文件里面拷贝,对应修改为beep相关的即可,如下图所示:

在这里插入图片描述

然后在头文件声明一下该函数。

在这里插入图片描述

最终在main.c文件里面调用测试功能函数如下图所示:

在这里插入图片描述

第4章 实验现象

下载代码后,就可以听到板子的蜂鸣器每隔500毫秒在交替响灭了。


总结

蜂鸣器的实验还是比较简单的,采用的是有源蜂鸣器,主要弄明白三极管的导通原理就可以,本电路添加三极管的作用是为了增加IO口的驱动能力,保证该蜂鸣器能正常工作的。

一般情况下STM32 的IO口的驱动电流是比较小的,而蜂鸣器的工作电流是需要比较高,测试有一些比较小功率的蜂鸣器直接接IO也是可以正常驱动的,这种情况不使用使用三极管也行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/465827.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JVM工作原理与实战(四十四):JVM常见面试题目

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、JVM常见面试题目 1.有哪些常用的垃圾回收器? 2.什么是内存泄漏,如何解决内存泄漏问题? 3.请列举并简要描述一些常用的JVM工具及其主要功能。 …

用python写网络爬虫:3.urllib库进一步的使用方法

文章目录 异常处理URLErrorHTTPError设置超时时间 链接的解析、构造、合并urlparse方法urlsplit方法urljoin方法urlencode方法parse_qs方法quote方法 Robots 协议Robots 协议的结构解析协议 参考书籍 在上一篇文章:用python写网络爬虫:2.urllib库的基本用…

Nginx底层基础数据结构

基础数据结构 ngx_int_t 32位操作系统4字节,64位操作系统8字节 解决跨平台以及,普通int类型在x86和x64操作系统上面是4字节,在类型转换时造成内存浪费(如在x64下面转换long类型) typedef intptr_t ngx_int_t;#ifdef _WIN64 typedef __int64 intptr_t; #else typedef _…

Canal实现mysql与缓存同步

什么是Canal Canal是阿里巴巴旗下的一款开源项目, 基于java开发. Canal是基于mysql的主从同步来实现的. github地址: https://github.com/alibaba/canal Canal把自己伪装成MySQL的一个slave节点, 从而监听master的binary log变化. 再把得到的变化信息通知给Canal的客户端, 进而…

vue3 element plus 上传下载

文章目录 上传下载 上传 /* html */ <el-upload v-model"fileId" class"avatar-uploader" ref"exampleUploadRef" :file-list"fileList" :show-file-list"false" action"/ys-three-year/ThreeReport/uploadFile&q…

Python从0到100(五):Python分支结构和循环结构

一、分支结构&#xff1a; Python中的分支结构和循环结构是编写程序时常用的控制结构。在Python中&#xff0c;分支结构通过if、elif和else关键字来实现条件判断。在使用if语句时&#xff0c;程序会根据条件表达式的真假执行相应的代码块。 if condition1:# 如果条件1为真&am…

YOLOv5改进 | 图像去雾 | 利用图像去雾网络UnfogNet辅助YOLOv5进行图像去雾检测(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是利用UnfogNet超轻量化图像去雾网络,我将该网络结合YOLOv5针对图像进行去雾检测(也适用于一些模糊场景),我将该网络结构和YOLOv5的网络进行结合同时该网络的结构的参数量非常的小,我们将其添加到模型里增加的计算量和参数量基本可…

每天一点正压采样器小知识

只要你奔跑&#xff0c;这个世界就会跟着你奔跑&#xff0c; 只要你停驻&#xff0c;这个世界就会舍弃你独自奔跑&#xff0c; 唯有你确定一个方向&#xff0c;使劲的跑起来&#xff0c; 这个世界会为你而让路。 每天一点正压采样器小知识 该采样器活赛与气筒采用全金属密封&am…

操作系统知识-存储管理+文件管理管理-嵌入式系统设计师备考笔记

0、前言 本专栏为个人备考软考嵌入式系统设计师的复习笔记&#xff0c;未经本人许可&#xff0c;请勿转载&#xff0c;如发现本笔记内容的错误还望各位不吝赐教&#xff08;笔记内容可能有误怕产生错误引导&#xff09;。 本章的主要内容见下图&#xff1a; 1、存储管理&#…

[c++]内存管理

1. C/C内存分布 我们先来看下面的一段代码和相关问题 int globalVar 1; static int staticGlobalVar 1; void Test() { static int staticVar 1; int localVar 1; int num1[10] { 1, 2, 3, 4 }; char char2[] "abcd"; const char* pChar3 "abcd"; …

Redis 八种常用数据类型详解

夯实基础&#xff0c;这篇文章带着大家回顾一下 Redis 中的 8 种常用数据类型&#xff1a; 5 种基础数据类型&#xff1a;String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Set&#xff08;集合&#xff09;、Hash&#xff08;散列&#xff09;、Zse…

想进阿里?先搞懂Spring Bean的循环依赖!

如有疑问或者更多的技术分享,欢迎关注我的微信公众号“知其然亦知其所以然”! 嗨,小伙伴们!我是小米,你们的技术分享小助手!今天我们要聊的话题可是技术圈内颇为热门的“阿里巴巴面试题:Spring的循环依赖”哦!相信很多小伙伴都会在技术面试中遇到类似的问题,没错,循…

QT网络编程之获取本机网络信息

一.概述 查询一个主机的MAC地址或者IP地址是网络应用中常用到的功能&#xff0c;Qt提供了QHostInfo和QNetworkInterface 类可以用于此类信息的查询 1.QHostInfo 类&#xff08;显示和查找本地的信息&#xff09; 2.QNetworkInterface 类&#xff08;获得应用程序上所在主机的…

8.JavaWebHTML标签与CSS页面美化和布局控制

目录 导语&#xff1a; 一、HTML表单标签 二、CSS页面美化和布局控制 结语&#xff1a; 导语&#xff1a; 在Web开发中&#xff0c;HTML和CSS是两个不可或缺的技术。HTML&#xff08;HyperText Markup Language&#xff09;用于构建网页的结构&#xff0c;而CSS&#xff08…

【送书福利第五期】:ARM汇编与逆向工程

文章目录 &#x1f4d1;前言一、ARM汇编与逆向工程1.1 书封面1.2 内容概括1.3 目录 二、作者简介三、译者介绍&#x1f324;️、粉丝福利 &#x1f4d1;前言 与传统的CISC&#xff08;Complex Instruction Set Computer&#xff0c;复杂指令集计算机&#xff09;架构相比&#…

RabbitMQ的幂等性、优先级队列和惰性队列

文章目录 前言一、幂等性1、概念2、消息重复消费3、解决思路4、消费端的幂等性保障5、唯一 ID指纹码机制6、Redis 原子性 二、优先级队列1、使用场景2、如何添加3、实战 三、惰性队列1、使用场景2、两种模式3、内存开销对比 总结 前言 一、幂等性 1、概念 2、消息重复消费 3、…

day12-SpringBootWeb 登录认证

一、登录功能 Slf4j RestController public class LoginController {Autowiredprivate EmpService empService;PostMapping("/login")public Result login(RequestBody Emp emp){log.info("员工登录: {}", emp);Emp e empService.login(emp);//登录失败, …

2024考研国家线公布,各科分数线有哪些变化?考研国家线哪些涨了,哪些跌了?可视化分析告诉你

结论在文章结尾 2024考研国家线 一、近五年国家线趋势图-学术硕士 文学 管理学 工学照顾专业 体育学 交叉学科 军事学 历史学 理学 享受少数名族照顾政策的考生 中医类照顾专业 教育类 艺术类 医学 工学 哲学 法学 农学 经济学 二、近五年国家线趋势图-专业硕士 中医 应用心理 …

S3fd: Single shot scale-invariant face detector

目录 摘要一、介绍二、相关工作三、单镜头尺度不变人脸检测器3.1. Scale-equitable框架3.2. 尺度补偿锚匹配策略3.3. 最大输出背景标签3.4 训练4.实验4.1. 模型分析4.2. 基准评价4.3 推理时间 5 结论 摘要 本文提出了一种实时人脸检测器&#xff0c;称为单镜头尺度不变人脸检测…

判断素数(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int value 0;int i 2;int result 0;//循环获取用户值并判断值是否符合要求&#xff1b;while (1){//提示用户值需要满…