基于stm32F103的蜂鸣器周期发声实验

蜂鸣器作为一种声音报警器件,应用广泛。本实验基于stm32F103单片机,通过控制蜂鸣器的IO口电平电压,使其周期性地进行电平翻转,从而驱动蜂鸣器发出周期性的鸣叫声。该实验主要运用了stm32的GPIO和定时器TIM的相关功能,不仅可以巩固这些外设的使用,也可以通过改变时间参数,控制蜂鸣器的鸣叫频率,拓展实验的变化性。

实验原理:
微控制器输出PWM波形信号,通过改变工作周期和占空比参数,可控制蜂鸣器的音调和音量。本实验使用stm32F103的定时器中断来生成波形信号,无需CPU参与PWM波形的形成,降低了CPU占用率。在中断服务函数中,我们通过翻转蜂鸣器对应IO口的电平状态,使其在高低电平间周期性切换,从而为蜂鸣器提供PWM驱动波形。

实验步骤:

初始化蜂鸣器接口GPIO

配置定时器TIM参数,设置中断

在中断函数中翻转蜂鸣器IO,产生波形

程序设计:

#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_tim.h"
#include "stm32f10x_rcc.h"
#include "misc.h"
#include "stm32f10x_it.h"/* 初始化蜂鸣器对应IO口PB8 */
void Beep_Init(void)  
{// 使能GPIOB的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);// 配置PB8为推挽输出模式GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);
}/* 定时器3中断初始化,定时1ms */
void TIM3_Init(void)  
{// 初始化定时器结构体TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;// 使能TIM3和APB1的时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);// 定时周期1ms,分频系数7200TIM_TimeBaseStructure.TIM_Period = 1000;  TIM_TimeBaseStructure.TIM_Prescaler =7200; // 初始化TIM3TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);  // 允许TIM3更新中断TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);  // 设置中断优先级并使能NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);// 使能定时器TIM_Cmd(TIM3, ENABLE);   
}/* 定时器中断服务函数,蜂鸣器翻转 */  
void TIM3_IRQHandler(void)
{// 判断更新中断是否发生if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  {// 翻转蜂鸣器IO电平GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_8)));// 清除中断标志TIM_ClearITPendingBit(TIM3, TIM_IT_Update); }
}int main(void)  
{Beep_Init();TIM3_Init();while(1){ }
}

通过修改定时周期可以改变蜂鸣器的鸣叫频率,实验过程灵活。

我这里分享一个包含150G学习资料的免费资料包,里面包含的学习内容、面试经验和项目实例都是比较新的和全面的https://m.hqyjai.net/emb_study_blue_short.html?xt=lwf

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

档案数字化加工涉密资质申请

等级介绍 涉密印制资质分为甲级和乙级两个等级。甲级资质单位可以从事绝密级、机密级和秘密级涉密印制业务。乙级资质单位可以从事机密级、秘密级涉密印制业务。 类别介绍 涉密印制资质包括涉密文件资料、国家统一考试试卷、涉密防伪票据证书、涉密光电磁介质、 涉…

题目 1138: C语言训练-求矩阵的两对角线上的元素之和

问题描述: 求矩阵的两对角线上的元素之和 样例输入: 3 1 2 3 4 5 6 7 8 9 样例输出: 25 问题分析: 因为奇数阶矩阵的主对角线和副对角线上的元素有重复,偶数阶矩阵的主对角线和副对角线上的元素无重复&#x…

软件测试面试题汇总

