通常學習一款新的開發板首要任務毋庸置疑的是點亮led燈,以熟悉其相關操作。但是如果想要進一步學習了解開發板其它功能,還得通過專案實踐。想起剛開始學習32的時候,和小夥伴做了乙個語音儲存回放系統的小題目,非常適合新手入門,因為其整個設計簡單,上手容易,但是其涉及到大多數常用外設:gpio操作,adc,dac,dma,定時器,按鍵控制,flash儲存等。每乙個模組都可以得到練習鞏固。
系統設計框圖:
不難看出,微控制器的主要任務是將前級電路傳來的模擬訊號進行轉換成數字量,並進行儲存,最後通過dac轉換成 模擬量輸出。
通過分析,軟體設計方案為:
首先定義乙個標誌flag為0;
當key1按下並且flag為0時,進入到record()函式,對訊號進行採集儲存;
當flag為1(儲存結束後將flag設定為1)並且key2按下的時候,進入到play()函式,讀取flash中的值並通過dac輸出。
int main(void)
if(g_flag && key_pressed(key2))}}}
對於record()函式,當開始record的時候,點亮led2,並且使能定時器3(定時器3控制以一定的速度往flash中存入資料)。
對於play()函式,當開始play的時候,點亮led4,並且使能定時器2(定時器2控制以一定的速度讀取flash中的值並通過dac輸出)。
/***************訊號採集並進行儲存*************/
void record(void)
/***********讀取 flash 中的值並通過 dac 輸出*******/
void play(void)
flash的寫入,讀取都是通過定時器控制的。我設定的以20khz的頻率向 flash 中寫入資料,本示例用到的flash的位址空間為0x0800c008到0x08100000,總共975kb大小,按照每個資料量32位,理論儲存時間為(975*1024)/(4*20k) = 12.48s,實際上我們的儲存時間為12秒左右,與理論值接近。
/*******定時器2控制以一定的速度讀取flash中的值,並通過dac輸出******/
void tim2_irqhandler(void)//record()
else //如果已經到了尾位址
tim_clearitpendingbit(tim2,tim_it_update);
}}/****定時器2控制以一定的速度往flash中寫入資料**********/
void tim3_irqhandler(void) //play()
else //如果已經到了尾位址
tim_clearitpendingbit(tim3,tim_it_update);}}
三、總結 stm32基礎入門
1 開發工具,初學者建議mdk,後期ivr 2 暫存器開發or庫 版本開發 先暫存器開發,後期兩者結合 3 軟體 or開發板,先軟體 後期兩者結合 建立工程 1 包含三部分 start user lib output outlist資料夾 並設定 outlist目錄 用來存放生成的中間檔案 outp...
STM32學習 入門
嵌入式系統定義 以應用為中心,以計算機技術為基礎,軟硬體可按需求進行定製,從而滿足各種設計指標。與通用計算機系統不同在於它是為某些特定任務而設計的。體系結構 嵌入式硬體 處理器 外圍裝置 嵌入式軟體 作業系統 應用軟體 微控制器與微處理器 常見外設介面和匯流排 嵌入式作業系統 搶占式排程機制 響應時...
STM32基礎入門(二) STM32入坑指南
最近有不少學弟新入微控制器的坑,萬事開頭難。作為乙個比較陌生的領域,再結合我當時入坑時的一些問題,寫下這篇部落格,希望能夠給初學者一些啟發。1.開發板的選擇 學習stm32,不能繞開的第一件事,那就是開發板。開發板的意義 開發板提供了足夠的資源,包含硬體資源和軟體資源。硬體資源,即開發板上自帶的le...