《國(guó)產(chǎn)嵌入式技術(shù)及應(yīng)用實(shí)踐》課件 項(xiàng)目四 智能溫濕度檢測(cè)終端設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
《國(guó)產(chǎn)嵌入式技術(shù)及應(yīng)用實(shí)踐》課件 項(xiàng)目四 智能溫濕度檢測(cè)終端設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
《國(guó)產(chǎn)嵌入式技術(shù)及應(yīng)用實(shí)踐》課件 項(xiàng)目四 智能溫濕度檢測(cè)終端設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
《國(guó)產(chǎn)嵌入式技術(shù)及應(yīng)用實(shí)踐》課件 項(xiàng)目四 智能溫濕度檢測(cè)終端設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
《國(guó)產(chǎn)嵌入式技術(shù)及應(yīng)用實(shí)踐》課件 項(xiàng)目四 智能溫濕度檢測(cè)終端設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩62頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

引導(dǎo)案例隨著科技的快速發(fā)展和智能化水平的提高,環(huán)境溫濕度檢測(cè)與控制已成為多個(gè)領(lǐng)域的關(guān)鍵需求。智能溫濕度檢測(cè)終端作為這一需求的直接響應(yīng)者,其重要性不言而喻。無(wú)論是室內(nèi)環(huán)境的舒適度保障,還是特定場(chǎng)所如溫室農(nóng)業(yè)、醫(yī)藥生產(chǎn)、電子設(shè)備制造等的溫濕度控制,都依賴于高效、準(zhǔn)確的溫濕度檢測(cè)與控制系統(tǒng)。本項(xiàng)目基于嵌入式技術(shù),設(shè)計(jì)并實(shí)現(xiàn)了一款智能溫濕度檢測(cè)終端,旨在解決傳統(tǒng)溫濕度監(jiān)測(cè)設(shè)備的局限性,提高溫濕度數(shù)據(jù)檢測(cè)的準(zhǔn)確性和實(shí)時(shí)性。通過(guò)集成高精度的溫濕度傳感器和先進(jìn)的嵌入式系統(tǒng),實(shí)現(xiàn)對(duì)環(huán)境溫濕度的實(shí)時(shí)監(jiān)測(cè)和記錄,為各種應(yīng)用場(chǎng)景提供精準(zhǔn)的環(huán)境數(shù)據(jù)支持。項(xiàng)目方案設(shè)計(jì)請(qǐng)根據(jù)示范案例,分析智能溫濕度檢測(cè)需求。經(jīng)過(guò)詳盡的調(diào)查研究后,設(shè)計(jì)初步方案。選擇適宜的技術(shù)路徑,選定適當(dāng)?shù)慕涌谶M(jìn)行系統(tǒng)集成,最終形成完整的項(xiàng)目方案。具體任務(wù)可參考任務(wù)清單。終端結(jié)構(gòu)簡(jiǎn)介在現(xiàn)代社會(huì)中,智能溫濕度監(jiān)測(cè)終端是各類環(huán)境控制需求中常見(jiàn)的重要設(shè)備,尤其在數(shù)據(jù)中心、醫(yī)療設(shè)施、倉(cāng)儲(chǔ)等對(duì)環(huán)境條件要求嚴(yán)格的場(chǎng)所尤為重要。為了有效管理和控制環(huán)境條件,智能溫濕度監(jiān)測(cè)終端成為了不可或缺的裝置。該系統(tǒng)的設(shè)計(jì)旨在準(zhǔn)確監(jiān)測(cè)環(huán)境的溫度和濕度變化,并通過(guò)聯(lián)網(wǎng)功能將數(shù)據(jù)傳輸?shù)皆贫嘶虮镜毓芾硐到y(tǒng),以確保環(huán)境參數(shù)維持在預(yù)設(shè)范圍,從而最大限度地保障設(shè)備和物品的安全。設(shè)計(jì)目的智能溫濕度監(jiān)測(cè)終端的主要設(shè)計(jì)目的在于實(shí)時(shí)監(jiān)測(cè)和管理環(huán)境中的溫度和濕度,通過(guò)精準(zhǔn)的數(shù)據(jù)采集和智能化的數(shù)據(jù)處理,提供可靠的環(huán)境監(jiān)控。這一設(shè)計(jì)能夠有效預(yù)防環(huán)境異常對(duì)設(shè)備和物品造成的損害,提高安全性和穩(wěn)定性。通過(guò)無(wú)線連接,系統(tǒng)可以將監(jiān)測(cè)數(shù)據(jù)實(shí)時(shí)傳輸?shù)竭h(yuǎn)程服務(wù)器或云平臺(tái),支持遠(yuǎn)程監(jiān)控和管理,從而實(shí)現(xiàn)對(duì)環(huán)境參數(shù)的精準(zhǔn)控制和動(dòng)態(tài)調(diào)整。系統(tǒng)組成典型的智能溫濕度監(jiān)測(cè)終端通常由溫度傳感器、濕度傳感器、微處理器、通信模塊和電源等關(guān)鍵組件組成。溫度傳感器:負(fù)責(zé)采集環(huán)境溫度信息,能夠檢測(cè)并轉(zhuǎn)換溫度變化為電信號(hào)。濕度傳感器:負(fù)責(zé)采集環(huán)境濕度信息,將濕度變化轉(zhuǎn)換為電信號(hào)。微處理器:接收傳感器的電信號(hào),進(jìn)行數(shù)據(jù)處理和分析,并執(zhí)行必要的控制算法。通信模塊:通過(guò)WiFi、LoRa、Zigbee等無(wú)線通信技術(shù),將監(jiān)測(cè)數(shù)據(jù)傳輸?shù)皆破脚_(tái)或本地管理系統(tǒng)。電源:為整個(gè)系統(tǒng)提供穩(wěn)定的電力供應(yīng),通常支持電池或直流電源供電,并可選配太陽(yáng)能充電功能。這些組件的有機(jī)配合,使得智能溫濕度監(jiān)測(cè)終端能夠?qū)崿F(xiàn)對(duì)環(huán)境溫濕度的精確監(jiān)測(cè)和數(shù)據(jù)傳輸。系統(tǒng)優(yōu)勢(shì)高精度和高可靠性:先進(jìn)的傳感器技術(shù)能夠提供高精度的溫濕度測(cè)量,確保數(shù)據(jù)的可靠性和準(zhǔn)確性。實(shí)時(shí)監(jiān)測(cè)和報(bào)警:系統(tǒng)能夠?qū)崿F(xiàn)24小時(shí)不間斷監(jiān)測(cè),實(shí)時(shí)捕捉環(huán)境變化,并在超出預(yù)設(shè)閾值時(shí)自動(dòng)發(fā)出報(bào)警,提醒管理人員采取必要措施。遠(yuǎn)程管理和控制:通過(guò)無(wú)線通信模塊,系統(tǒng)可以將數(shù)據(jù)實(shí)時(shí)傳輸至云平臺(tái)或本地服務(wù)器,支持遠(yuǎn)程查看和管理,提升管理效率。易于安裝和維護(hù):模塊化設(shè)計(jì)使得設(shè)備安裝簡(jiǎn)單,維護(hù)方便,降低了使用成本。數(shù)據(jù)存儲(chǔ)與分析:系統(tǒng)不僅可以實(shí)時(shí)監(jiān)測(cè),還可以對(duì)采集的數(shù)據(jù)進(jìn)行存儲(chǔ)和分析,提供歷史數(shù)據(jù)查詢和趨勢(shì)分析功能,幫助用戶做出科學(xué)決策。通過(guò)以上設(shè)計(jì)和功能,智能溫濕度監(jiān)測(cè)終端不僅能夠提供高效的環(huán)境監(jiān)控,還能夠提升管理效率和環(huán)境安全性。它已經(jīng)成為現(xiàn)代設(shè)施管理中不可或缺的一部分,為各類場(chǎng)所提供了穩(wěn)定可靠的環(huán)境控制,保障了設(shè)備的正常運(yùn)行和物品的安全存放。在未來(lái)的發(fā)展中,隨著技術(shù)的不斷進(jìn)步,智能溫濕度監(jiān)測(cè)終端將繼續(xù)融合更為先進(jìn)的傳感技術(shù)和人工智能算法,進(jìn)一步提高監(jiān)測(cè)精度和數(shù)據(jù)分析能力,拓展更多的應(yīng)用場(chǎng)景,為用戶提供更加智能化的環(huán)境管理解決方案。溫濕度傳感器簡(jiǎn)介溫濕度傳感器是一種用于測(cè)量環(huán)境溫度和濕度的電子裝置,廣泛應(yīng)用于家庭、農(nóng)業(yè)、工業(yè)、醫(yī)療、氣象等多個(gè)領(lǐng)域。通過(guò)將溫度和濕度變化轉(zhuǎn)換為電信號(hào),這些傳感器提供了環(huán)境參數(shù)的實(shí)時(shí)數(shù)據(jù),有助于優(yōu)化和控制各種應(yīng)用場(chǎng)景中的環(huán)境條件。溫度傳感器和濕度傳感器是溫濕度傳感器的兩個(gè)核心組件,各自利用不同的物理現(xiàn)象進(jìn)行測(cè)量:如圖所示為SHT20溫濕度傳感器,它是由Sensirion公司生產(chǎn)的一款數(shù)字溫濕度傳感器,Sensirion公司以其出色的濕度和溫度傳感器而聞名。SHT20在一個(gè)極其小巧的3x3mmDFN封裝內(nèi)集成了濕度和溫度傳感元件、放大器、模數(shù)轉(zhuǎn)換器(A/D)、數(shù)字處理單元以及存儲(chǔ)器,實(shí)現(xiàn)了高度的集成度,使用電容式傳感器測(cè)量濕度,使用帶隙傳感器測(cè)量溫度。提供標(biāo)準(zhǔn)的兩線I2C數(shù)字接口,兼容性強(qiáng),方便與各類微控制器或系統(tǒng)直接通信。低功耗藍(lán)牙簡(jiǎn)介低功耗藍(lán)牙最早由諾基亞開(kāi)發(fā),稱為Wibree,2006年并入藍(lán)牙技術(shù)聯(lián)盟(BluetoothSpecialInterestGroup,SIG)后,成為藍(lán)牙4.0標(biāo)準(zhǔn)的一部分。BLE解決了傳統(tǒng)藍(lán)牙在功耗和設(shè)備連接速度上的不足,逐步發(fā)展成為現(xiàn)代IoT設(shè)備的核心技術(shù),低功耗版本如表所示。BLE藍(lán)牙(BluetoothLowEnergy,或稱BluetoothLE、BLE,舊商標(biāo)BluetoothSmart)是一種低功耗藍(lán)牙技術(shù),是藍(lán)牙技術(shù)聯(lián)盟設(shè)計(jì)和銷售的一種個(gè)人局域網(wǎng)技術(shù)。相較于經(jīng)典藍(lán)牙,BLE藍(lán)牙在保持同等通信范圍的同時(shí),顯著降低了功耗和成本。BLE藍(lán)牙頻率范圍在2.400GHz到2.4835GHz之間的頻段內(nèi)工作,總帶寬為83.5MHz。將其工作頻段劃分為40個(gè)獨(dú)立的通信信道,每個(gè)信道的帶寬為2MHz,信道分布如表所示。BLE藍(lán)牙模塊的工作原理基于主從關(guān)系,即每一對(duì)設(shè)備之間進(jìn)行藍(lán)牙通訊時(shí),必須有一個(gè)藍(lán)牙模塊為主角色,另一個(gè)為從角色。通信時(shí),主端進(jìn)行查找、發(fā)起配對(duì),建立鏈接成功后,雙方即可收發(fā)數(shù)據(jù)。理論上,一個(gè)藍(lán)牙主端設(shè)備可同時(shí)與7個(gè)藍(lán)牙從端設(shè)備進(jìn)行通訊,如圖114所示。低功耗藍(lán)牙(BLE)通信方式主要包括主從架構(gòu)、廣播通信、連接通信三種基本模式,以及在這些基礎(chǔ)上發(fā)展出的多種交互方式。1)主從架構(gòu)BLE通信網(wǎng)絡(luò)基于主從架構(gòu)。在這種架構(gòu)中,存在一個(gè)主設(shè)備(Master)和一個(gè)或多個(gè)從設(shè)備(Slave)。主設(shè)備負(fù)責(zé)發(fā)起連接請(qǐng)求、管理連接,并控制通信的節(jié)奏,而從設(shè)備則被動(dòng)響應(yīng)主設(shè)備的命令。2)廣播通信廣播(Advertising):從設(shè)備周期性地發(fā)送未經(jīng)連接的廣播包,廣播包中可以包含設(shè)備的基本信息、服務(wù)數(shù)據(jù)或任何自定義數(shù)據(jù)。廣播分為無(wú)定向廣播和定向廣播,前者可以被所有掃描設(shè)備接收到,后者則是針對(duì)特定設(shè)備的廣播。掃描(Scanning):主設(shè)備或處于非連接態(tài)的從設(shè)備可以進(jìn)入掃描模式,監(jiān)聽(tīng)周圍的廣播包。掃描設(shè)備可以基于廣播數(shù)據(jù)決定是否與某個(gè)從設(shè)備建立連接。3)連接通信一旦主設(shè)備根據(jù)廣播信息決定與某個(gè)從設(shè)備建立連接,就會(huì)進(jìn)入連接通信階段:連接建立:通過(guò)LL(LinkLayer)協(xié)議完成連接建立,協(xié)商連接參數(shù),如連接間隔、超時(shí)等。數(shù)據(jù)交換:在連接狀態(tài)下,主設(shè)備和從設(shè)備可以雙向交換數(shù)據(jù),數(shù)據(jù)傳輸通過(guò)GATT(GenericAttributeProfile)協(xié)議進(jìn)行,使用稱為屬性(Attribute)的數(shù)據(jù)結(jié)構(gòu),包括服務(wù)(Service)、特征(Characteristic)和描述符(Descriptor)。項(xiàng)目決策依據(jù)項(xiàng)目具體需求,制定多種可行性任務(wù)實(shí)施方案,并開(kāi)展全面評(píng)估,比較各方案的優(yōu)勢(shì)與劣勢(shì),以確保選出最優(yōu)方案。隨后,正式確認(rèn)該方案并詳細(xì)填寫任務(wù)抉擇單,以指導(dǎo)后續(xù)行動(dòng)。國(guó)產(chǎn)微控制器發(fā)展史項(xiàng)目計(jì)劃根據(jù)項(xiàng)目方案,制定詳細(xì)的任務(wù)計(jì)劃,明確時(shí)間節(jié)點(diǎn)和責(zé)任人,并落實(shí)具體的任務(wù)安排。項(xiàng)目檢查與評(píng)價(jià)項(xiàng)目實(shí)施結(jié)束后,對(duì)項(xiàng)目進(jìn)行檢查??梢允褂眯〗M互評(píng)等方式進(jìn)行項(xiàng)目評(píng)價(jià),項(xiàng)目評(píng)價(jià)單如下。任務(wù)結(jié)束成都職業(yè)技術(shù)學(xué)院成都卓物科技有限公司任務(wù)1BLE無(wú)線通信設(shè)計(jì)與開(kāi)發(fā)成都職業(yè)技術(shù)學(xué)院成都卓物科技有限公司任務(wù)情報(bào)如圖所示,本次任務(wù)BLE藍(lán)牙使用的是E104-BT02,它是由成都億佰特電子科技公司有限公司基于Dialog公司的DA14580芯片研發(fā)。這款模塊集成了透?jìng)鞴δ?,具有主從一體的特點(diǎn),即拿即用。E104-BT02模塊支持BluetoothV4.2標(biāo)準(zhǔn),默認(rèn)波特率19200,通過(guò)簡(jiǎn)單的配置,可以與符合藍(lán)牙4.2協(xié)議的主機(jī)建立藍(lán)牙連接,實(shí)現(xiàn)串口數(shù)據(jù)透?jìng)?。模塊支持主從角色配置,支持主從模塊點(diǎn)對(duì)點(diǎn)連接實(shí)現(xiàn)數(shù)據(jù)快速透?jìng)鞴δ?,從而最大限度減少了開(kāi)發(fā)者的工作量和項(xiàng)目開(kāi)發(fā)時(shí)間。E104-BT02一共有20個(gè)引腳,板載天線,常用引腳說(shuō)明如表所示。藍(lán)牙低功耗和喚醒模式E104-BT02的低功耗模式在任何情況下,WKP(P06)輸入上升沿,模塊將進(jìn)入睡眠模式整機(jī)功耗降低,如果指令<WSMON>開(kāi)啟了模式反饋,進(jìn)入睡眠前串口輸出“SLEEP”。該模式下串口停止數(shù)據(jù)接收,但藍(lán)牙接收不受影響,即藍(lán)牙接收到數(shù)據(jù)后會(huì)通過(guò)串口正常透?jìng)鬏敵?。說(shuō)明:1)、如果藍(lán)牙已建立連接,進(jìn)入低功耗模式后,可執(zhí)行<DISCONNECT>指令,則立即斷開(kāi)當(dāng)前連接;該功能可以用于外部MCU收發(fā)完成后,快速斷開(kāi)藍(lán)牙連接并進(jìn)入低功耗模式。2)、主、從機(jī)進(jìn)入低功耗模式后,其藍(lán)牙掃描和藍(lán)牙廣播功能不受影響。喚醒E104-BT02模塊通過(guò)WKP(P06)或串口RX引腳(可選擇指令<COMWKPON>配置開(kāi)啟串口喚醒)輸入下降沿,模塊從低功耗模式喚醒,如果指令<WSMON>開(kāi)啟了模式反饋,喚醒后串口會(huì)自動(dòng)輸出WAKEUP,通知用戶喚醒操作成功。從檢測(cè)到下降沿到模塊喚醒完成約7毫秒,期間透?jìng)鞴δ軙簳r(shí)無(wú)效,直到系統(tǒng)喚醒成功后系統(tǒng)恢復(fù)正常。藍(lán)牙工作模式在喚醒模式下,藍(lán)牙工作模式有配置模式和透?jìng)髂J絻煞N,拉低MOD(P00)引腳模塊進(jìn)入配置模式,該模式下串口RX腳接收到的任何數(shù)據(jù)均被視為配置指令,即透?jìng)鞴δ軣o(wú)效。說(shuō)明:1)、如果當(dāng)前已經(jīng)成功建立了藍(lán)牙連接,主機(jī)通過(guò)藍(lán)牙通道“CENTERDATABUFF”發(fā)送的任何數(shù)據(jù)將不被透?jìng)?,同時(shí)通道“BLEDATABUFF”會(huì)收到反饋信息“<CONFIGMODEBUSY>”,提示從機(jī)正處于配置模式,不能接收任何數(shù)據(jù)。2)、配置模式下,對(duì)模塊的所有配置操作掉電后均保存,下次上電后使用新的配置數(shù)據(jù)運(yùn)行。藍(lán)牙角色切換藍(lán)牙模塊上電后約160毫秒開(kāi)始讀取P14引腳電平信號(hào),如果檢測(cè)到低電平輸入,模塊將配置為主機(jī)角色,高電平配置為從機(jī)角色,如果該引腳懸空,則由模塊內(nèi)部的上拉電阻配置為從機(jī)角色。角色配置過(guò)程僅在模塊上電初始化過(guò)程有效,上電完成后角色固定不變,直到下次重啟后重新檢測(cè)角色配置。說(shuō)明:1)、模塊選擇主機(jī)角色,掃描功能開(kāi)啟后,將自動(dòng)開(kāi)始掃描周圍的從機(jī)設(shè)備,直到檢測(cè)到有效(如果指令<BONDMAC>配置了地址綁定功能,則只能連接到指定MAC地址的從機(jī)設(shè)備)從機(jī)設(shè)備,然后自動(dòng)完成藍(lán)牙連接。2)、模塊工作在從機(jī)角色,廣播功能開(kāi)啟后將以配置的廣播間隙向周圍發(fā)送廣播數(shù)據(jù)包,等待藍(lán)牙主機(jī)發(fā)起連接。如圖所示,E104-BT02是在板卡ZW-M606智能大棚溫濕度監(jiān)測(cè)系統(tǒng)應(yīng)用板卡中,可通過(guò)獨(dú)立串口進(jìn)行通信,也可以使用HC32通信,本次任務(wù)我們主要學(xué)習(xí)使用HC32與藍(lán)牙進(jìn)行通信。如圖所示,E104-BT02串口通信開(kāi)關(guān)是用SW1開(kāi)關(guān)進(jìn)行選擇的,SW1開(kāi)關(guān)往上撥與USB通信,SW1開(kāi)關(guān)往下?lián)芘cHC32串口通信。E104-BT02的P03數(shù)據(jù)輸出有效引腳通過(guò)一個(gè)LED指示電路顯示數(shù)據(jù)是否正在傳輸,如圖所示,有數(shù)據(jù)傳輸時(shí)LED2亮,沒(méi)數(shù)據(jù)LED2熄滅。E104-BT02的P11連接狀態(tài)引腳,有連接時(shí)該引腳輸出低電平,LED1點(diǎn)亮,如圖所示。兩個(gè)板卡通過(guò)標(biāo)準(zhǔn)接口A連接,所以E104-BT02與芯片HC32實(shí)際連接如下表所示。藍(lán)牙除串口外其他的引腳為普通IO口并設(shè)置為輸出模式便可以了,關(guān)于HC32的IO和串口在之前章節(jié)中就已經(jīng)學(xué)習(xí)了,所以這次的任務(wù)較為簡(jiǎn)單的。BLE藍(lán)牙應(yīng)用庫(kù)函數(shù)說(shuō)明關(guān)于藍(lán)牙代碼文件在E104_BT02的頭和源文件中,打開(kāi)E104_BT02.h文件,關(guān)于藍(lán)牙普通IO引腳定義如下所示。/*藍(lán)牙復(fù)位引腳*/#defineBLE_RST_PORT(GPIO_PORT_D)#defineBLE_RST_PIN(GPIO_PIN_03)/*藍(lán)牙角色引腳*/#defineBLE_MS_PORT(GPIO_PORT_D)#defineBLE_MS_PIN(GPIO_PIN_04)/*藍(lán)牙喚醒引腳*/#defineBLE_WKP_PORT(GPIO_PORT_D)#defineBLE_WKP_PIN(GPIO_PIN_06)/*藍(lán)牙模式引腳*/#defineBLE_MODE_PORT(GPIO_PORT_D)#defineBLE_MODE_PIN(GPIO_PIN_05)藍(lán)牙模式配置函數(shù)在E104_BT02.h文件中,預(yù)定義了藍(lán)牙模式配置函數(shù),如下所示://模式選擇#defineBLE_MODE_CONFIG (GPIO_ResetPins(BLE_MODE_PORT,BLE_MODE_PIN))#defineBLE_MODE_TRANSPARENT (GPIO_SetPins(BLE_MODE_PORT,BLE_MODE_PIN))藍(lán)牙模式引腳低電平時(shí)為配置模式,高電平時(shí)為透?jìng)髂J?。藍(lán)牙模塊喚醒函數(shù)在E104_BT02.c文件,找到BLE_SleepMode()函數(shù),如下所示:/***@description:*@param{uint8_t}mode*0:關(guān)閉失眠模式*1:開(kāi)啟睡眠模式*@return{*}*/staticvoidBLE_SleepMode(uint8_tmode){if(0==mode)//關(guān)閉睡眠模式

