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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

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

文章內(nèi)容:

  • STM32F103C8T6 的 Flash 地址空間的數(shù)據(jù)讀取。
  • STM32F103C8T6 自帶的 DAC 通道,轉(zhuǎn)換為模擬音頻進(jìn)行播放,并用示波器觀察波形,用耳機(jī)/喇叭收聽,評(píng)判音樂(lè)還原效果。
  • 目錄

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

    1 項(xiàng)目準(zhǔn)備

    1.1 具體要求

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

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

  • 1.2 項(xiàng)目環(huán)境

    軟件準(zhǔn)備

    • 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 原理簡(jiǎn)介

    硬件準(zhǔn)備

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

    2.1 STM32 的內(nèi)部 FLASH

    • 在 STM32 芯片內(nèi)部有一個(gè) FLASH 存儲(chǔ)器,它主要用于存儲(chǔ)代碼,我們?cè)陔娔X上編寫好應(yīng)用程序后,使用下載器把編譯后的代碼文件燒錄到該內(nèi)部 FLASH 中,由于 FLASH 存儲(chǔ)器的內(nèi)容在掉電后不會(huì)丟失,芯片重新上電復(fù)位后,內(nèi)核可從內(nèi)部 FLASH 中加載代碼并運(yùn)行。
    • STM32 的內(nèi)部框架圖

    2.2 STM32 的 DAC 通道

    2.2.1 何為 DAC

    • DAC 為數(shù)字/模擬轉(zhuǎn)換模塊,故名思議,它的作用就是把輸入的數(shù)字編碼,轉(zhuǎn)換成對(duì)應(yīng)的模擬電壓輸出,它的功能與 ADC 相反。在常見的數(shù)字信號(hào)系統(tǒng)中,大部分傳感器信號(hào)被化成電壓信號(hào),而 ADC 把電壓模擬信號(hào)轉(zhuǎn)換成易于計(jì)算機(jī)存儲(chǔ)、處理的數(shù)字編碼,由計(jì)算機(jī)處理完成后,再由 DAC 輸出電壓模擬信號(hào),該電壓模擬信號(hào)常常用來(lái)驅(qū)動(dòng)某些執(zhí)行器件,使人類易于感知。如音頻信號(hào)的采集及還原就是這樣一個(gè)過(guò)程
    • STM32 具有片上 DAC 外設(shè),它的分辨率可配置為 8 位或 12 位的數(shù)字輸入信號(hào),具有兩個(gè) DAC 輸出通道,這兩個(gè)通道互不影響,每個(gè)通道都可以使用 DMA 功能,都具有出錯(cuò)檢測(cè)能力,可外部觸發(fā)。

    2.2.2 STM32 的 DAC 模塊

    DAC 功能框圖:

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

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

    3 Flash 地址空間的數(shù)據(jù)讀取

    3.1 利用 CubeMX 創(chuàng)建工程

    • 配置 SYS
    • 配置 RCC
    • 配置引腳
    • 設(shè)置堆棧大小
    • 導(dǎo)出后打開

    3.2 keil 添加文件

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

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

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


    • 點(diǎn)擊編譯,接著使用 ST-Link 調(diào)試

    3.3 STLink 調(diào)試

    3.3.1 STLink 連接并燒錄

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

      再點(diǎn)擊 Setting 按鈕,可見右側(cè) IDCODE 有顯示,表示連接成功
    • 點(diǎn)擊燒錄按鍵

      可見燒錄成功。

    3.3.2 調(diào)試

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

    4 基于 Flash 的提示音 DAC 播放

    4.1 使用 DAC 產(chǎn)生 2khz 周期的正弦波輸出

    建議先用單音音頻(比如 2000Hz 的正弦波)的wav 數(shù)據(jù)進(jìn)行實(shí)驗(yàn),通過(guò) DAC 或 PCM 音頻模塊能夠基本還原出原始正弦波聲音后,再用語(yǔ)音和音樂(lè)信號(hào)進(jìn)行實(shí)驗(yàn)。

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

    • 依次點(diǎn)擊效果->生成->音調(diào),出現(xiàn)下面視圖

    • 修改如圖所示的配置,并點(diǎn)擊確定

    • 依次點(diǎn)擊文件->導(dǎo)出->文件,設(shè)置導(dǎo)出為 wav 文件

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

    • 點(diǎn)擊 CTRL+A全選,鼠標(biāo)右鍵,選擇十六進(jìn)制復(fù)制選定視圖

    • 將內(nèi)容粘貼到一個(gè)新建文件中

    • 在新建文件中,CTRL+A,鼠標(biāo)右鍵,選擇范圍,輸入起始的行號(hào)和列號(hào),選擇內(nèi)容

    • 復(fù)制到 notepad++ 中

    • 在需要添加內(nèi)容的位置,點(diǎn)擊alt+c

    • 添加結(jié)果如下:

    • 刪除不需要的尾行,將該文本復(fù)制下來(lái)。

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

    • 將文本復(fù)制到 keil 文件的 uint16_t Sine12bit[] 數(shù)組中去,并刪掉中括號(hào)里面的數(shù)據(jù)。

    • 編譯工程文件,無(wú)錯(cuò)

    • 燒錄

    • 最后用示波器顯示波形

    4.2 使用 DAC 輸出數(shù)字音頻歌曲數(shù)據(jù)轉(zhuǎn)換為模擬音頻波形輸出

    • 使用 Audition 截取一段喜歡的音樂(lè)
      選擇文件->打開,找到對(duì)應(yīng)的音樂(lè)
    • 選中一段,然后右鍵,選擇存儲(chǔ)選區(qū),接著更改采用類型
    • 使用 UltraEdit 得到相關(guān)數(shù)據(jù)
      做法同上
    • 使用 notepad++ 添加相關(guān)內(nèi)容
      做法同上
    • 添加數(shù)據(jù)
      做法同上
    • 編譯燒錄
    • 使用示波器觀察得到的波形

    5 總結(jié)

    本文學(xué)習(xí)了 STM32F103C8T6 對(duì)音頻數(shù)據(jù)的 Flash 讀取與 DAC 播放,了解了 Flash 的原理。這次任務(wù)的量很多,操作也很繁瑣。

    6 參考資料

  • STM32 進(jìn)階教程 13 – FLASH的讀寫操作
  • 使用STM32F103的DAC功能實(shí)現(xiàn)音頻輸出
  • STM32F103的DAC——輸出聲音效果
  • STM32F1C8T6音頻數(shù)據(jù)的Flash讀取與DAC播放
  • 總結(jié)

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

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。