? ? ? ? Hello,親愛的讀者們!小編自去年暑假以來,在51自學(xué)網(wǎng)這個平臺,學(xué)習(xí)51單片機和stm32單片機等一些知識。由于小編所處的專業(yè)就是電氣自動化,所以很有必要學(xué)習(xí)這方面的內(nèi)容。同時,小編利用寒假的時間,結(jié)合自己所學(xué)習(xí)的知識,開發(fā)了一款基于stm32的多功能時鐘。
? ? ? ? 在最近的時間里,我一直在51自學(xué)網(wǎng)平臺上學(xué)習(xí)stm32。由于自己有51單片機的基礎(chǔ),并且有黃祁龍老師的stm32講解視頻,就連開發(fā)板也是黃老師設(shè)計的,所以學(xué)習(xí)起來還算不那么麻煩。在加上自己之前用過arduino和51做過一些小制作,所以在制作多功能時鐘之前,心里有了些底氣。
? ? ? ? 由于我之前未做過stm32的實際項目,所以我就結(jié)合老師所講解的基礎(chǔ)知識,以及板子的特點,開發(fā)一款多功能時鐘,以此來提高自己的實際動手能力。當(dāng)然,在制作過程中,伴隨著調(diào)試的艱辛和無望,也交織著成功的喜悅和樂趣。總之,在不斷的編程調(diào)試的過程中,我收獲了不少的東西。
? ? ? ? 下面,我將闡述關(guān)于本次制作的相關(guān)介紹。
1.任務(wù)需求
在項目研發(fā)階段之前,肯定有客戶需求或者項目任務(wù),這里我就擬定了一下:
基本要求:
1.具有顯示時間的功能,并且能夠通過按鍵調(diào)節(jié)時間。
2.具有溫濕度測量并顯示的功能,并且能夠通過按鍵分別設(shè)置閾值上下限,若超過閾值,則蜂鳴器持續(xù)報警。
3.具有空氣質(zhì)量檢測裝置,若空氣中的塵埃超過某一數(shù)值時,則蜂鳴器持續(xù)報警,同時啟動空氣凈化裝置(這里以電機來代替)。
4.以上所有內(nèi)容通過LCD12864液晶顯示屏實時顯示。
附加要求:
1.設(shè)計美化的人機交互界面(UI)。
2.具有測距功能,并且可以通過按鍵設(shè)定安全距離,當(dāng)測定距離小于安全距離時,蜂鳴器報警。
3.具有藍牙通信功能,達到實時顯示與監(jiān)控。
注:報警可以開啟相應(yīng)的指示燈(溫度、濕度、空氣、距離)
2.硬件分析
1.最小系統(tǒng):stm32f103c8t6、電源、晶振電路、復(fù)位電路等
2.顯示模塊:采用LCD12864液晶顯示屏,實時顯示數(shù)據(jù)。
3.按鍵控制模塊:采用獨立按鍵,具有切換頁面、設(shè)置相關(guān)參數(shù)等功能。
4.溫濕度采集模塊:采用DHT11溫濕度傳感器,內(nèi)部集成AD轉(zhuǎn)換模塊,實時采集溫濕度
5.空氣質(zhì)量檢測裝置:采用MQ2檢測空氣質(zhì)量,實時采集空氣污染物指數(shù)
6.測距模塊:采用HC-SRO4超聲波模塊,實時測量距離值
7.數(shù)據(jù)通信模塊:采用HC-05藍牙模塊,搭建上位機與下位機的通道
8.報警模塊:采用有源蜂鳴器和LED燈,起到報警提示。
9.電機驅(qū)動模塊:采用L298N驅(qū)動板,驅(qū)動直流電機,代替空氣凈化裝置
注:這里直接采用51自學(xué)網(wǎng)研制的stm32開發(fā)板,模塊化研制的,有核心板(最小系統(tǒng)板)、主板和顯示板(主要LCD12864)等。
3.開發(fā)環(huán)境
? ? ? ? 由于51自學(xué)網(wǎng)授課老師推薦用IAR,這里我采用IAR作為開發(fā)工具。當(dāng)然,keil MDK也是比較流行,適合stm32的開發(fā)工具。當(dāng)然,兩者在配置環(huán)境上略有差異,由于本人學(xué)stm32時沒用過keil MDK,這里不再闡述。
? ? ? ? 本次開發(fā)之前,需要創(chuàng)建庫函數(shù)模板,這樣,開發(fā)效率更高。如果有不知道如何創(chuàng)建的,請參考51自學(xué)網(wǎng)黃祁龍老師的《STM32單片機嵌入式實戰(zhàn)教程》的第二章,里面會教你怎么使用IAR以及如何建立固件庫模板。
? ? ? ? 當(dāng)然,stm32也是可以和51一樣,通過寄存器進行開發(fā),但如果那樣子的話,寄存器太多記不住,即使查閱芯片手冊,也比較難找。所以站在巨人的肩膀上,何樂而不為呢?
4.軟件分析
? ? ? ? 首先,我們在軟件編程前,需要將任務(wù)進行模塊化。由于本次開發(fā)的項目,內(nèi)容還算比較多的,所以模塊化編程的思想尤為重要。
? ? ? ? 1.顯示模塊:由于51自學(xué)網(wǎng)上老師重點講過,自己也跟著做過,所以LCD12864的相關(guān)庫函數(shù)已經(jīng)搭建好,包括顯示數(shù)字函數(shù)、顯示字符函數(shù)、顯示中文字符串函數(shù)等,都可以直接調(diào)用。
? ? ? ? 2.計時模塊:配置相關(guān)的定時器,編寫定時器初始化函數(shù),中斷計時程序。
? ? ? ? 3.按鍵控制模塊:配置好相關(guān)的按鍵引腳,需要構(gòu)建按鍵掃描函數(shù),用來控制顯示部分(主要)的切換頁面,參數(shù)大小調(diào)整,取消報警等。
? ? ? ? 4.溫濕度采集模塊:查閱芯片手冊,根據(jù)時序圖,寫時序函數(shù),包括讀寫位函數(shù),讀寫字節(jié)函數(shù),讀數(shù)據(jù)函數(shù)等。這里51自學(xué)網(wǎng)也有專題闡釋。
? ? ? 5.空氣質(zhì)量檢測模塊:這里需要使用stm32內(nèi)部ADC模塊,配置相關(guān)引腳為模擬輸入,配置ADC相關(guān)的結(jié)構(gòu)體,啟動內(nèi)部AD轉(zhuǎn)換,需要構(gòu)建ADC初始化函數(shù),和啟動采集轉(zhuǎn)換函數(shù)。
? ? ? 6.測距模塊:這里需要配置TRIG和ECHO引腳,構(gòu)建定時器初始化函數(shù),啟動超聲波測距函數(shù),獲取時間計算距離函數(shù)等。
? ? ? ? 7.數(shù)據(jù)通信模塊:串口初始化函數(shù),中斷接收函數(shù),發(fā)送數(shù)據(jù)函數(shù)等,這里還要根據(jù)上位機軟件,編寫相關(guān)的通信協(xié)議。
? ? ? ? 其次,需要將stm32的引腳分配給外部器件使用。

? ? ? ? 如上圖所示,stm32的引腳分配好即可。其中LCD12864、按鍵、LED燈、DHT11、有源蜂鳴器、藍牙通信等,在設(shè)計PCB板時,已固定分配好。同時,板子預(yù)留了引腳,便于連接其他外設(shè)。MQ135、電機驅(qū)動和超聲波等都通過預(yù)留的引腳接入。
? ? ? ? 最后,就是編寫各個模塊的程序,并且進行硬件的調(diào)試。
5.實物展示




? ??????在后面的章節(jié)中,我將分模塊進行講解多功能時鐘的開發(fā),同時結(jié)合自己的調(diào)試過程,闡述開發(fā)過程中遇到的問題。同時由于本人水平有限,難免會出現(xiàn)紕漏,希望廣大讀者能夠多多提出意見,深表感謝!