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

北京通州区网站建设外链提交

北京通州区网站建设,外链提交,开商城网站,做简单网站用什么软件有哪些开发板:野火霸天虎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://www.yayakq.cn/news/106625/

相关文章:

  • 闵行交大网站建设wordpress 正计时
  • 周年庆网站要怎么做6wordpress自适应 the7
  • php免费网站建设南宁工程建设信息网
  • 徐州cms建站服装 公司 网站建设
  • 佛山外贸网站设计请拿笔记记下新域名
  • 手机企业网站设计理念做兼职哪个网站好
  • 网站建设术语触屏版网站开发
  • 顺德公司做网站企业营销网站建立
  • 网页设计公司平台保定网站建设seo优化营销
  • 青岛网站建设情况公众号开发需要提供什么
  • 南山的网站建设做网站接项目
  • 网站备案需要多久创新的网站建设公司排名
  • 杭州做公司网站的公司免费主机空间
  • 目前最先进的网站建设技术查wordpress模板
  • 中山品牌网站建设推广网站后台查询软件
  • 镇江房产网站建设好用的网站链接
  • 长沙建个网站要多少钱莆田网站建设哪家好
  • 海南省建设工程质量监督网站民网东莞网站建设
  • 做网站源码要给客户嘛衡阳seo优化公司
  • 专门做考研的网站现在推广平台哪家最好
  • 怎么做微信网站wordpress社区小程序
  • 网站存在的问题及改进措施seo关键字优化教程
  • 小迪网站建设redis做缓存的网站并发数
  • 成都企业网站建设方案网页设计代码html分行
  • 东莞长安网站设计静海网站建设
  • 哪个网站开发软件网站建设模板代码
  • 驻马店制作网站的公司响应式网站和自适应网站区别
  • WordPress上传ssl证书竞价推广和seo的区别
  • 南宁百度网站建设公司哪家好未成年人做网站
  • 网站数据库连接不上的常见问题品牌的营销系统