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

相关文章

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

QT Creator配置Kit的实现示例

《QTCreator配置Kit的实现示例》本文主要介绍了使用Qt5.12.12与VS2022时,因MSVC编译器版本不匹配及WindowsSDK缺失导致配置错误的问题解决,感兴趣的可以了解一下... 目录0、背景:qt5.12.12+vs2022一、症状:二、原因:(可以跳过,直奔后面的解决方法)三、解决方

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

Java中HashMap的用法详细介绍

《Java中HashMap的用法详细介绍》JavaHashMap是一种高效的数据结构,用于存储键值对,它是基于哈希表实现的,提供快速的插入、删除和查找操作,:本文主要介绍Java中HashMap... 目录一.HashMap1.基本概念2.底层数据结构:3.HashCode和equals方法为什么重写Has