{BLE_Sleep_Off();}elseif(1==mode)//開(kāi)啟睡眠模式

{BLE_Sleep_On();}}該函數(shù)通過(guò)形參mode選擇1或0,開(kāi)啟還是關(guān)閉藍(lán)牙睡眠模式。//藍(lán)牙關(guān)閉睡眠模式函數(shù)staticvoidBLE_Sleep_Off(void){GPIO_SetPins(BLE_WKP_PORT,BLE_WKP_PIN);DDL_DelayMS(10);GPIO_ResetPins(BLE_WKP_PORT,BLE_WKP_PIN);}藍(lán)牙模塊喚醒引腳檢測(cè)到上升沿,模塊進(jìn)入睡眠模式,如BLE_Sleep_Off()函數(shù)所示。//藍(lán)牙開(kāi)啟睡眠模式函數(shù)staticvoidBLE_Sleep_On(void){GPIO_ResetPins(BLE_WKP_PORT,BLE_WKP_PIN);DDL_DelayMS(1);GPIO_SetPins(BLE_WKP_PORT,BLE_WKP_PIN);}藍(lán)牙模塊喚醒引腳檢測(cè)到下降沿,模塊進(jìn)入喚醒模式,如BLE_Sleep_On()函數(shù)所示。從檢測(cè)到下降沿到模塊喚醒完成約7毫秒,期間透?jìng)鞴δ軙簳r(shí)無(wú)效,直到系統(tǒng)喚醒成功后系統(tǒng)恢復(fù)正常,如圖所示。藍(lán)牙模塊復(fù)位函數(shù)在E104_BT02.c文件,找到BLE_RST()函數(shù),如下所示://藍(lán)牙硬件復(fù)位函數(shù)staticvoidBLE_RST(void){GPIO_SetPins(BLE_RST_PORT,BLE_RST_PIN);DDL_DelayMS(1);GPIO_ResetPins(BLE_RST_PORT,BLE_RST_PIN);}可以看到藍(lán)牙復(fù)位引腳先是高電平,經(jīng)過(guò)1毫秒后,引腳變?yōu)榈碗娖?,藍(lán)牙就開(kāi)始硬件復(fù)位。藍(lán)牙角色選擇函數(shù)在E104_BT02.h文件中,預(yù)定義了藍(lán)牙模式配置函數(shù),如下所示://主從選擇#defineBLE_ROLE_MASTER (GPIO_SetPins(BLE_MS_PORT,BLE_MS_PIN))#defineBLE_ROLE_SLAVE (GPIO_ResetPins(BLE_MS_PORT,BLE_MS_PIN))藍(lán)牙角色選擇引腳低電平時(shí)為從機(jī)模式,高電平時(shí)為主機(jī)模式。BLE藍(lán)牙初始化在E104_BT02.c文件中,找到BLE_Init()函數(shù)。1)先將藍(lán)牙普通IO初始化。初始化藍(lán)牙復(fù)位、喚醒、模式、角色引腳。

