目錄
一、題目
二、FLASH地址空間資料讀取
2.1FLASH原理
2.2工具
2.3創建CUBEMX工程
2.4代碼編輯
2.4燒錄程式
2.5除錯
三、基于flash的提示音播放
6.1生成正弦波資料
參考文獻:
一、題目
1、Flash地址空間的資料讀取,stm32f103c8t6只有20KB 記憶體(RAM)供程式代碼和陣列變數存放,因此,針對內部Flash的總計64KB存盤空間(地址從0x08000000開始),運行一次寫入8KB資料,總計復位運行代碼4次,將32KB資料寫入Flash,并驗證寫入資料的正確性和讀寫速率,
2、基于片內Flash的提示音播放程式,
1)實驗資料準備:用Adobe audition或goldwave等音頻編輯軟體錄制“您好歡迎光臨!”的幾秒鐘的聲音(8khz采樣、8bit量化編碼的單聲道wav格式),確保音頻資料盡量小(最大不超64KB),然后編程將其分批次寫入stm32f103c8t6芯片內部flash區域,
2)數字音頻還原播放任務:編程讀取此段音頻,通過stm32f103c8t6自帶的DAC通道,轉換為模擬音頻進行播放,并用示波器觀察波形,用耳機/喇叭收聽,評判音樂還原效果;
提示:建議先用單音音頻(比如2000Hz的正弦波)的wav資料進行實驗,通過DAC或PCM音頻模塊能夠基本還原出原始正弦波聲音后,再用語音和音樂信號進行實驗,
二、FLASH地址空間資料讀取
2.1FLASH原理
Flash全名叫做Flash Memory,屬于非易失性存盤設備(Non-volatile Memory Device),與此相對應的是易失性存盤設備(Volatile Memory Device),關于什么是非易失性/易失性,從名字中就可以看出,非易失性就是不容易丟失,資料存盤在這類設備中,即使斷電了,也不會丟失,這類設備,除了Flash,還有其他比較常見的入硬碟,ROM等,與此相對的,易失性就是斷電了,資料就丟失了,比如大家常用的記憶體,不論是以前的SDRAM,DDR SDRAM,還是現在的DDR2,DDR3等,都是斷電后,資料就沒了,
市面上 STM32F1 開發板使用的芯片是 STM32F103系列,其 FLASH 容量一般為 512K 位元組,屬于大容量芯片,
STM32F1 的閃存(Flash)模塊:主存盤器、資訊塊、閃存存盤器介面暫存器
2.2工具
STM32F103C8T6、STlink
軟體:Keil、STM32CubeMX
2.3創建CUBEMX工程
前面的基礎步驟還是創建工程,然后選擇stm32f103c8,點開開始配置:
定時器配置:

管腳配置:

設定堆疊大小和工程地址:

完成這些步驟之后就可以匯出了
2.4代碼編輯
在匯出的檔案中添加事先準備好的flash.c檔案

然后在main.c中添加以下代碼:
#include "flash.h"
uint8_t FlashWBuff [255];
uint8_t FlashRBuff [255];
然后找到main函式,在里面添加以下代碼:
uint8_t i;
uint8_t FlashTest[] = "ab ab ab";

然后編譯一下,沒有錯誤進行下一步:

2.4燒錄程式
接線如下圖:
| J-link | STM32 |
|---|---|
| SWCLK/TCK | SWCLK/TCK |
| SWDIO/TMS | SWDIO/TMS |
| GND | GND |
| VCC | VCC |
連線結果如圖所示:

連好線之后,連接電腦然后修改debug里面的資料:

然后

然后點擊下載的按鈕就可以將程式下載到我們的板子中了

2.5除錯
下載好之后就改跳線帽,然后因為要進行除錯,所以我們最好設定一個斷點便于我們觀察,這是是在main.c里的while這里設定的:
一直連接上板子然后進入debug,然后隨便選擇一個觀測視窗進行觀測

然后在右下角的memory1的視窗中輸入我們的存盤資料地址0x0800c000
然后點擊全速運行,這時候就能觀測到板子上的pc13led亮起,然后memory1的視窗中出現代碼中存盤的資料,而且斷點之后再次上電,可以看見上次寫入的資料還在其中,說明我們已經將資料寫入flash中了,

三、基于flash的提示音播放
6.1生成正弦波資料
使用Adobe Audition生成正弦波資料,然后新建一個音頻檔案:

然后設定采樣率和位深度,八位的八位元采樣:

再去插入基本音色,這里是正弦波:


最后匯出為wab檔案,記住,路徑一定要是自己能找得到的,因為之后要去打開

生成wav檔案之后,用UltraEdit(這個的下載的時候一定要去官網下載,我以因為這個電腦直接中病毒崩潰了)將其打開,下載好后打開ultraedit然后在里面打開檔案:

Ctrl+A選擇全部然后右鍵點擊選擇選擇范圍,輸入12-59列
選中需要的資料了,緊接著右鍵點擊然后十六進制復制選定視圖,再將十六進制數賦值到notepad++中:

輸入0x即可,注意是在每一列都需要輸入一次

然后將內容復制到keil檔案對應的位置,將原有的替換掉即可:

這里借用DAC生成正弦波的例程代碼
鏈接:百度網盤 請輸入提取碼
提取碼:706i
之后編輯下載看是否能觀察到預期的正弦波

參考文獻:
(76條訊息) Flash原理介紹_Reborn Lee-CSDN博客_flash作業原理(76條訊息) STM32F103基于片內flash的資料讀取與音樂播放_txmnQAQ的博客-CSDN博客
(76條訊息) 【嵌入式22】STM32F1C8T6音頻資料的Flash讀取與DAC播放_噗噗的罐子博客-CSDN博客
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/400362.html
標籤:其他
下一篇:【電子知識摘要】合金電阻
