日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于 STM32F103C8T6 对音频数据的 Flash 读取与 DAC 播放

發布時間:2023/12/15 编程问答 105 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于 STM32F103C8T6 对音频数据的 Flash 读取与 DAC 播放 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章內容:

  • STM32F103C8T6 的 Flash 地址空間的數據讀取。
  • STM32F103C8T6 自帶的 DAC 通道,轉換為模擬音頻進行播放,并用示波器觀察波形,用耳機/喇叭收聽,評判音樂還原效果。
  • 目錄

    • 1 項目準備
      • 1.1 具體要求
      • 1.2 項目環境
    • 2 原理簡介
      • 2.1 STM32 的內部 FLASH
      • 2.2 STM32 的 DAC 通道
        • 2.2.1 何為 DAC
        • 2.2.2 STM32 的 DAC 模塊
    • 3 Flash 地址空間的數據讀取
      • 3.1 利用 CubeMX 創建工程
      • 3.2 keil 添加文件
      • 3.3 STLink 調試
        • 3.3.1 STLink 連接并燒錄
        • 3.3.2 調試
    • 4 基于 Flash 的提示音 DAC 播放
      • 4.1 使用 DAC 產生 2khz 周期的正弦波輸出
      • 4.2 使用 DAC 輸出數字音頻歌曲數據轉換為模擬音頻波形輸出
    • 5 總結
    • 6 參考資料

    1 項目準備

    1.1 具體要求

  • Flash 地址空間的數據讀取。 STM32F103C8T6 只有 20KB 內存(RAM)供程序代碼和數組變量存放,因此,針對內部 Flash 的總計 64KB 存儲空間(地址從 0x08000000 開始),運行一次寫入 8KB 數據,總計復位運行代碼 4 次,將 32KB 數據寫入 Flash。并驗證寫入數據的正確性和讀寫速率。
    (用cubemx寫stm32f103c8t6的內部Flash)

  • 基于片內 Flash 的提示音播放程序。
    1)實驗數據準備:用 Adobe audition 或 goldwave 等音頻編輯軟件錄制“您好歡迎光臨!”的幾秒鐘的聲音(8khz 采樣、8bit 量化編碼的單聲道wav格式),確保音頻數據盡量小(最大不超 64KB)。然后編程將其分批次寫入 STM32F103C8T6 芯片內部 Flash 區域。
    2)數字音頻還原播放任務:編程讀取此段音頻,分別通過 STM32F103C8T6 自帶的 DAC 通道,轉換為模擬音頻進行播放,并用示波器觀察波形,用耳機/喇叭收聽,評判音樂還原效果;
    提示:
    建議先用單音音頻(比如 2000Hz 的正弦波)的 wav 數據進行實驗,通過 DAC 或 PCM 音頻模塊能夠基本還原出原始正弦波聲音后,再用語音和音樂信號進行實驗。

  • 1.2 項目環境

    軟件準備

    • STM32CubeMX
    • Keil 5
    • Adobe audition 2022
      (安裝鏈接:https://mp.weixin.qq.com/s/S7IlVsRJZ_j1oq9W1X4ZxA)
    • UltraEdit
      (安裝鏈接:https://pan.baidu.com/s/176szE42lpj2OQ-9Cm8vUgQ 提取碼:luha)
    • notepad++
      (安裝鏈接:https://pan.baidu.com/s/1kbYTzH1IqNJRgKwhN3K7zw 提取碼:luha)

    2 原理簡介

    硬件準備

    • STM32F103C8T6 核心板
    • STlink(安裝鏈接:https://pan.baidu.com/s/1XeKTh1VNQo4JapX7HpGjsw 提取碼:luha )

    2.1 STM32 的內部 FLASH

    • 在 STM32 芯片內部有一個 FLASH 存儲器,它主要用于存儲代碼,我們在電腦上編寫好應用程序后,使用下載器把編譯后的代碼文件燒錄到該內部 FLASH 中,由于 FLASH 存儲器的內容在掉電后不會丟失,芯片重新上電復位后,內核可從內部 FLASH 中加載代碼并運行。
    • STM32 的內部框架圖

    2.2 STM32 的 DAC 通道

    2.2.1 何為 DAC

    • DAC 為數字/模擬轉換模塊,故名思議,它的作用就是把輸入的數字編碼,轉換成對應的模擬電壓輸出,它的功能與 ADC 相反。在常見的數字信號系統中,大部分傳感器信號被化成電壓信號,而 ADC 把電壓模擬信號轉換成易于計算機存儲、處理的數字編碼,由計算機處理完成后,再由 DAC 輸出電壓模擬信號,該電壓模擬信號常常用來驅動某些執行器件,使人類易于感知。如音頻信號的采集及還原就是這樣一個過程
    • STM32 具有片上 DAC 外設,它的分辨率可配置為 8 位或 12 位的數字輸入信號,具有兩個 DAC 輸出通道,這兩個通道互不影響,每個通道都可以使用 DMA 功能,都具有出錯檢測能力,可外部觸發。

    2.2.2 STM32 的 DAC 模塊

    DAC 功能框圖:

    整個 DAC 模塊圍繞框圖下方的“數字至模擬轉換器 x”展開,它的左邊分別是參考電源的引腳:𝑉𝐷𝐷𝐴、𝑉𝑆𝑆𝐴 及 𝑉𝑟𝑒𝑓+,其中 STM32 的 DAC 規定了它的參考電壓 𝑉𝑟𝑒𝑓+ 輸入范圍為 2.4——3.3V。“數字至模擬轉換器 x”的輸入為 DAC 的數據寄存器“DORx”的數字編碼,經過它轉換得的模擬信號由圖中右側的“DAC_OUTx”輸出。而數據寄存器“DORx”又受“控制邏輯”支配,它可以控制數據寄存器加入一些偽噪聲信號或配置產生三角波信號。

    更多詳細介紹可以參考資料:零死角玩轉STM32—F103指南者 提取碼:luha

    3 Flash 地址空間的數據讀取

    3.1 利用 CubeMX 創建工程

    • 配置 SYS
    • 配置 RCC
    • 配置引腳
    • 設置堆棧大小
    • 導出后打開

    3.2 keil 添加文件

    工程源碼鏈接(注意:flash.h文件需要自己重新加入到路徑中)
    鏈接:https://pan.baidu.com/s/1X2U1c_oLlJ9gyqeRgakoVw
    提取碼:luha

    • 將 flash.c 及 flash.h 加入到工程中

    • 在 main.c 文件中添加如下部分代碼


    • 點擊編譯,接著使用 ST-Link 調試

    3.3 STLink 調試

    3.3.1 STLink 連接并燒錄

    • STLink 與 STM32F103 接線
    ST-LINKSTM32F103
    SWCLK/TCKSWCLK/TCK
    SWDIO/TMSSWDIO/TMS
    GNDGND
    VCCVCC
    • 連接好的實際電路圖如下:
    • 準備好 ST-Link 驅動
      【鏈接:https://pan.baidu.com/s/1XeKTh1VNQo4JapX7HpGjsw 提取碼:luha 】
      將 BOOT1 置 0,上電之后,可以在設備管理器中看到 STLink 已經連接成功
    • 配置 Keil 工程
      點擊魔法棒設置,選擇 ST-Link Debugger調試器

      再點擊 Setting 按鈕,可見右側 IDCODE 有顯示,表示連接成功
    • 點擊燒錄按鍵

      可見燒錄成功。

    3.3.2 調試

    • 點擊 debug,依次點擊View->memory windows->memory 1,打開內存觀察窗口,并在地址欄中輸入:0x800c000,觀察將要修改的 flash 區間區容:
    • 依次點擊View->Watch windows->Watch 1,View->Watch windows->Watch 2,打開兩個變量觀察窗口,將變量 FlashWBuff 和 FlashRBuff 分別加入到 Watch 1 觀察窗口和 Watch 2 觀察窗口:
    • 點擊全速運行程序,可以看到數組 FlashRBuff 中內容與數組 FlashWBuff 中內容一致

    4 基于 Flash 的提示音 DAC 播放

    4.1 使用 DAC 產生 2khz 周期的正弦波輸出

    建議先用單音音頻(比如 2000Hz 的正弦波)的wav 數據進行實驗,通過 DAC 或 PCM 音頻模塊能夠基本還原出原始正弦波聲音后,再用語音和音樂信號進行實驗。

    • 新建文件
      依次點擊文件->新建->音頻文件,完成下圖所示修改

    • 依次點擊效果->生成->音調,出現下面視圖

    • 修改如圖所示的配置,并點擊確定

    • 依次點擊文件->導出->文件,設置導出為 wav 文件

    • 用 UltraEdit 打開剛才保存的wav文件,界面視圖如下

    • 點擊 CTRL+A全選,鼠標右鍵,選擇十六進制復制選定視圖

    • 將內容粘貼到一個新建文件中

    • 在新建文件中,CTRL+A,鼠標右鍵,選擇范圍,輸入起始的行號和列號,選擇內容

    • 復制到 notepad++ 中

    • 在需要添加內容的位置,點擊alt+c

    • 添加結果如下:

    • 刪除不需要的尾行,將該文本復制下來。

    • 打開打開野火提供的樣例程序——DAC 輸出正弦波。
      (鏈接:https://pan.baidu.com/s/1ixWoW8xyMe3_hyWXpkd_Tg
      提取碼:luha)

    • 將文本復制到 keil 文件的 uint16_t Sine12bit[] 數組中去,并刪掉中括號里面的數據。

    • 編譯工程文件,無錯

    • 燒錄

    • 最后用示波器顯示波形

    4.2 使用 DAC 輸出數字音頻歌曲數據轉換為模擬音頻波形輸出

    • 使用 Audition 截取一段喜歡的音樂
      選擇文件->打開,找到對應的音樂
    • 選中一段,然后右鍵,選擇存儲選區,接著更改采用類型
    • 使用 UltraEdit 得到相關數據
      做法同上
    • 使用 notepad++ 添加相關內容
      做法同上
    • 添加數據
      做法同上
    • 編譯燒錄
    • 使用示波器觀察得到的波形

    5 總結

    本文學習了 STM32F103C8T6 對音頻數據的 Flash 讀取與 DAC 播放,了解了 Flash 的原理。這次任務的量很多,操作也很繁瑣。

    6 參考資料

  • STM32 進階教程 13 – FLASH的讀寫操作
  • 使用STM32F103的DAC功能實現音頻輸出
  • STM32F103的DAC——輸出聲音效果
  • STM32F1C8T6音頻數據的Flash讀取與DAC播放
  • 總結

    以上是生活随笔為你收集整理的基于 STM32F103C8T6 对音频数据的 Flash 读取与 DAC 播放的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。