stc_gpio_init_tstcGpioInit;(void)GPIO_StructInit(&stcGpioInit);stcGpioInit.u16PinState=PIN_STAT_SET;stcGpioInit.u16PinDir=PIN_DIR_OUT;(void)GPIO_Init(BLE_RST_PORT,BLE_RST_PIN|BLE_WKP_PIN|BLE_MODE_PIN|BLE_MODE_PIN,&stcGpioInit);2)復(fù)位藍(lán)牙。BLE_RST();//藍(lán)牙復(fù)位3)關(guān)閉藍(lán)牙睡眠模式,等待7毫秒后喚醒完成。

BLE_SleepMode(0);//關(guān)閉睡眠模式

DDL_DelayMS(7);//7ms后喚醒完成4)設(shè)置藍(lán)牙為透?jìng)髂J?/p>

BLE_MODE_TRANSPARENT;//透?jìng)髂J?)設(shè)置藍(lán)牙為從機(jī)模式

BLE_ROLE_SLAVE;//從機(jī)模式藍(lán)牙的串口直接使用的是HC32串口2通信,在BSP_UART文件中修改相應(yīng)引腳即可使用。在main函數(shù)中初始化藍(lán)牙的串口和普通IO口引腳,藍(lán)牙出廠默認(rèn)波特率為19200,所以HC32串口2波特率也是19200,串口1與上位機(jī)通信頻率57600。

