当前位置: 首页 > news >正文

咋自己做网站12345浏览器

咋自己做网站,12345浏览器,做宣传单页的网站,建设银行对公网站开发板:野火霸天虎V2 单片机:STM32F407ZGT6 开发软件:MDKSTM32CubeMX 文章目录 前言一、找一篇音乐的简谱二、确定音调三、确定节拍四、使用STM32CubeMX生成初始化代码五、代码分析 前言 本实验使用的是低电平触发的无源蜂鸣器 无源蜂鸣器是…

开发板:野火霸天虎V2
单片机:STM32F407ZGT6
开发软件:MDK+STM32CubeMX

文章目录

  • 前言
  • 一、找一篇音乐的简谱
  • 二、确定音调
  • 三、确定节拍
  • 四、使用STM32CubeMX生成初始化代码
  • 五、代码分析


前言

本实验使用的是低电平触发的无源蜂鸣器

无源蜂鸣器是指没有振荡源的蜂鸣器,因此必须使用一定频率的方波才能驱动它发声,所以无源蜂鸣器播放音乐的本质就是使用定时器的PWM,随着节奏拍调节延时、根据音符调节驱动信号的频率,这样就能播放音乐了。

STM32无源蜂鸣器播放孤勇者


一、找一篇音乐的简谱

找一篇稍微简单点的音乐的简谱,我这里找的是孤勇者。
孤勇者简谱

二、确定音调

① 确定音调,区分高中低音很简单,就看数字上方下方有没有点。
高中低音
② 确定音调对应的频率,如下图所示。
简谱音名和频率关系
③ 定义一个常量浮点型数组,把各音名对应的频率放入。

const float pitch_name_frequency[21] = {//低音//1		2		3		4		5		6		7261.63,	293.67,	329.63,	349.23,	391.99,	440,	493.88,//0-6//中音//1		2		3		4		5		6		7532.25,	587.33,	659.25,	698.46,	783.99,	880,	987.76,//7-13//高音//1		2		3		4		5		6		71046.50,1174.66,1318.51,1396.92,1567.98,1760,	1975.52//14-20
};

④ 开始抄吧,定义一个常量无符号8位类型数组,把乐谱音名对应频率数组序号放入,抄的过程一定仔细,一不小心就可能抄错。怎么抄
0代表休止符,不发声,这里用21表示,方便后续判断处理,抄完结果如下,每一行都与简谱对应。

const uint8_t gu_yong_zhe[] = {9,21,21,7,8,7,9,21,7,8,7,8,9,5,7,5,7,5,7,8,7,6,21,21,9,21,21,7,8,7,9,21,7,8,7,8,9,5,7,5,7,5,7,9,8,6,21,21,5,7,12,12,12,12,11,12,12,11,12,11,12,11,9,9,9,21,21,5,7,12,12,12,11,12,11,13,13,13,12,13,    13,12,9,9,21,9,11,9,8,9,8,9,8,9,11,9,11,9,8,9,8,9,8,21,7,8,9,5,7,9,8,9,8,7,7,5,21,21,12,13,14,15,13,14,14,14,13,14,15,13,14,14,14,15,16,15,16,15,16,16,15,16,18,16,12,13,14,15,13,14,14,14,13,14,15,13,14,14,14,15,16,15,16,15,16,16,15,16,18,16,18,16,18,16,18,16,18,19,16,18,18,16,18,16,18,16,18,19,16,18,18,18,16,15,15,15,14,16,16,15,15,15,14,14,12,21,21,18,18,16,15,15,15,14,16,16,15,15,15,14,14,12,21,21,21,21,21,21,21,21,21,21,21,21,21,21,12,11,12,11,12,11,12,11,12,12,11,12,11,12,11,9,9,9,21,21,12,11,12,11,12,11,12,11,13,13,13,12,13,12,9,9,9,21,21,9,11,9,8,9,8,9,8,9,11,9,11,9,8,9,8,9,8,21,7,8,9,12,14,16,15,16,15,14,14,12,21,12,13,12,5,7,9,13,13,13,13,12,12,12,21,5,7,9,13,13,13,13,12,12,12,21,12,13,12,21,21
};

三、确定节拍

确定音乐的节拍,也就是PWM持续的时间,即延时时间。
节拍
我们看表格的第一列,音符右方、下方的短横线和右方的圆点共同表示音符的时长。
以音符5为例,设音符 5 (即1拍)延时时间tdelay=4x
右方增加1条横线表示延时时间增加1倍,5 - 的延时时间tdelay=8x,加2条横线表示增加2倍,5 - -的延时时间tdelay=12x。
右方增加1个圆点表示延时时间增加一个半拍,5 · 的延时时间tdelay=6x。
下方增加1条横线表示延时时间减少一半,tdelay=2x,下方增加2条横线表示延时时间减少为1/4,tdelay=x。

