STM32 蜂鸣器介绍 配置 播放音节

2023-11-08 00:20

本文主要是介绍STM32 蜂鸣器介绍 配置 播放音节,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        蜂鸣器一般被分为两类有源蜂鸣器无源蜂鸣器其中源是振荡源有源蜂鸣器内部有正当电路,可以把直流电源转换为一定频率的脉冲信号。因为它一直输出一定的频率,我们无法改变频率,我们只能通过电源,控制它发不发声,且声音只有一种。

        无源蜂鸣器没有内部的振荡源,我们给它一个信号,控制其频率就能发出不同的声音。而我们平时听到的音乐都是有音阶的,音节又是受频率控制,所以我们只要控制其频率就能发出所需要的音节和音乐。市面上大部分的电子琴,也是这种原理。

        在控制无源蜂鸣器的时候,只给它一个低电平或者高电平,它是不会响的。必须给他一个频率或者说是一个方波,它才会发声。

	TIM_TimeBaseStructure.TIM_Period = 999;  TIM_TimeBaseStructure.TIM_Prescaler = 71;  

        此时分频PSC为72,ARR为1000,所以此时定时器为1MHz,因为音节的频率不一样,所以我们只需要更改TIM_Period,调整它的频率既可以。

        举个例子,我们现在需要发出中 1 DO,f=523HZ。

        从上面两行代码可以知道,此时定时器的PSC是72,并且我们知道STM32F10x的总线时钟最大为是72MHz,所以现在定时器为1MHz,所以而我们想要把1MHz时间设置为1us,即为1/1000,设x=ARR。众所周知,频率等于周期的倒数,得ARR*单次时间=总时间,即\frac{x}{1000000}=\frac{1}{1000}可以计算出x=1000,所以我们可以知道当ARR=1000的时候,定时器周期为1ms。

        我们现在反过来,可以知道频率=单次时间/ARR,而需要的频率是523,即523=\frac{1000000}{x},计算机按一下大概就是1912,所以ARR=1912。

        这里不理解可以看看这个,STM32 TIM定时器,配置,详解(1)-CSDN博客

        代码中的占空比记得要改。

void TIM4_PWM_Configuration(void)
{GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOB, &GPIO_InitStructure);TIM_TimeBaseStructure.TIM_Period = 1911;  TIM_TimeBaseStructure.TIM_Prescaler = 71;  //TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OCInitStructure.TIM_Pulse = 1912/2;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OC3Init(TIM4, & TIM_OCInitStructure);TIM_Cmd(TIM4, ENABLE);
}

        我们先把需要的音节找出来 523, 587, 659, 698, 784, 880, 988。

        我们设置一个数组把这些音节的频率先放进去。

unsigned int tone[]= {523, 587, 659, 698, 784, 880, 988};

        通过之前的计算我们可以知道,我们只需要改ARR的值而ARR=1000000/音节频率。而占空比设为50%,即为ARR/2.所以我们可以可以写出一个函数,去自动计算和输入ARR和CCR3。

void sound(unsigned int fre)
{TIM4->ARR = 1000000 / fre;TIM4->CCR3 = 500000 / fre;
}
/* Set the Capture Compare Register value */
//  TIMx->CCR3 = TIM_OCInitStruct->TIM_Pulse;
int main(void)
{SysTick_Configuration();TIM4_PWM_Configuration();	 while(1){	sound(tone[0]);  Delay_us(1000000);sound(tone[1]);Delay_us(1000000);sound(tone[2]);  Delay_us(1000000);sound(tone[3]);Delay_us(1000000);sound(tone[4]);Delay_us(1000000);	sound(tone[5]);  Delay_us(1000000);sound(tone[6]);Delay_us(1000000);	}
}

这篇关于STM32 蜂鸣器介绍 配置 播放音节的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

springboot security之前后端分离配置方式

《springbootsecurity之前后端分离配置方式》:本文主要介绍springbootsecurity之前后端分离配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的... 目录前言自定义配置认证失败自定义处理登录相关接口匿名访问前置文章总结前言spring boot secu

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

Spring Boot结成MyBatis-Plus最全配置指南

《SpringBoot结成MyBatis-Plus最全配置指南》本文主要介绍了SpringBoot结成MyBatis-Plus最全配置指南,包括依赖引入、配置数据源、Mapper扫描、基本CRUD操... 目录前言详细操作一.创建项目并引入相关依赖二.配置数据源信息三.编写相关代码查zsRArly询数据库数

SpringBoot配置Ollama实现本地部署DeepSeek

《SpringBoot配置Ollama实现本地部署DeepSeek》本文主要介绍了在本地环境中使用Ollama配置DeepSeek模型,并在IntelliJIDEA中创建一个Sprin... 目录前言详细步骤一、本地配置DeepSeek二、SpringBoot项目调用本地DeepSeek前言随着人工智能技