LL_PERIPH_WE(LL_PERIPH_ALL);//解除MCU寄存器寫保護(hù)

BSP_CLK_Init();//時(shí)鐘初始化

LED_Init();//LED初始化

TMR0_USART_Config();//串口接收超時(shí)定時(shí)器初始化

USART1_Init(57600);//串口1初始化

USART2_Init(19200);//串口2初始化

LL_PERIPH_WP(LL_PERIPH_ALL);//MCU寄存器寫保護(hù)在主循環(huán)中,只做了一件事串口轉(zhuǎn)發(fā),將串口1接收到的數(shù)據(jù)發(fā)送給串口2,串口2收到的數(shù)據(jù)發(fā)送給串口1。這樣手機(jī)下發(fā)數(shù)據(jù)給藍(lán)牙,上位機(jī)接收到數(shù)據(jù),上位機(jī)下發(fā)數(shù)據(jù)給藍(lán)牙模組,手機(jī)通過(guò)藍(lán)牙接收到上位機(jī)數(shù)據(jù)。

if(stcUsart1RXTXData.Usart_RX_End==1){USART2_Send_BUF(stcUsart1RXTXData.u8Usart_RX_Buf,stcUsart1RXTXData.Usart_RX_Len);stcUsart1RXTXData.Usart_RX_End=0;}if(stcUsart2RXTXData.Usart_RX_End==1){USART1_Send_BUF(stcUsart2RXTXData.u8Usart_RX_Buf,stcUsart2RXTXData.Usart_RX_Len);stcUsart2RXTXData.Usart_RX_End=0;}任務(wù)實(shí)現(xiàn)第一步:準(zhǔn)備可穿戴系統(tǒng)應(yīng)用板卡(ZW-M607)和智能大棚溫濕度監(jiān)測(cè)系統(tǒng)應(yīng)用板卡(ZW-M606),使用1根2X6P排線連接M606標(biāo)準(zhǔn)接口A和M607標(biāo)準(zhǔn)接口A。第二步: 準(zhǔn)備兩個(gè)12VDC電源給兩張板卡供電,插入后按下電源開(kāi)關(guān)。。第三步:使用USB轉(zhuǎn)方口線連接板卡(CMSIS-DAP端口)和電腦。第四步:使用keil5打開(kāi)工程,編譯下載程序。參考程序:國(guó)產(chǎn)嵌入式技術(shù)及應(yīng)用實(shí)踐資源\項(xiàng)目代碼\項(xiàng)目四\任務(wù)1第五步:打開(kāi)串口助手,波特率57600。第六步:使用手機(jī)打開(kāi)BLE藍(lán)牙軟件,選擇“E104-BT02-V5.0”,點(diǎn)擊連接,如圖所示。藍(lán)牙軟件地址:國(guó)產(chǎn)嵌入式技術(shù)及應(yīng)用實(shí)踐資源\開(kāi)發(fā)工具及軟件資料\藍(lán)牙軟件.apk第七步:如圖所示,連接成功會(huì)進(jìn)入以下界面。第八步:如圖所示,選擇“UnknownService”,“UUID:0000fff1……”那一欄點(diǎn)擊鬧鐘那個(gè)圖標(biāo),“UUID:0000fff2……”那一欄點(diǎn)擊上箭頭那個(gè)圖標(biāo),圖標(biāo)灰色變藍(lán)色。第九步:如圖所示,點(diǎn)擊實(shí)時(shí)日志,接收格式選擇utf-8,串口助手發(fā)送字符串“456”會(huì)返回發(fā)送的字符串,BLE調(diào)試寶軟件接受到數(shù)據(jù)。。第十步:如圖所示,BLE藍(lán)牙軟件以u(píng)tf-8格式發(fā)送字符串“ABC”,串口助手軟件接受到數(shù)據(jù)。任務(wù)結(jié)束成都職業(yè)技術(shù)學(xué)院成都卓物科技有限公司任務(wù)2溫濕度傳感器采集功能設(shè)計(jì)與開(kāi)發(fā)成都職業(yè)技術(shù)學(xué)院成都卓物科技有限公司任務(wù)情報(bào)I2C總線是由飛利浦(現(xiàn)為恩智浦NXP)公司開(kāi)發(fā),廣泛應(yīng)用于各種嵌入式系統(tǒng)和傳感器網(wǎng)絡(luò)中。HC32F460系列的I2C(Inter-IntegratedCircuit)總線模塊支持I2C標(biāo)準(zhǔn)協(xié)議,并可配置為支持SMBusVer2.0總線協(xié)議。該芯片擁有3個(gè)獨(dú)立的I2C外設(shè)模塊(I2C1~I2C3),具備以下基本功能:1)支持多主多從的總線協(xié)議,這意味著在I2C總線上可以有多個(gè)主設(shè)備和多個(gè)從設(shè)備,它們之間可以進(jìn)行通信。2)支持標(biāo)準(zhǔn)模式100Kbps和快速模式400Kbps的數(shù)據(jù)傳輸速率。3)可以設(shè)定2個(gè)從機(jī)地址,并支持7位地址格式和10位地址格式,以區(qū)分不同的從設(shè)備。4)具備I2C協(xié)議握手功能、仲裁功能和SCL時(shí)鐘同步功能,確保通信的穩(wěn)定性和可靠性。由于I2C總線是一種兩線制的串行總線,一根是時(shí)鐘信號(hào)線(SCL),一根是數(shù)據(jù)信號(hào)線(SDA),它可以連接多個(gè)器件,通過(guò)地址區(qū)別每一個(gè)器件,I2C經(jīng)典連接如圖所示。其物理層特點(diǎn)主要包含以下幾個(gè)方面:雙線制接口:I2C總線由兩根信號(hào)線組成——串行數(shù)據(jù)線SDA(SerialData)和串行時(shí)鐘線SCL(SerialClock)。這兩條線都是雙向的,意味著每個(gè)連接到總線的設(shè)備都可以發(fā)送和接收數(shù)據(jù)。開(kāi)放式-drain設(shè)計(jì):SDA和SCL線采用開(kāi)漏輸出設(shè)計(jì),這意味著它們需要外部上拉電阻來(lái)保持高電平狀態(tài)。當(dāng)任何設(shè)備輸出低電平時(shí),它會(huì)將線路拉低;沒(méi)有設(shè)備輸出低電平時(shí),上拉電阻會(huì)將線拉回到高電平。這種設(shè)計(jì)有利于實(shí)現(xiàn)線與邏輯,便于多個(gè)設(shè)備共享總線并進(jìn)行總線仲裁。多主機(jī)支持:I2C協(xié)議支持多主機(jī)(multi-master)模式,即總線上可以連接多個(gè)能夠發(fā)起通信的主設(shè)備。當(dāng)多個(gè)主設(shè)備嘗試同時(shí)控制總線時(shí),通過(guò)仲裁機(jī)制決定哪個(gè)設(shè)備獲得總線控制權(quán)。尋址機(jī)制:I2C協(xié)議支持兩種尋址模式——7位地址模式和10位地址模式。每個(gè)從設(shè)備都有一個(gè)唯一的地址,主設(shè)備通過(guò)發(fā)送地址來(lái)選擇要通信的從設(shè)備。7位地址模式下,地址范圍是0x00到0x7F(加上讀寫位變?yōu)?x80到0x7F或0x00到0x7E),而10位地址模式擴(kuò)展了地址空間。簡(jiǎn)單的時(shí)鐘同步:I2C協(xié)議中的時(shí)鐘線SCL由主設(shè)備控制,保證了數(shù)據(jù)傳輸?shù)耐叫?。從設(shè)備不需要自己的晶振,減少了硬件成本和復(fù)雜度。多種傳輸速率:I2C支持多種傳輸速率,包括標(biāo)準(zhǔn)模式(100kbps)、快速模式(400kbps)、快速加模式(1Mbps)、高速模式(3.4Mbps)等,具體取決于總線條件和所用器件的支持情況。硬件支持的確認(rèn)與非確認(rèn):在數(shù)據(jù)傳輸過(guò)程中,通過(guò)ACK/NACK(確認(rèn)/非確認(rèn))位來(lái)表明數(shù)據(jù)傳輸?shù)臓顟B(tài)。接收方通過(guò)拉低SCL線后的第一個(gè)時(shí)鐘周期的SDA線來(lái)發(fā)送ACK,表示數(shù)據(jù)已正確接收;如果不拉低SDA,則表示NACK。通常情況下,一個(gè)完整I2C的通信過(guò)程包括下列4個(gè)步驟:1)開(kāi)始條件圖所示,I2C總線默認(rèn)在空閑狀態(tài)時(shí)都是高電平,當(dāng)SDA在SCL高電平時(shí)從高電平變?yōu)榈碗娖奖硎綢2C總線開(kāi)始信號(hào)。2)地址傳送如圖所示,一般I2C的地址為7位或者10位,以7位地址舉例,在發(fā)送數(shù)據(jù)前先將地址左移一位,最后一位由功能決定0或1補(bǔ)上,寫器件數(shù)據(jù)功能時(shí)為0,讀器件數(shù)據(jù)功能時(shí)為1。地址發(fā)送完成后會(huì)有一個(gè)應(yīng)答ACK,SDA為低電平表示ACK。3)數(shù)據(jù)傳送如圖所示,I2C總線發(fā)完地址后就會(huì)讀取或者發(fā)送數(shù)據(jù),發(fā)送一個(gè)字節(jié)數(shù)據(jù)后面應(yīng)答幀為NACK表示當(dāng)前I2C總線通訊只有一個(gè)字節(jié)的數(shù)據(jù),NACK時(shí)SDA為高電平。若傳輸數(shù)據(jù)后應(yīng)答幀為ACK,表示后面還有數(shù)據(jù),每傳輸一個(gè)字節(jié)數(shù)據(jù)后面都會(huì)加一個(gè)應(yīng)答幀ACK,直到NACK為止,表示本次數(shù)據(jù)傳輸完了。4)停止條件如圖所示,當(dāng)I2C總線傳輸數(shù)據(jù)后應(yīng)答幀為NACK就要發(fā)送停止信號(hào)了,SCL保持高電平,然后SDA再變?yōu)楦唠娖骄蜑镮2C的停止信號(hào)。通常的I2C通信先從SDA從高電平變?yōu)榈碗娖?,隨后SCL從高電平變?yōu)榈碗娖介_(kāi)始,隨后傳送地址+讀寫位,應(yīng)答一個(gè)幀,開(kāi)始數(shù)據(jù)傳輸,每傳輸一個(gè)字節(jié)數(shù)據(jù)都會(huì)有應(yīng)答幀,數(shù)據(jù)傳輸完后,SCL從低電平變?yōu)楦唠娖剑琒DA從低電平變?yōu)楦唠娖桨l(fā)送停止信號(hào),如圖所示。HC32F460的I2C提供多主模式功能,可以控制所有I2C總線的協(xié)議、仲裁。支持標(biāo)準(zhǔn)模式、快速模式、SMBus總線,I2C系統(tǒng)結(jié)構(gòu)圖如圖133所示。主要特性:1)I2C總線方式、SMBUS總線方式可選。主機(jī)模式、從機(jī)模式可選。自動(dòng)確保與傳送速率相對(duì)應(yīng)的各種準(zhǔn)備時(shí)間、保持時(shí)間和總線空閑時(shí)間。2)標(biāo)準(zhǔn)模式最大100Kbps,快速模式最大400Kbps。3)自動(dòng)生成開(kāi)始條件、重新開(kāi)始條件和停止條件,并能檢測(cè)到總線的開(kāi)始條件,重新開(kāi)始條件和停止條件。4)可以設(shè)定2個(gè)從機(jī)模式地址??赏瑫r(shí)設(shè)定7位地址格式和10位地址格式。能檢測(cè)到廣播呼叫地址、SMBus主機(jī)地址、SMBus設(shè)備默認(rèn)地址、SMBus報(bào)警地址。5)發(fā)送時(shí)可以自動(dòng)判定應(yīng)答位。接收時(shí)可以自動(dòng)發(fā)送應(yīng)答位。6)握手功能。7)仲裁功能。8)超時(shí)功能,可以檢測(cè)SCL時(shí)鐘長(zhǎng)時(shí)間停止。9)SCL輸入和SDA輸入內(nèi)置數(shù)字濾波器,濾波能力可編程。10)通信錯(cuò)誤,接收數(shù)據(jù)滿,發(fā)送數(shù)據(jù)空,一幀發(fā)送結(jié)束,地址匹配一致中斷。本次任務(wù)常用寄存器:1)I2C控制寄存器(I2C_CRx)2)I2C狀態(tài)寄存器(I2C_SR)3)I2C狀態(tài)清零寄存器(I2C_CLR)4)I2C數(shù)據(jù)發(fā)送寄存器(I2C_DTR)5)I2C數(shù)據(jù)接收寄存器(I2C_DRR)6)I2C時(shí)鐘控制寄存器(I2C_CCR)HC32F460的寄存器有些復(fù)雜,現(xiàn)在根據(jù)官方給出的I2C初始化流程,對(duì)相應(yīng)寄存器進(jìn)行查找。在開(kāi)始發(fā)送或者接收數(shù)據(jù)時(shí),I2C初始化步驟:1.PE位設(shè)定為0;2.SWRST設(shè)定為1,通信復(fù)位;3.PE位設(shè)定為1,內(nèi)部狀態(tài)復(fù)位;4.設(shè)定從機(jī)地址格式和地址;5.設(shè)定波特率;6.根據(jù)需要設(shè)定控制寄存器功能及中斷;7.SWRST位設(shè)定為0,解除內(nèi)部狀態(tài)復(fù)位;8.初始化結(jié)束??砂l(fā)送接收數(shù)據(jù)。PE位在I2C控制寄存器1(I2C_CR1)中第0位,如圖所示。該位需要配合SWRST使用,當(dāng)PE等于0時(shí),置位SWRST實(shí)現(xiàn)通信復(fù)位;當(dāng)PE等于1時(shí),置位SWRST實(shí)現(xiàn)內(nèi)部狀態(tài)復(fù)位。SWRST位在I2C控制寄存器1(I2C_CR1)中第15位,如圖所示。通信復(fù)位:I2C內(nèi)部的全部寄存器及內(nèi)部狀態(tài)復(fù)位。內(nèi)部狀態(tài)復(fù)位:I2C_SR,I2C_DSR寄存器和內(nèi)部狀態(tài)機(jī)進(jìn)行復(fù)位。HC32F460支持2個(gè)I2C從機(jī)地址設(shè)置,所以有兩個(gè)I2C從機(jī)地址寄存器,以I2C從機(jī)地址寄存器0(I2C_SLR0)舉例,如圖所示。設(shè)置I2C波特率使用I2C時(shí)鐘控制寄存器(I2C_CCR),如圖所示I2C時(shí)鐘來(lái)自PCLK3,通過(guò)FREQ位設(shè)置I2C基準(zhǔn)時(shí)鐘頻率,I2C通訊波特率使用SHIGHW和SLOWW位設(shè)置。SHIGHW位(設(shè)定SCL高電平寬度位)在主機(jī)模式下,SHIGHW是用于設(shè)定SCL時(shí)鐘的高電平寬度。在從機(jī)模式下,設(shè)定無(wú)效。SLOWW位(設(shè)定SCL低電平寬度位)SLOWW是用于設(shè)定SCL時(shí)鐘的低電平寬度。在從機(jī)模式下,設(shè)定值要大于數(shù)據(jù)準(zhǔn)備時(shí)間。數(shù)據(jù)準(zhǔn)備時(shí)間(tSU:DAT)250ns(~100kbps:標(biāo)準(zhǔn)模式)100ns(~400kbps:快速模式)波特率的算法有4種,如下所示:1)DNFE=0,FREQ=000,波特率=1/{[(SHIGHW+3)+(SLOWW+3)]/ΦI2C+SCL上升時(shí)間+SCL下降時(shí)間}2)DNFE=1,FREQ=000,波特率=1/{[(SHIGHW+3+濾波能力)+(SLOWW+3+濾波能力)]/ΦI2C+SCL上升時(shí)間+SCL下降時(shí)間}3)DNFE=0,FREQ!=000,波特率=1/{[(SHIGHW+2)+(SLOWW+2)]/ΦI2C+SCL上升時(shí)間+SCL下降時(shí)間}4)DNFE=1,FREQ!=000,波特率=1/{[(SHIGHW+2+濾波能力)+(SLOWW+2+濾波能力)]/ΦI2C+SCL上升時(shí)間+SCL下降時(shí)間}I2C初始化步驟第6步根據(jù)需要設(shè)定控制寄存器功能及中斷,由于I2C的控制寄存器太多,一般I2C初始化設(shè)置功能引腳,然后設(shè)置時(shí)鐘和波特率,再使能相應(yīng)I2C單元,就可以進(jìn)行接收和發(fā)送數(shù)據(jù)了。I2C狀態(tài)寄存器(I2C_SR)里面包含了SMBUS和I2C總線的狀態(tài),主要關(guān)注這幾個(gè)位,如表所示。I2C狀態(tài)清零寄存器(I2C_CLR)清除總線上一些通信狀態(tài),如圖所示。I2C數(shù)據(jù)發(fā)送寄存器(I2C_DTR)用于總線上發(fā)送數(shù)據(jù),如圖所示,它和I2C_DSR寄存器搭配使用。如果I2C_DSR寄存器為空,就將寫在I2C_DTR寄存器的發(fā)送數(shù)據(jù)傳送到I2C_DSR寄存器,發(fā)送模式時(shí)開(kāi)始發(fā)送數(shù)據(jù)到SDA上。I2C_DSR寄存器和I2C_DTR寄存器是雙緩沖結(jié)構(gòu),在I2C_DSR寄存器數(shù)據(jù)發(fā)送過(guò)程中,如果預(yù)先寫I2C_DTR寄存器的數(shù)據(jù),就能進(jìn)行連續(xù)發(fā)送數(shù)據(jù)。I2C_DTR寄存器可讀可寫。請(qǐng)?jiān)诎l(fā)送數(shù)據(jù)空中斷要求發(fā)生時(shí),僅寫一次I2C_DTR寄存器。C數(shù)據(jù)接收寄存器(I2C_DRR)用于總線上接收數(shù)據(jù),如圖140所示,也和I2C_DSR寄存器搭配使用。如果接收到1幀數(shù)據(jù),就能將接收數(shù)據(jù)從移位寄存器(I2C_DSR)轉(zhuǎn)存到I2C_DRR寄存器,進(jìn)而可以進(jìn)入到下一個(gè)數(shù)據(jù)接收狀態(tài)。I2C_DSR寄存器和I2C_DRR寄存器是雙緩沖結(jié)構(gòu),在I2C_DSR寄存器數(shù)據(jù)接收過(guò)程中,如果讀取了I2C_DRR寄存器的數(shù)據(jù),就能進(jìn)行連續(xù)接收數(shù)據(jù)。禁止對(duì)I2C_DRR寄存器寫。請(qǐng)?jiān)诮邮諗?shù)據(jù)滿中斷要求發(fā)生時(shí),僅讀一次I2C_DRR寄存器。在I2C_SR.RFULLF標(biāo)志位為“1”的狀態(tài)下,如果不讀取I2C_DRR寄存器的數(shù)據(jù),而立即接收下一個(gè)數(shù)據(jù),SCL時(shí)鐘就在下一次RFULLF標(biāo)志位變“1”的前一個(gè)SCL時(shí)鐘自動(dòng)保持為低電平。SHT20傳感器搭載在板卡ZW-M606中,一共有7個(gè)引腳,寫的時(shí)候地址為0x80,讀的時(shí)候?yàn)?x81,如圖所示。ZW-M606沒(méi)有板載主芯片可以直接讀取傳感器數(shù)據(jù),可以通過(guò)板卡ZW-M607標(biāo)準(zhǔn)接口A讀取數(shù)據(jù),實(shí)際硬件連接SDA為PB6,SCL為PB5。如圖所示,引腳PB6和PB5在硬件手冊(cè)中對(duì)應(yīng)組Func_Grp2。如圖所示,在組Func_Grp2中,只有I2C3,所以引腳PB6和PB5為I2C3單元。如圖所示,在組Func_Grp2中,只有I2C3,所以引腳PB6和PB5為I2C3單元。SHT20的分辨率為12bit或14bit,讀取溫濕度數(shù)據(jù)時(shí)有兩種模式保持主機(jī)和非保持主機(jī),這兩種模式的區(qū)別在于測(cè)量期間(發(fā)出、測(cè)量命令后需要等待一段時(shí)間才能讀?。┦欠裨试S主機(jī)與別的I2C設(shè)備通信。在保持主機(jī)模式下,發(fā)出測(cè)量命令后,在測(cè)量完成之前傳感器會(huì)移植拉低SCL,迫使主機(jī)進(jìn)入等待狀態(tài),傳感器內(nèi)部處理完成會(huì)釋放SCL,主機(jī)就可以讀數(shù)據(jù)了,如圖所示。在非保持主機(jī)模式下,發(fā)出測(cè)量命令后,傳感器不會(huì)拉低SCL,主機(jī)需要輪訓(xùn)接收數(shù)據(jù),如果傳感器內(nèi)部處理未完成,不會(huì)發(fā)出ACK信號(hào),主機(jī)需要重新啟動(dòng)傳輸時(shí)序,如圖所示。SHT20的I2C地址為0x40,讀取命令如表所示。濕度計(jì)算公式RH=-6+125×S_RH/2^16,S_RH為原始濕度。溫度計(jì)算公式T=-46.85+175.72×S_T/2^16,S_T為原始溫度。I2C編程說(shuō)明小華半導(dǎo)體公司提供的驅(qū)動(dòng)庫(kù)包含了HC32F460芯片的I2C驅(qū)動(dòng),相關(guān)的定義和說(shuō)明可以在hc32_ll_I2C.C和hc32_ll_I2C.h文件中找到。I2C編程定義說(shuō)明在HC32F460.h文件中HC32F460芯片的I2C一共有3個(gè)單元定義如下:#defineCM_I2C1((CM_I2C_TypeDef*)CM_I2C1_BASE)#defineCM_I2C2((CM_I2C_TypeDef*)CM_I2C2_BASE)#defineCM_I2C3((CM_I2C_TypeDef*)CM_I2C3_BASE)在hc32_ll_i2c.h文件中I2C配置參數(shù)時(shí)使用stc_i2c_init_t結(jié)構(gòu)體,定義如下:typedefstruct{uint32_tu32ClockDiv;uint32_tu32Baudrate;uint32_tu32SclTime;}stc_i2c_init_t;u32ClockDiv配置I2C的時(shí)鐘分頻,該時(shí)鐘來(lái)源PCLK3。u32Baudrate設(shè)置I2C的通信速率。u32SclTime設(shè)置SCL時(shí)鐘上升下降時(shí)間。I2C常用庫(kù)函數(shù)說(shuō)明I2C常用庫(kù)函數(shù)中的初始化和總線函數(shù)是在官方庫(kù)文件hc32_ll_i2c.c里,I2C發(fā)送和接收函數(shù)是根據(jù)常用的I2C通信協(xié)議自己寫的,在BSP_I2C.c文件中。溫濕度傳感器初始化SHT20的初始化只需要I2C引腳初始化就行了,用的是HC32F460的I2C3單元。在BSP_I2C.h文件中修改對(duì)用引腳SCL(PB5)和SDA(PB6),設(shè)置通信頻率為100K,如下所示:/*DefineI2C3portandpinforSDAandSCL*/#defineI2C3_SCL_PORT(GPIO_PORT_B)#defineI2C3_SCL_PIN(GPIO_PIN_05)#defineI2C3_SDA_PORT(GPIO_PORT_B)#defineI2C3_SDA_PIN(GPIO_PIN_06)#defineBSP_I2C3_BAUDRATE(100000)在BSP_I2C.c文件中找到BSP_I2C3_Init()函數(shù),先定義I2C參數(shù)結(jié)構(gòu)體和通信波特率。

stc_i2c_init_tstcI2cInit;float32_tfErr;1)設(shè)置I2C功能引腳

