蜂鸣器放歌-污钞vtor
污钞vtor
【00】序
学习江科大自化协的pwm输出逻辑
https://www.bilibili.com/video/BV1th411z7sn?p=15
配合前面的时间片轮询,用逻辑分析仪精确确定频率
演示视频,孙楠韩红-美丽的神话
https://www.bilibili.com/video/BV1Z44y1f7pX
程序比较简单,就不进行讲解。
【01】配置频率
使用stm32定时器4通道3输出不同频率的pwm
配置如图,psc为1-1,arr为72-1,pulse为36
// 时钟频率为72000000
// arr为72 - 1,// cnt为36,占空比稳定在50%
// 根据arr调整频率,freq = SysFreq / (arr + 1) / (psc + 1)
// 所以psc = SysFreq / (arr + 1) / freq - 1
// = 72000000 / 72 / freq - 1
// = 1000000 / freq - 1
// 因为psc是short类型,所以最低频率为20Hz
后来使用逻辑分析仪,确定频率正确!!!
【02】配置音调
https://zhidao.baidu.com/question/1929397911420653787.htm
分出 静音 低八度 中八度 高八度
0 1~7 11~17 21~27
实现BEEP_PlayTone函数
ToneNode
前面数据表示音阶,后面数据表示节拍数
【03】演奏歌曲
使用ToneNode组成歌曲
使用pCurMusic指向要演奏的歌曲
使用pCurTone指向正在演奏的音符
初始化时,启动pwm输出
新建时间片,载入轮询队列,开始放歌
【04】美丽的神话曲谱
short musicShenHua[]={ L0,4, L6,4,M3,4,L7,8,L0,2, L6,2,M1,2,M2,3, M1,1,M3,8,L0,2, L6,4,M6,4,M5,2,M6,2,M5,2,M2,2,M3,1,M4,2,M3,13,L0,6, L6,4,M6,4,M5,2,M2,2,M3,2,M4,2,M3,8,M1,8,L0,2, L6,4,M3,4,M2,6,L7,4,L6,16,L0,8, L6,4,M3,4,L7,8,L0,2, L6,2,M1,2,M2,3, M1,1,M3,8,L0,2, L6,4,M6,4,M5,2,M6,2,M5,2,M2,2,M3,1,M4,2,M3,13,L0,6, L6,4,M6,4,M5,1,M2,1,M3,3,M4,3,M3,4,M2,4,M1,8,L0,2, L6,4,M3,4,M2,6,L7,4,L6,12,L0,8, L6,2,L7,2,M1,2,M2,2,M3,2,M1,2,L7,4,L5,4, L0,1, L6,2,M1,2,M2,3,M3,3,M3,4,L0,2, L6,2,L7,2,M1,2,M2,2,M3,2,M1,2,L7,4,L5,4, L0,1, L6,2,M1,2,M2,3,L7,3,M1,4,L0,2, L6,2,L7,2,M1,2,M2,2,M3,2,M1,2,L7,4,L5,4, L0,1, L6,2,M1,2,M2,3,M3,3,M3,4,L0,2, L6,2,L7,2,M1,2,M2,2,M3,2,M1,2,L7,4,L5,4, L0,1, L6,2,M1,2,M2,3,L7,3,M1,4,L0,2, M1,1,M1,1,M2,2,M3,2,M1,2,L7,4,L5,4, M1,4,L7,4,L5,6, L0,1, L7,4,L6,8,L0,8, L0,1,L0,1, }; struct ToneNode *pCurMusic = NULL; struct ToneNode *pCurTone = NULL;