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

相关文章

SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤

《SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤》本文主要介绍了SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤,文中通过示例代码介绍的非常详... 目录 目标 步骤 1:确保 ProxySQL 和 mysql 主从同步已正确配置ProxySQL 的

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

Python实现多路视频多窗口播放功能

《Python实现多路视频多窗口播放功能》这篇文章主要为大家详细介绍了Python实现多路视频多窗口播放功能的相关知识,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下... 目录一、python实现多路视频播放功能二、代码实现三、打包代码实现总结一、python实现多路视频播放功能服务端开

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

Redis多种内存淘汰策略及配置技巧分享

《Redis多种内存淘汰策略及配置技巧分享》本文介绍了Redis内存满时的淘汰机制,包括内存淘汰机制的概念,Redis提供的8种淘汰策略(如noeviction、volatile-lru等)及其适用场... 目录前言一、什么是 Redis 的内存淘汰机制?二、Redis 内存淘汰策略1. pythonnoe

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

windos server2022里的DFS配置的实现

《windosserver2022里的DFS配置的实现》DFS是WindowsServer操作系统提供的一种功能,用于在多台服务器上集中管理共享文件夹和文件的分布式存储解决方案,本文就来介绍一下wi... 目录什么是DFS?优势:应用场景:DFS配置步骤什么是DFS?DFS指的是分布式文件系统(Distr