一、面试基础题 简述测试流程: 1、阅读相关技术文档(如产品PRD、UI设计、产品流程图等)。 2、参加需求评审会议。 3、根据最终确定的需求文档编写测试计划。 4、编写测试用例(等价类划分法、边界值分析法等)。 5、用例评审(…

OpenHarmony JS和TS三方组件使用指导

OpenHarmony JS和TS三方组件介绍 OpenHarmony JS和TS三方组件使用的是OpenHarmony静态共享包,即HAR(Harmony Archive),可以包含js/ts代码、c库、资源和配置文件。通过HAR,可以实现多个模块或者多个工程共享ArkUI组件、资源等相关代码。HAR不…

文件上传漏洞--Upload-labs--Pass07--点绕过

一、什么是点绕过 在Windows系统中,Windows特性会将文件后缀名后多余的点自动删除,在网页源码中,通常使用 deldot()函数 对点进行去除,若发现网页源代码中没有 deldot() 函数,则可能存在 点绕过漏洞。通过点绕过漏洞&…

响应式编程要点 (Java)

整体学习概览 前置知识函数式编程Lambda表达式实践、Java8 Stream Api的使用响应式编程的原理和思想Reactive Stream的思想和Api实践Reactor思想和Api实践WebFlux的使用SpringData R2DBC 前置知识:函数式编程 函数式编程要点-CSDN博客 响应式编程原理和思想 全链…

SwiftUI 更自然地向自定义视图传递参数的“另类”方式

概览 在 SwiftUI 中,正是自定义视图让我们的 App 变得与众不同!然而,除了传统的视图接口定义方式以外,我们其实还可以有更“银杏化”的选择。 如上图所示:对于 SubView 子视图所需的参数我们一开始并没有操之过急&…

[office] excel成绩表格数据排名次的教程 #职场发展#知识分享#媒体

excel成绩表格数据排名次的教程 Excel中经常需要使用到排名次的技巧,成绩表格数据具体该如何排名呢?接下来是小编为大家带来的excel成绩表格数据排名次的教程,供大家参考。 excel成绩表格数据排名次教程(一) 步骤1:不管在学校还是各个统计领…

MySQL8的ONLY_FULL_GROUP_BY SQL模式兼容问题

文章目录 1. 问题描述2. 解决方法1. 修改查询2. 修改SQL模式3. 使用ANY_VALUE()函数 1. 问题描述 Cause: java.sql.SQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column btc-cloud.t1.id which is not funct…

网络入山太困难?看格行随身WiFi如何助力大山教育!

近日,一则关于偏远大山的上网问题冲上了热搜,引发了社会关注。虽然很多山区都已经通了电、通了网,但是在一些贫困的地区,网络基础设施依旧薄弱,村民想要使用固定宽带,仍然十分困难。 而在山区的学生们&…

【漏洞复现】H3C Web网管登录任意文件读取漏洞

Nx01 产品简介 H3C设备的Web网管是指H3C公司生产的网络设备的网络管理界面。它可以通过Web浏览器进行访问和操作,以实现对网络设备的配置、管理和监控。 Nx02 漏洞描述 jquery旧版本存在任意文件读取漏洞,允许攻击者在受害者的服务器上读取任意文件。H3…

SQL数据库基础语法-查询语句

SQL数据库基础语法-查询语句 Group By #对数据进行分组 >select name,count(id) from student group by name; #查询name字段人数,cont函数进行计数 >select * from users group by users; >select * from users where id1 group by 2; >select * from …

Excel练习:双层图表

Excel练习:双层图表 学习视频Excel制作双层图表,很多人都不会,其实只需1步操作就够了!_哔哩哔哩_bilibili ​​ 通过调整两个图形的显示范围实现 增加折现图的负数显示范围,使折现图仅出现在整体图形的上方增加柱形…

MQ最终一致性理论与实践

MQ最终一致性理论与实践 原理 分布式事务无论是2PC&3PC还是TCC,基本都遵守XA协议的思想,但全局事务方案并发性较差; 最终一致性方案指的是将最有可能出错的业务以本地事务的方式完成后,采用不断重试的方式(不限…

代码随想录算法训练营(贪心6)| 738.单调递增的数字 968.监控二叉树

738.单调递增的数字 题目链接/文章讲解 968.监控二叉树 (可以跳过) leetcode题目链接 本题是贪心和二叉树的一个结合,比较难,一刷大家就跳过吧。 题目链接/文章讲解 class Solution { private:int result;int traversal(TreeN…

视频接入协议之MIPI

MIPI(Mobile Industry Processor Interface)是一种用于移动设备的串行接口标准,旨在提供高速、低功耗、低成本的接口解决方案。MIPI联盟是一个全球性的组织,致力于开发、推广和管理MIPI标准。 MIPI接口包括了多种协议和规范&…

人工智能之数学基础【梯度下降法】

梯度下降法是求解无约束优化问题的一种简单而有效的优化方法,是一种利用目标函数的Taylor展开构造搜索方向的方法。 思想 梯度下降法三要素:出发点、下降方向、下降步长。用梯度下降法求解优化问题的基本思想可以类比为一个下山的过程,可微分的函数代表一座山,目标就是找…

K8S临时小结

k8s是什么?能解决什么问题? k8s是容器管理平台,一套复杂的开源系统 如何更好的维护pod,k8s第二大要素(pod控制器) k8s的很多对容器(pod)管理的高级特性,都是基于控制器…

4.【架构师成长之路】职场新人:如何快速变得专业(上)

文章目录 导言一、快速变得熟练1、研发类工具2、运维类工具3、泛文档类工具 二、能够系统化思考1、提升思考全面性2、提升内容逻辑性 三、最佳实践本文总结说明 导言 前三篇文章我们讲了在校期间及临近毕业时,你需要做一些怎样的准备。而这些准备本身不仅仅是为了毕…

【算法】树状数组

文章目录 一、基本概念二、核心操作三、常见应用 一、基本概念 树状数组用于动态维护一段区间,操作的时间复杂度为 O ( l o g n ) O(logn) O(logn) 定义: t [ i ] [ i − l o w b i t ( i ) 1 , i ] t[i] [i - lowbit(i) 1, i] t[i][i−lowbit(i)…