/*ConfigurationI2CGPIO*/GPIO_SetFunc(I2C3_SCL_PORT,I2C3_SCL_PIN,GPIO_FUNC_49);GPIO_SetFunc(I2C3_SDA_PORT,I2C3_SDA_PIN,GPIO_FUNC_48);2)開(kāi)啟I2C時(shí)鐘

FCG_Fcg1PeriphClockCmd(FCG1_PERIPH_I2C3,ENABLE);3)I2C參數(shù)配置,初始化I2C。

I2C_DeInit(CM_I2C3);(void)I2C_StructInit(&stcI2cInit);stcI2cInit.u32ClockDiv=I2C_CLK_DIV8;stcI2cInit.u32Baudrate=BSP_I2C3_BAUDRATE;stcI2cInit.u32SclTime=0UL;i32Ret=I2C_Init(CM_I2C3,&stcI2cInit,&fErr);4)將I2C總線設(shè)置為等待狀態(tài)

I2C_BusWaitCmd(CM_I2C3,ENABLE);打開(kāi)SHT20.h文件,根據(jù)SHT20的通信協(xié)議,在代碼里定義地址和命令如下所示://SHT20命令typedefenum{SHT20_HostTrig_T=0xE3,//保持主機(jī)模式,測(cè)量溫度

