基于STM32F103C8T6片内Flash的音频播放(DAC通道)
基于STM32F103C8T6片內Flash的音頻播放(DAC通道)
- 一、STM32的DAC通道介紹
- 1、DAC 簡介
- 2、STM32中的DAC主要特點
- 3、DAC 功能框圖剖析
- 4、DAC配置
- 二、實驗要求
- 三、數據準備
- 1、生成mav文件
- 2、使用UltraEdit得到相關數據
- 3、使用notepad++添加相關內容
- 四、使用DAC輸出周期2khz的正弦波
- 五、使用DAC輸出數字音頻歌曲數據轉換為模擬音頻波形輸出
- 六、總結
- 參考
一、STM32的DAC通道介紹
1、DAC 簡介
- DAC 為數字/模擬轉換模塊,故名思議,它的作用就是把輸入的數字編碼,轉換成對應的模擬電壓輸出,它的功能與 ADC 相反。在常見的數字信號系統中,大部分傳感器信號被化成電壓信號,而 ADC 把電壓模擬信號轉換成易于計算機存儲、處理的數字編碼,由計算機處理完成后,再由 DAC 輸出電壓模擬信號,該電壓模擬信號常常用來驅動某些執行器件,使人類易于感知。如音頻信號的采集及還原就是這樣一個過程。
- STM32 具有片上 DAC 外設,它的分辨率可配置為 8 位或 12 位的數字輸入信號,具有兩個 DAC 輸出通道,這兩個通道互不影響,每個通道都可以使用 DMA 功能,都具有出錯檢測能力,可外部觸發。
2、STM32中的DAC主要特點
- 擁有2個DAC轉換器
- DAC通道為8位或12位單調輸出
- DAC通道為12位模式下數據的左對齊或者右對齊
- DAC通道具有同步更新功能
- DAC通道可以生成噪聲波形
- DAC通道可以生成三角波形
- 雙DAC通道同時或者分別轉換
- 每個DAC通道都有DMA功能
3、DAC 功能框圖剖析
- ①中表示的是DAC模塊模擬部分的供電和DAC模塊的參考電壓 ,STM32 的 DAC 規定了它的參考電壓輸入范圍為 2.4—3.3V。一般,取值為3.3V。
- ②中DAC_OUTx表示DAC輸出通道,對應引腳是PA4或者PA5。
4、DAC配置
(1)開啟相應引腳時鐘,設置 PA4 為模擬輸入。(DAC1對應PA4,DAC2對應PA5)
STM32F103ZET6 的 DAC 通道 1 在 PA4 上,所以,我們要使能 PORTA 的時鐘并設置 PA4 為模擬輸入。
DAC 本身是輸出,但是為什么端口要設置為模擬輸入模式呢?
因為一但使能 DACx 通道之后,相應的 GPIO 引腳(PA4 或者 PA5)會自動與 DAC 的模擬輸出相連,設置為輸入,是為了避免額外的干擾。即使是直接用芯片也可以無腦設置為模擬輸入,實驗可得雖然引腳為模擬輸入,但仍可輸出相應信號。
(2)使能相應 DAC 時鐘,本次實驗通道對應為DAC1;
(3)初始化 DAC,設置 DAC 的工作模式;
(4)使能 DAC 轉換通道;
二、實驗要求
- 1)實驗數據準備:用Adobe audition或goldwave等音頻編輯軟件錄制“您好歡迎光臨!”的幾秒鐘的聲音(8khz采樣、8bit量化編碼的單聲道wav格式),確保音頻數據盡量小(最大不超64KB)。然后編程將其分批次寫入stm32f103c8t6芯片內部flash區域。
- 2)數字音頻還原播放任務:編程讀取此段音頻,分別通過 (a)stm32f103c8t6自帶的DAC通道,轉換為模擬音頻進行播放,并用示波器觀察波形,用耳機/喇叭收聽,評判音樂還原效果;
- 提示:建議先用單音音頻(比如2000Hz的正弦波)的wav數據進行實驗,通過DAC或PCM音頻模塊能夠基本還原出原始正弦波聲音后,再用語音和音樂信號進行實驗。
三、數據準備
1、生成mav文件
-
Audition生成輸出一個周期2khz的正弦波的mav文件
-
①選擇文件->新建->音頻文件
-
②設置相關采用頻率
-
③效果->選擇生成基本音色
-
④設置相關頻率
-
⑤導出為mav文件,選擇文件->導出->文件
-
Audition生成一段數字音頻歌曲數據的mav文件
-
打開一段歌曲音頻文件
-
將音頻剪切成5-10s
-
右擊->存儲選區
-
點擊更改:選擇采樣類型為8000Hz,單聲道,16位,再點擊確認
-
導出wav文件
2、使用UltraEdit得到相關數據
-
①用該軟件打開剛才保存的wav文件
-
②CTRL+A全選,接著鼠標右鍵,選擇 十六進制復制選定視圖,將內容粘貼到一個新建文件中
-
③在新建文件中,CTRL+A,接著鼠標右鍵,選擇范圍輸入起始的行號和列號,確定就選中了整個我們需要的內容
3、使用notepad++添加相關內容
- ①打開該軟件后,將上面選中的內容復制粘貼到該軟件中(在上面軟件中,右鍵選擇復制)
- ②在需要添加內容的位置:Alt+c,為十六進制數加0X前綴(一列一列的添加)
四、使用DAC輸出周期2khz的正弦波
-
觀察正弦波的波形我們直接使用野火提高的例程
-
這里使用MATLAB打開例程中的采樣程序
-
然后把輸出的采樣點復制到波形數據中
-
編譯燒錄下載
-
使用示波器測量PA4、PA5的引腳便可看到正弦波形
(這里由于沒有示波器就無法展示波形圖)
五、使用DAC輸出數字音頻歌曲數據轉換為模擬音頻波形輸出
-
將上面使用notepad++添加0x前綴之后的數據復制到keil工程中bsp_dac.c文件的波形數據的數組中
-
編譯燒錄,使用示波器觀察波形
(這里由于沒有示波器就無法展示波形圖)
六、總結
本次對STM32DAC的通道的使用過程中,學習到了DAC是集成了2個輸出緩存,可以用來減少輸出阻抗,無需外部運放即可直接驅動外部負載。每個DAC通道輸出緩存可以通過設置DAC_CR寄存器的BOFFx位來使能或者關閉。整個學習過程很有意思,挺好玩的。
參考
詳細介紹Audition輸出一個周期2khz的正弦波(循環)。將一段數字音頻歌曲數據轉換為模擬音頻波形輸出(循環)。
STM32F103的DAC——輸出聲音效果
總結
以上是生活随笔為你收集整理的基于STM32F103C8T6片内Flash的音频播放(DAC通道)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 功能强大的开源网络监控工具:LibreN
- 下一篇: Samba共享Nextcloud目录