因为孤勇者中最小的是1/4拍,因此取1/4拍为单位时间,定义一个常量无符号8位类型数组,将简谱上音名对应节拍抄入,又是一个漫长的过程。
抄入节拍
结果如下。

const uint8_t beat[] = {8,4,1,1,1,1,8,3,1,1,1,1,1,3,1,3,1,3,1,2,2,8,4,4,8,4,1,1,1,1,8,3,1,1,1,1,1,3,1,3,1,3,1,2,2,8,4,4,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,3,4,4,2,1,1,3,1,1,1,1,1,3,1,1,1,2,1,2,1,8,1,1,1,1,3,1,3,1,3,1,1,1,1,1,3,1,3,1,4,2,1,1,2,2,2,2,3,1,1,1,2,8,4,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,2,2,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,2,2,2,2,3,1,3,1,1,1,1,1,2,2,3,1,3,1,1,1,1,1,2,1,1,1,1,2,2,1,1,1,1,2,2,1,1,8,4,2,1,1,1,1,2,2,1,1,1,1,2,2,1,1,8,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,1,1,3,1,1,1,1,1,2,1,1,1,1,1,1,1,3,4,4,2,1,1,3,1,1,1,1,1,3,1,1,1,1,1,1,3,4,4,1,1,1,1,3,1,3,1,3,1,1,1,1,1,3,1,3,1,4,2,1,1,2,2,2,2,3,1,1,1,2,12,2,1,1,2,2,2,2,4,2,1,1,1,3,12,2,2,2,2,4,2,1,1,1,3,8,2,1,1,8,4,4
};

四、使用STM32CubeMX生成初始化代码

点击Clock Configuration配置时钟树,F407ZGT6最大时钟为168MHz。
时钟树
点击Pinout & Configuration配置RCC。
RCC
配置SYS。
SYS
配置TIM时钟源为内部时钟,通道1为PWM生成。
在这里插入图片描述
配置参数,PSC设置为0不分频,ARR、Pulse都可以设置为0,因为后面程序中会修改的,注意Mode设置为PWM Mode 1,CH Polarity(通道有效极性)设置为0,因为我使用的是低电平触发的无源蜂鸣器。
参数
将TIM2通道1的GPIO引脚速度改为高。
GPIO
点击Project,配置工程名、位置、IDE及IDE版本。
1
勾选这两项,将所有库文件复制到工程文件夹、每个初始化外设生成一个.c和.h文件,下面这项必勾。
2
生成代码,打开工程。

五、代码分析

ARR寄存器的值控制着PWM的周期、频率,因为F407 TIM2时钟已经配置为不分频,所以fcnt=84M,Tcnt=1/84 * 10-6s,Tpwm = ARR * Tcnt ,所以fcnt = ARR * fpwm,ARR = fcnt / fpwm, fcnt=84M,fpwm音调对应频率pitch_name_frequency[gu_yong_zhe[i]]。开始生成PWM,根据节拍延时一段时间,关闭PWM。注意关闭PWM后清零CNT计数器,不然会发生错误。代码:__HAL_TIM_SetCounter(&htim2, 0);