SHT20_HostTrig_RH=0xE5,//保持主機(jī)模式,測(cè)量濕度命令

SHT20_Trig_T=0xF3,//非保持主機(jī)模式,測(cè)量溫度

SHT20_Trig_RH=0xF5,//非保持主機(jī)模式,測(cè)量濕度命令

SHT20_Trig_RST=0xFE,//SHT20復(fù)位命令}enum_sht20_command_t;//SHT20地址typedefenum{SHT20_Addr=0x40,//SHT20地址

SHT20_ReadAddr=0x81,//SHT20讀地址

SHT20_WriteAddr=0x80,//SHT20寫地址}enum_sht20_address_t;打開(kāi)SHT20.c文件,找到SHT20_ReadValues()函數(shù),該函數(shù)是讀取SHT20的溫濕度數(shù)據(jù)并計(jì)算出來(lái)。

/*測(cè)量溫度*/I2C_RegReceive(SHT20_I2C_UNIT,SHT20_Addr,SHT20_HostTrig_T,tem,3,SHT20_I2C_TIMEOUT);/*測(cè)量濕度*/I2C_RegReceive(SHT20_I2C_UNIT,SHT20_Addr,SHT20_HostTrig_RH,rh,3,SHT20_I2C_TIMEOUT);使用I2C_RegReceive()函數(shù)讀取原始的溫度和濕度數(shù)據(jù),該數(shù)據(jù)是兩個(gè)字節(jié)的數(shù)據(jù),HC32F460的I2C接收數(shù)據(jù)是一個(gè)字節(jié)一個(gè)字節(jié)接收,需要將接收到的數(shù)據(jù)從兩個(gè)八位數(shù)據(jù)轉(zhuǎn)為一個(gè)16位的數(shù)據(jù),所以得到的溫度和濕度數(shù)據(jù)是需要轉(zhuǎn)換的。

Tdata=tem[0];Tdata<<=8;Tdata+=tem[1]&0xfe;RHdata=rh[0];RHdata<<=8;RHdat

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論