l STM32通過PWM與定時器方式控制無源蜂鳴器鳴響
l STM32小音樂盒,歌曲進度條圖形顯示與百分比顯示,歌曲切換
l 程式設計使用STM32 HAL庫
l IIC OLED介面程式設計,動畫實現
PWM+TIME驅動無源蜂鳴器,最大的好處就是可以釋放主迴圈,不讓程式卡主去播放音樂,這型別作業系統的執行緒一樣,音樂在後臺播放,主迴圈可以隨時切換或者關閉音樂或者其它功能操作
視訊演示:https://www.bilibili.com/video/BV1M54y1Y72G
一、 基礎認識
一切的聲音都來源於振動,聲音之所以千變萬化各不相同,是因為他們的振動各不相同。
所謂的頻率就是一秒鐘振動幾次,如300HZ,就是每秒振動300次
頻率對比表
男低音80-320Hz
男中音96-387Hz
男高音122-488Hz
女低音145-580Hz
女高音259-1034Hz
二、音符、音調、節拍
(一) 音符
決定了發音基本單元
1 2 3 4 5 6 7
哆 中 咪 發 字 索 拉 西
(二) 音調
決定了發音的高低
C,D,E,F,G,A,B,調式從小到高排列的
一般大調聽上去比較陽光、幸福、祥和,小調則有些悲傷、憂鬱、有時甚至是陰暗的感覺在裡面。
調號→升降記號標註→調內音級→關係小調(自然小調)
C → 無升降號→ 1 2 3 4 5 6 7 →a小調
G → 1升(#4)→ 5 6 7 1 2 3 #4 →e小調
D → 2升(#4 #1)→2 3 #4 5 6 7 #1 →b小調
A → 3升(#4 #1 #5)→ 6 7 #1 2 3 #4 #5 →#f小調
E → 4升(#4 #1 #5 #2)→ 3 #4 #5 6 7 #1 #2 →#c小調
B → 5升(#4 #1 #5 #2 #6)→ 7 #1 #2 3 #4 #5 #6 →#g小調
#F→ 6升(#4 #1 #5 #2 #6 #3)→ #4 #5 #6 7 #1 #2 #3 →#d小調
#C→ 7升(#4 #1 #5 #2 #6 #3 #7)→ #1 #2 #3 #4 #5 #6 #7 →#a小調
F → 1降(b7)→ 4 5 6 b7 1 2 3 →d小調
bB→ 2降(b7 b3)→ b7 1 2 b3 4 5 6 →g小調
bE→ 3降(b7 b3 b6)→ b3 4 5 b6 b7 1 2 →c小調
bA→ 4降(b7 b3 b6 b2)→ b6 b7 1 b2 b3 4 5 →f小調
bD→ 5降(b7 b3 b6 b2 b5)→ b2 b3 4 b5 b6 b7 1 →bb小調
bG→ 6降(b7 b3 b6 b2 b5 b1)→ b5 b6 b7 b1 b2 b3 4 →be小調
bC→ 7降(b7 b3 b6 b2 b5 b1 b4)→ b1 b2 b3 b4 b5 b6 b7 →ba小調
注意:1# (升半音)和2b (降半音)的頻率相同
音調識別:
,數字下面帶點,低音
,不帶任何點,基本音
,數字上方帶點,高音
(三) 節拍
決定了音符的時間長短
1/4拍,16分音符
半拍,8分音符
一拍,4分音符
兩拍,
三拍
四拍
組合
每拍多長時間沒有固定的說法,
可以參考:
https://wenku.baidu.com/view/78393de517fc700abb68a98271fe910ef12daeba.html
三、 程式設計思路
定時器與PWM方式,這樣可以解放主迴圈,讓程式可以做更多的事情。
l 定時器把握節拍
l PWM把握音調和音符
PWM週期由定時器分頻係數和重灌載值共同決定,STM32F103C8T6的主頻為72MHZ,設定分頻為9,所以最大是8MHZ。我們所需要的最小頻率是262HZ,我們只需要計算得到的重灌載值不大於定時器的重灌載最大值(65535)即可。
公式:
PWM週期(HZ) = 主頻(HZ) / (重灌載值+1)/(分頻係數+1)
262=8000000/x
x=30,534<65535
所以每次轉換音符時,動態修改重灌載值即可實現PWM輸出頻率的變化,進而控制無源蜂鳴器發聲。
定時器將進行ms中斷,判斷每拍時間是否到達,到達則播放下一拍。
四、參考樂譜
兩隻老虎
春節序曲:
難忘今宵
視訊演示:https://www.bilibili.com/video/BV1M54y1Y72G
五、 個人導航
【B站 | 東小東bili】 https://space.bilibili.com/162091292
【部落格園 | 東小東 】https://www.cnblogs.com/dongxiaodong/
【CSDN | 東小東部落格】https://blog.csdn.net/dongxiaodongvip
【微信 | 東小東】dongxiaodongwx