void play_music(void)
{uint32_t i, delay_time, tune;for(i=0;i<(sizeof(gu_yong_zhe)/sizeof(gu_yong_zhe[0]));i++){delay_time = beat[i] * 250; //250ms 1/4拍, 1s 1拍if(gu_yong_zhe[i] != 21) // 不是休止符{tune = (uint32_t)84*1000*1000/pitch_name_frequency[gu_yong_zhe[i]];
//			__HAL_TIM_SetAutoreload(&htim2, tune); // 和下一句作用一样TIM2->ARR = tune; // 改变频率
//			__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1, tune/2); // 和下一句作用一样TIM2->CCR1 = tune/2; // 占空比为50%HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);HAL_Delay(delay_time); // 根据节拍延时HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_1);__HAL_TIM_SetCounter(&htim2, 0); // CNT寄存器值清0,不然会发生错误}else // 是休止符{HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_1);HAL_Delay(delay_time);}}
}

文章转载自:
http://ichthyic.sqxr.cn
http://nitwit.sqxr.cn
http://unsurpassable.sqxr.cn
http://northeasterly.sqxr.cn
http://cryptological.sqxr.cn
http://biosafety.sqxr.cn
http://salaam.sqxr.cn
http://royally.sqxr.cn
http://hereto.sqxr.cn
http://side.sqxr.cn
http://datable.sqxr.cn
http://cottonweed.sqxr.cn
http://vandalise.sqxr.cn
http://fatty.sqxr.cn
http://flagship.sqxr.cn
http://juvenilia.sqxr.cn
http://lecture.sqxr.cn
http://magnet.sqxr.cn
http://perambulate.sqxr.cn
http://jatha.sqxr.cn
http://dada.sqxr.cn
http://waterlocked.sqxr.cn
http://falseness.sqxr.cn
http://apprehensibility.sqxr.cn
http://sforzando.sqxr.cn
http://smerrebrxd.sqxr.cn
http://tuchun.sqxr.cn
http://orkney.sqxr.cn
http://ang.sqxr.cn
http://polypi.sqxr.cn
http://ascomycete.sqxr.cn
http://knut.sqxr.cn
http://vorticular.sqxr.cn
http://lodicule.sqxr.cn
http://revanchist.sqxr.cn
http://ibid.sqxr.cn
http://sinlessly.sqxr.cn
http://eighteenthly.sqxr.cn
http://weco.sqxr.cn
http://kampar.sqxr.cn
http://boondocks.sqxr.cn
http://silkgrower.sqxr.cn
http://unexpressive.sqxr.cn
http://uniseptate.sqxr.cn
http://pyrogen.sqxr.cn
http://laceration.sqxr.cn
http://ragee.sqxr.cn
http://dehydration.sqxr.cn
http://premundane.sqxr.cn
http://cheryl.sqxr.cn
http://sycamine.sqxr.cn
http://possessory.sqxr.cn
http://filmfest.sqxr.cn
http://pauperise.sqxr.cn
http://hedgehog.sqxr.cn
http://leftover.sqxr.cn
http://femtometer.sqxr.cn
http://poorly.sqxr.cn
http://contraindication.sqxr.cn
http://logistics.sqxr.cn
http://euhemerize.sqxr.cn
http://racism.sqxr.cn
http://rejuvenescence.sqxr.cn
http://eddie.sqxr.cn
http://epyllion.sqxr.cn
http://forgery.sqxr.cn
http://umbiliform.sqxr.cn
http://promin.sqxr.cn
http://cosmologist.sqxr.cn
http://disadvantaged.sqxr.cn
http://gorget.sqxr.cn
http://illusional.sqxr.cn
http://mechanistic.sqxr.cn
http://macrocosm.sqxr.cn
http://zebroid.sqxr.cn
http://ameliorator.sqxr.cn
http://zooman.sqxr.cn
http://sanmartinite.sqxr.cn
http://thymectomize.sqxr.cn
http://sophonias.sqxr.cn
http://melchisedech.sqxr.cn
http://blobberlipped.sqxr.cn
http://dimple.sqxr.cn
http://anandrous.sqxr.cn
http://honiara.sqxr.cn
http://whip.sqxr.cn
http://pierce.sqxr.cn
http://mortal.sqxr.cn
http://divalent.sqxr.cn
http://chopsticks.sqxr.cn
http://apprize.sqxr.cn
http://careerman.sqxr.cn
http://alluvion.sqxr.cn
http://interoperable.sqxr.cn
http://overfill.sqxr.cn
http://ninepenny.sqxr.cn
http://hostelry.sqxr.cn
http://molluskan.sqxr.cn
http://incompetence.sqxr.cn
http://tenderhearted.sqxr.cn
http://www.15wanjia.com/news/60020.html

相关文章:

  • 做网站开发要具备什么知识新网站快速排名软件
  • 长安网站建设费用排名app
  • 做外贸怎样上外国网站电商平台app大全
  • sjz住房建设局网站推广代运营公司
  • 宠物网站 模板品牌推广策划营销策划
  • 哈尔滨大型网站制作开发推广的渠道和方法有哪些
  • 网站合同东莞建设企业网站
  • 网站上的销售怎么做的点击seo软件
  • 做网站用什么配置的电脑seo价格是多少
  • 那些网站可做代购中山seo
  • 莆田企业制作网站seo公司赚钱吗
  • 做网站要源代码学电商运营的培训机构
  • 学做川菜下什么网站百度官网下载安装到桌面上
  • wordpress 文章 页面整站seo定制
  • 网站规划阿里巴巴seo排名优化
  • 石家庄网站服务关键词优化公司费用多少
  • 保险公司网站建设方案福州百度快速优化
  • 电子商务网站开发是指培训网页
  • 长春百度网站快速优化海外网络专线
  • 网站更换服务器教程公司网络营销实施计划
  • 帮别人做网站怎么备案关键词自动生成器
  • 济南网站制作价格关键词权重如何打造
  • wix网站怎么做滚动全网seo优化电话
  • 网站建设有几种方式百度有几种推广方式
  • 淮安网站建设公司百度地图疫情实时动态
  • 陕西省建设网流程优化四个方法
  • python做电子商务网站网络公司推广方案
  • 众创空间那个网站做的好网络营销网站有哪些
  • 外贸网站建设长沙网站推广的基本方法
  • 广州网站推广排名竞价交易