版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第1章鴻蒙系統(tǒng)應用開發(fā)基礎本章主要講述鴻蒙系統(tǒng)應用開發(fā)基礎知識。通過學習本節(jié)將能夠了解鴻蒙系統(tǒng)的開發(fā)基礎知識。通過本節(jié)學習可以:了解物聯(lián)網(wǎng)系統(tǒng)了解Hi3861芯片了解OpenHarmony鴻蒙系統(tǒng)物聯(lián)網(wǎng)系統(tǒng)概述華為海思Hi3861芯片概述鴻蒙系統(tǒng)概述物聯(lián)網(wǎng)系統(tǒng)概述物聯(lián)網(wǎng)(InternetofThings,IoT):把所有物品通過信息傳感器與互聯(lián)網(wǎng)連接起來,實現(xiàn)智能化識別和管理的萬物互聯(lián)網(wǎng)絡。物聯(lián)網(wǎng)系統(tǒng)概述物聯(lián)網(wǎng)應用領域智能家居物聯(lián)網(wǎng)技術驅動家用電器智能化,通過各類智能設備實現(xiàn)遠程控制,提升家居舒適度和生活便利性。健康管理通過物聯(lián)網(wǎng)技術,智能設備實時監(jiān)測健康指標,提供專業(yè)運動建議和疾病防治方案,助力科學健身和疾病預防。智慧城市助力城市交通、環(huán)境監(jiān)測、市政管理智能化,實現(xiàn)節(jié)能減排,提升城市可持續(xù)發(fā)展能力,改善市民生活質量。產(chǎn)業(yè)促進5G技術為車聯(lián)網(wǎng)提供了更高速、更可靠的網(wǎng)絡連接;同時人工智能、大數(shù)據(jù)、云計算等技術的深度融合。計算機系統(tǒng)硬件架構基本上是由CPU、
內(nèi)存、外存、輸入設備和輸出設備等五個部件組成計算機系統(tǒng)嵌入式系統(tǒng)是以計算機系統(tǒng)技術為中心,綜合考慮產(chǎn)品需求、成本、功耗、可靠性等特性,而定制軟硬件資源的計算機系統(tǒng)。嵌入式系統(tǒng)PC-計算機系統(tǒng)手機-計算機系統(tǒng)物聯(lián)網(wǎng)系統(tǒng)是以嵌入式系統(tǒng)為基礎,加入各種傳感器與聯(lián)網(wǎng)設備構造而成。物聯(lián)網(wǎng)系統(tǒng)9物聯(lián)網(wǎng)系統(tǒng)概述華為海思Hi3861芯片概述鴻蒙系統(tǒng)概述Hi3861是華為海思基于開源的RISC-VCPU架構推出集成Wi-Fi網(wǎng)絡的物聯(lián)網(wǎng)低功耗主控芯片Hi3861芯片概述123456智能照明環(huán)境監(jiān)測智慧城市智能家電智能門鎖智能安防Hi3861產(chǎn)品應用
CPU:32bit高性能CPU,最大工作頻率160MHz
內(nèi)存:內(nèi)置SRAM352KB
外存:內(nèi)存ROM288KB與2MBFlash
輸入/輸出設備接口:1個SDIOSlave接口、2個SPI接口、2個I2C接口、3個UART接
口、15個GPIO接口、7路ADC輸入、6路PWM、1個I2S接口
內(nèi)置Wi-Fi:2.4GHz頻段、支持IEEE802.11b/g/n、支持加密WFAWPA/WPA2personal/WPS2.0協(xié)議、支持最大速率72.2MbpsHi3861功能特性Hi3861開發(fā)板(1/3)除Hi3861主控芯片電路外,還提供了LED、按鍵、觸摸LCD屏接口、type-c的USB轉UART接口等。Hi3861開發(fā)板(2/3)核心板原理圖Hi3861開發(fā)板(3/3)LED和按鍵的電路原理圖物聯(lián)網(wǎng)系統(tǒng)概述華為海思Hi3861芯片概述鴻蒙系統(tǒng)概述OpenHarmony是華為向開放原子開源基金會捐贈的一整套開源操作系統(tǒng)項目,它是鴻蒙操作系統(tǒng)的基礎版本,提供了一個完整的、基于微內(nèi)核的分布式操作系統(tǒng)框架,具有多種操作系統(tǒng)內(nèi)核、多種網(wǎng)絡協(xié)議、圖形界面框架及文件系統(tǒng)等功能模塊。鴻蒙系統(tǒng)概述鴻蒙系統(tǒng)架構18鴻蒙系統(tǒng)類型LiteOS-M內(nèi)核鴻蒙系統(tǒng)架構LiteOS-A內(nèi)核鴻蒙系統(tǒng)架構Linux內(nèi)核鴻蒙系統(tǒng)架構請簡述物聯(lián)網(wǎng)系統(tǒng)與嵌入式系統(tǒng)的關系。請簡述OpenHarmony系統(tǒng)的三種類型。
描述了計算機系統(tǒng)、嵌入式系統(tǒng)、物聯(lián)網(wǎng)系統(tǒng)間的關系。講述了Hi3861芯片的功能特性。講述了OpenHarmony鴻蒙系統(tǒng)的三種類型。謝謝25鴻蒙系統(tǒng)設備開發(fā)基礎本章主要講述鴻蒙設備開發(fā)環(huán)境的搭建。通過學習本節(jié)將能夠了解鴻蒙系統(tǒng)設備開發(fā)環(huán)境的搭建。通過本節(jié)學習可以熟悉:VSCode的安裝devicetool鴻蒙插件安裝設備開發(fā)的SDK下載設備開發(fā)所需的工具集下載和UART接口驅動安裝VSCode的安裝devicetool鴻蒙插件安裝SDK下載工具集下載和UART接口驅動安裝VSCode安裝(1/3)VisualStudioCode(VSCode)是一款功能強大的、免費開源的源代碼編輯軟件,它支持所有主流的開發(fā)語言,并在集成的插件市場上提供各種功能插件。鴻蒙系統(tǒng)利用VSCode的插件機制,實現(xiàn)了設備開發(fā)流程的全面支持。在VSCode官網(wǎng)下載Windows系統(tǒng)版本軟件VSCode安裝(2/3)下載完成后執(zhí)行VSCodeUserSetup-x64-1.92.0.exe后,根據(jù)向導使用默認設置逐步完成安裝操作。安裝步驟完成后,啟動VSCode,安裝必要的設備開發(fā)插件VSCode安裝(3/3)“C/C++”插件用于實現(xiàn)VSCode對鴻蒙系統(tǒng)C語言源文件的支持。“GN”插件用于實現(xiàn)VSCode對鴻蒙系統(tǒng)的*.gn編譯配置文件的支持?!癐ncludeAutoComplete”插件實現(xiàn)源程序頭文件名的自動補全。VSCode的安裝devicetool鴻蒙插件安裝SDK下載工具集下載和UART接口驅動安裝devicetool鴻蒙插件安裝(1/2)在鴻蒙系統(tǒng)官網(wǎng)下載Windows系統(tǒng)版本后得到“devicetool-windows-tool-00.zip”壓縮包。解壓壓縮包后,運行“devicetool-windows-tool-00.exe”安裝程序。devicetool鴻蒙插件安裝(2/2)鴻蒙設備開發(fā)的VSCode插件完成安裝后,在VSCode的插件列表中顯示出相關的插件并在窗口左側新增了一個“DevEco”頁框按鈕VSCode的安裝devicetool鴻蒙插件安裝SDK下載工具集下載和UART接口驅動安裝SDK下載安裝完Git程序后,
在命令行窗口執(zhí)行命令:gitclone/HiSpark/hi3861_hdu_iot_application下載完成后,得到的適配Hi3861的鴻蒙系統(tǒng)工程源碼VSCode的安裝devicetool鴻蒙插件安裝SDK下載工具集下載和UART接口驅動安裝工具集下載鴻蒙設備開發(fā)所需的編譯器等相關的工具在華為官網(wǎng)的下載地址:/DevTools_Hi3861V100_v1.0.zip下載并解壓縮開發(fā)工具包后,放在較淺層次的目錄中且重命名文件夾UART驅動安裝執(zhí)行“D:\development\Hi3861\hi3861-tools\usb_serial_driver\CH341SER.EXE”完成驅動安裝。安裝完成并通過數(shù)據(jù)線連接開發(fā)板與PC機后,在系統(tǒng)的設備管理器即可查看到對應的COM口請簡述devicetool與VSCode的關系。
講述了VSCode的安裝。講述了devicetool插件的安裝。講述了設備開發(fā)的SDK下載。講述了設備開發(fā)的工具集下載。講述了開發(fā)板UART接口的驅動安裝。本章主要講述Hi3861工程源碼開發(fā)基礎。通過學習本節(jié)將能夠學習Hi3861工程源碼開發(fā)基礎。通過本節(jié)學習可以熟悉:工程源碼導入工程配置工程源碼編譯工程程序燒錄工程程序調(diào)試工程加入程序代碼工程源碼導入工程配置工程源碼編譯工程程序燒錄工程程序調(diào)試工程加入程序代碼工程源碼導入(1/3)工程源碼導入(2/3)在首次導入工程源碼時會彈出設置窗口,設置源碼工程所用的主控芯片為HI3861即可,其他兩項設置會自動適配。工程源碼導入(3/3)工程具體源文件目錄與用途工程源碼導入工程配置工程源碼編譯工程程序燒錄工程程序調(diào)試工程加入程序代碼工程配置工程源碼導入工程配置工程源碼編譯工程程序燒錄工程程序調(diào)試工程源碼編譯點擊“Build”或“Rebuild”按鈕進行編譯。Rebuild會清除所有已編譯文件并重新編譯,適用于新增或刪除工程源文件時;使用Build,它只會更新這些修改過的文件。工程源碼導入工程配置工程源碼編譯工程程序燒錄工程程序調(diào)試工程加入程序代碼工程程序燒錄點擊“Upload”待TERMINAL窗口上輸出提示后,則按開發(fā)板的RESET鍵后啟動通過UART接口傳輸并燒錄程序文件。工程源碼導入工程配置工程源碼編譯工程程序燒錄工程程序調(diào)試工程加入程序代碼工程程序調(diào)試點擊“Monitor”以啟動UART接收功能,此時開發(fā)板會通過UART接口返回相關信息。工程源碼導入工程配置工程源碼編譯工程程序燒錄工程程序調(diào)試工程加入程序代碼工程加入程序代碼在VSCode源文件瀏覽器上選中“app”文件夾后,右鍵菜單選擇“NewFolder...”創(chuàng)建myhello子目錄,并通過“NewFile...”右鍵菜單創(chuàng)建myhello_demo.c源文件工程加入程序代碼Myhello_demo.c輸入代碼:#include<stdio.h>
//提供printf函數(shù)#include<ohos_init.h>//提供SYS_RUN/APP_FEATURE_INIT宏定義voidmyhelloInit()//自定義的入口函數(shù){
printf("myhelloinit\n");}//指定在鴻蒙系統(tǒng)的應用層執(zhí)行入口函數(shù)APP_FEATURE_INIT(myhelloInit);
//指定在鴻蒙系統(tǒng)的系統(tǒng)服務層執(zhí)行入口函數(shù)//SYS_RUN(myhelloInit);工程加入程序代碼在myhello目錄下創(chuàng)建BUILD.gn文件,并輸入內(nèi)容:#指定編譯目標名為myhello_test,生成靜態(tài)庫libmyhello_test.astatic_library("myhello_test"){#指定程序是由哪些源文件組成,當多個源文件時由","分隔sources=["myhello_demo.c"]#指定頭文件所在路徑include_dirs=["http://utils/native/lite/include",]}工程加入程序代碼修改app目錄下BUILD.gn文件內(nèi)容:import("http://build/lite/config/component/lite_component.gni")lite_component("app"){features=[#"startup",#注釋不參與編譯的程序#格式:"子目錄名:子目錄BUILD.gn中定義的目標名""myhello:myhello_test"]}工程加入程序代碼Build編譯工程時在終端輸出:將程序燒錄至開發(fā)板后,執(zhí)行Monitor程序并重啟開發(fā)板,隨后即可在終端中查看到“myhelloinit”的輸出信息。請簡述開發(fā)板USB線的作用。
講述了工程源碼導入操作。講述了工程的配置。講述了工程源碼的編譯。講述了工程程序燒錄方法。講述了工程程序調(diào)試方法。講述了工程中加入程序代碼的方法本章主要講述鴻蒙設備GPIO應用開發(fā)。通過學習本節(jié)將能夠了解鴻蒙系統(tǒng)設備GPIO應用開發(fā)。通過本節(jié)學習可以熟悉:華為海思的GPIO操作函數(shù)鴻蒙系統(tǒng)的GPIO操作函數(shù)鴻蒙系統(tǒng)的GPIO中斷處理華為海思的GPIO操作函數(shù)鴻蒙系統(tǒng)的GPIO操作函數(shù)鴻蒙系統(tǒng)的GPIO中斷處理華為海思的GPIO操作函數(shù)(1/7)
GPIO(GeneralPurposeInput/Output,通用輸入輸出口)主要作為輸入或輸出功能使用,當需要用代碼主動控制GPIO輸出高低電平時,GPIO應當設置輸出功能;當需要通過GPIO獲取連接設備輸出的高低電平時,GPIO應當設置輸入功能。Hi3861芯片手冊中GPIO_03GPIO的用途選擇寄存器:華為海思的GPIO操作函數(shù)(2/7)LED連接到GPIO_02引腳,GPIO_02應當被配置為輸出功能。當GPIO_02引腳輸出高電平時,LED亮;而當GPIO_02輸出低電平時,LED熄。華為海思的GPIO操作函數(shù)(3/7)Hi3861共有15個多功能的GPIO,在鴻蒙工程中的hi_io.h頭文件,芯片廠家已定義好表示每個GPIO的枚舉常量:typedefenum{HI_IO_NAME_GPIO_0,//表示GPIO0...HI_IO_NAME_GPIO_14,//表示GPIO14...}hi_io_name;由此可見,HI_IO_NAME_GPIO_2對應著GPIO_02引腳。華為海思的GPIO操作函數(shù)(4/7)
在hi_io.h頭文件中,也定義一系列的枚舉常量描述每個GPIO可選擇使用的功能,例如GPIO_02的功能描述為:typedefenum{
HI_IO_FUNC_GPIO_2_GPIO,
//該引腳可作為通用GPIO,用于連接輸入輸出高低電平的設備。
HI_IO_FUNC_GPIO_2_UART1_RTS_N=2,
//該引腳可作為第1個UART控制器的硬件流控功能引腳。
HI_IO_FUNC_GPIO_2_SPI1_TXD,
//作為第1個SPI控制器的數(shù)據(jù)發(fā)送引腳
HI_IO_FUNC_GPIO_2_JTAG_TRSTN,
//作為連接JTAG調(diào)試器的功能引腳
HI_IO_FUNC_GPIO_2_PWM2_OUT,
//作為第2個PWM控制器信號輸出引腳
HI_IO_FUNC_GPIO_2_SSI_CLK=7,
//作為SSI控制器的時鐘輸出引腳}hi_io_func_gpio_2;華為海思的GPIO操作函數(shù)(5/7)Hi3861的每個GPIO都是多用途功能的,但某一時刻只能選擇其中一種功能。同時在hi_io.h頭文件中提供了設置GPIO用途的函數(shù):
hi_u32hi_io_set_func(hi_io_nameid,hi_u8val);用法:由于GPIO_2僅需通過輸出高低電平即可實現(xiàn)控制LED的亮滅,因此應將GPIO_02引腳配置為GPIO引腳用途,相應的設置代碼如下:
hi_io_set_func(HI_IO_NAME_GPIO_2,HI_IO_FUNC_GPIO_2_GPIO);若要使GPIO默認保持高低電平狀態(tài),可以配置GPIO的上下拉功能,該功能由hi_io.h頭文件中的配置函數(shù)提供:
hi_u32hi_io_set_pull(hi_io_nameid,hi_io_pullval);用法:如設置GPIO_02引腳默認處于高電平狀態(tài),則設置上拉的代碼應當如下:hi_io_set_pull(HI_IO_NAME_GPIO_2,HI_IO_PULL_UP);華為海思的GPIO操作函數(shù)(6/7)typedefenum{HI_GPIO_IDX_0,//表示GPIO0...HI_GPIO_IDX_14,//表示GPIO14}hi_gpio_idx;與hi_io.h中GPIO的枚舉常量相對應,也可以直接使用hi_io.h中的常量用于設置id對應的GPIO選擇dir值指定的輸入或輸出功能,注意IO須設置GPIO用途。hi_u32hi_gpio_set_dir(hi_gpio_idxid,hi_gpio_dirdir);typedefenum{HI_GPIO_DIR_IN=0,//表示輸入
HI_GPIO_DIR_OUT//表示輸出
}hi_gpio_dir;
表示輸入與輸出功能的枚舉類型華為海思的GPIO操作函數(shù)(7/7)設置id對應的GPIO輸出val值指定的高或低電平,注意GPIO須設置輸出功能hi_u32hi_gpio_set_ouput_val(hi_gpio_idxid,hi_gpio_valueval);typedefenum{HI_GPIO_VALUE0=0,//表示低電平HI_GPIO_VALUE1//表示高電平}hi_gpio_value;表示GPIO電平狀態(tài)的枚舉類型獲取id對應的GPIO輸出電平狀態(tài),val參數(shù)為一個hi_gpio_value變量的地址,用于存放電平狀態(tài)值hi_u32hi_gpio_get_output_val(hi_gpio_idxid,hi_gpio_value*val);獲取id對應的GPIO輸入電平狀態(tài),val參數(shù)為hi_gpio_value類型變量的地址,用于存放獲取的電平狀態(tài)hi_u32hi_gpio_get_input_val(hi_gpio_idxid,hi_gpio_value*val)華為海思的GPIO操作函數(shù)鴻蒙系統(tǒng)的GPIO操作函數(shù)鴻蒙系統(tǒng)的GPIO中斷處理鴻蒙系統(tǒng)的GPIO操作函數(shù)(1/2)
鴻蒙系統(tǒng)在iot_gpio.h頭文件中提供了大量以IoT開頭命名的通用操作函數(shù)申請并標記使用id對應的GPIO,在多人協(xié)同開發(fā)中避免重復使用同一個IOunsignedintIoTGpioInit(unsignedintid);申請成功返回IOT_SUCCESS(值0),失敗返回IOT_FAILURE
設置指定id對應的GPIO功能,dir指定的輸入或輸出功能unsignedintIoTGpioSetDir(unsignedintid,IotGpioDirdir);typedefenum{
IOT_GPIO_DIR_IN=0,
//表示輸入
IOT_GPIO_DIR_OUT
//表示輸出}IotGpioDir;輸入輸出類型鴻蒙系統(tǒng)的GPIO操作函數(shù)(2/2)
typedefenum{IOT_GPIO_VALUE0=0,//表示低電平IOT_GPIO_VALUE1//表示高電平}IotGpioValue;
在IoT函數(shù)中表示GPIO電平狀態(tài)的枚舉類型設置id對應的GPIO輸出val指定的高低電平unsignedintIoTGpioSetOutputVal(unsignedintid,IotGpioValueval);獲取id對應的GPIO輸出電平狀態(tài),并將輸出的電平值存入val指向的變量unsignedintIoTGpioGetOutputVal(unsignedintid,IotGpioValue*val);獲取id對應的GPIO輸入電平狀態(tài),并將獲取的電平值存入val指向的變量unsignedintIoTGpioGetInputVal(unsignedintid,IotGpioValue*val);華為海思的GPIO操作函數(shù)鴻蒙系統(tǒng)的GPIO操作函數(shù)鴻蒙系統(tǒng)的GPIO中斷處理鴻蒙系統(tǒng)的GPIO中斷處理(1/2)
只要GPIO的電平狀態(tài)符合設定的中斷觸發(fā)條件,
系統(tǒng)就會暫停當前工作而執(zhí)行GPIO中斷處理函數(shù),中斷處理函數(shù)執(zhí)行完成后,系統(tǒng)會恢復之前的工作。Hi3861的GPIO共有4種中斷觸發(fā)條件,可設置GPIO電平在高電平、低電平、下降沿(從高電平變成低電平的過程)與上升沿(從低電平變成高電平的過程)狀態(tài)時觸發(fā)中斷。鴻蒙系統(tǒng)的GPIO中斷處理(2/2)
在iot_gpio.h中提供的IoTGpioRegisterIsrFunc函數(shù)注冊并設定GPIO的中斷觸發(fā)條件、中斷處理函數(shù)等。unsignedintIoTGpioRegisterIsrFunc(unsignedintid,IotGpioIntTypeintType,IotGpioIntPolarityintPolarity,GpioIsrCallbackFuncfunc,char*arg);參數(shù)列表:id:用于指定GPIOintType:指定中斷類型
值IOT_INT_TYPE_LEVEL表示電平(高/低電平)觸發(fā)中斷
值IOT_INT_TYPE_EDGE表示邊沿(上升/下降沿)觸發(fā)中斷intPolarity:指定中斷觸發(fā)的電平狀態(tài)
值IOT_GPIO_EDGE_FALL_LEVEL_LOW表示低電平或下降沿狀態(tài)觸發(fā)中斷,具體由intType中斷類型指定
值IOT_GPIO_EDGE_RISE_LEVEL_HIGH表示高電平或上升沿狀態(tài)觸發(fā)中斷func:指定IO中斷處理函數(shù),函數(shù)原型:voidirqFunc(char*arg)arg:指定IO中斷處理函數(shù)的arg參數(shù)返回值:成功返回IOT_SUCCESS,失敗返回IOT_FAILURE請簡述對于GPIO操作函數(shù),使用hixxx與IoTxxx的區(qū)別是什么?
講述了華為海思的GPIO操作函數(shù)。講述了鴻蒙系統(tǒng)的GPIO操作函數(shù)。講述了鴻蒙系統(tǒng)的GPIO中斷處理。本章主要講述鴻蒙系統(tǒng)PWM應用開發(fā)。通過學習本節(jié)將能夠了解鴻蒙系統(tǒng)PWM應用開發(fā)。通過本節(jié)學習可以熟悉:PWM工作原理鴻蒙系統(tǒng)PWM函數(shù)蜂鳴器的PWM驅動PWM信號原理鴻蒙系統(tǒng)PWM函數(shù)PWM應用案例PWM信號原理(1/3)PWM(PulseWidthModulation,脈沖寬度調(diào)制)基本上就是在一個重復的信號周期內(nèi)分別控制高低電平的持續(xù)時間PWM信號原理(2/3)信號周期:是指從一個上升沿到下一個上升沿信號(或從下降沿到下一個下降沿)的間隔時間。信號頻率:是指在一秒鐘內(nèi)有多少個PWM的信號周期,如100Hz表示一秒鐘內(nèi)有100個信號周期,則每個信號周期時間為10毫秒,同樣根據(jù)信號周期時間也可推算出頻率。占空比:是指在一個信號周期中,表示有效電平(通常是高電平)在整個周期時間中的比例,如信號周期時間為100毫秒而高電平持續(xù)時間為10毫秒,則占空比為10%。PWM信號三要素:PWM信號原理(3/3)PWM調(diào)節(jié)LCD屏背光:PWM信號原理鴻蒙系統(tǒng)PWM函數(shù)PWM應用案例鴻蒙系統(tǒng)PWM函數(shù)(1/3)Hi3861芯片提供了6個PWM控制器,Hi3861芯片每個IO都可以作為PWM控制器的信號輸出引腳,IO具體所屬的PWM控制可以在鴻蒙工程中的hi_io.h頭文件中查看相應的定義,如GPIO_03的用途定義:typedefenum{...
HI_IO_FUNC_GPIO_3_PWM5_OUT,//作為第5個PWM控制器信號輸出引腳}hi_io_func_gpio_3;鴻蒙系統(tǒng)PWM函數(shù)(2/3)hi_pwm.h中已定義表示PWM控制器的枚舉常量:typedefenum{HI_PWM_PORT_PWM0=0,HI_PWM_PORT_PWM1=1,HI_PWM_PORT_PWM2=2,HI_PWM_PORT_PWM3=3,HI_PWM_PORT_PWM4=4,HI_PWM_PORT_PWM5=5,HI_PWM_PORT_MAX}hi_pwm_port;鴻蒙系統(tǒng)PWM函數(shù)(3/3)iot_pwm.h頭文件也提供了PWM的操作函數(shù):unsignedintIoTPwmInit(unsignedintport);//初始化PWM控制器//設置并啟動第port個PWM控制器unsignedintIoTPwmStart(unsignedintport,unsignedshortduty,unsignedintfreq);//freq參數(shù)是用于設置PWM輸出的信號頻率,因PWM控制默認使用CPU160MHz作為時鐘信號源,需要除以一個分頻系數(shù)才能得到PWM信號的頻率,而且PWM配置寄存器只能存儲16位的分頻系數(shù)(最大值為65535),所以PWM輸出的信號頻率必須大于2442Hz(160000000Hz/65535)。//參數(shù)duty設置占空比unsignedintIoTPwmStop(unsignedintport);停止port對應的控制器輸出PWM信號PWM信號原理鴻蒙系統(tǒng)PWM函數(shù)PWM應用案例PWM應用案例(1/3)
蜂鳴器的發(fā)聲利用了電磁感應與振動產(chǎn)生聲音的原理,當不同大小與方向的電流通過線圈時產(chǎn)生一個變化的磁場,當產(chǎn)生的磁場與磁體同向時相排斥時,紙盒則會被向外推,而當產(chǎn)生的磁場與磁體異向時相吸引,紙盒則被向內(nèi)拉,正是這種反復交替的推拉動作,讓紙盒產(chǎn)生振動而發(fā)出聲音。PWM應用案例(2/3)蜂鳴器模塊通過杜邦線與開發(fā)板的連接:PWM應用案例(3/3)蜂鳴器模塊的PWM驅動主過程:
IoTGpioInit(BUZZER_IO);//申請使用IO
hi_io_set_func(BUZZER_IO,BUZZER_IOFUNC);//設置IO用途
IoTPwmInit(BUZZER_PWM);//初始化PWM控制器
IoTPwmStart(BUZZER_PWM,50,freq);//設置PWM控制器的占空比與頻率,并啟動控制器
IoTPwmStop(BUZZER_PWM);//停止PWM控制器
IoTPwmDeinit(BUZZER_PWM);//釋放PWM控制器的使用請簡述PWM信號的三要素。
講述了PWM工作原理講述了鴻蒙系統(tǒng)PWM函數(shù)講述了蜂鳴器的PWM驅動本章主要講述鴻蒙系統(tǒng)ADC應用開發(fā)。通過學習本節(jié)將能夠了解鴻蒙系統(tǒng)ADC應用開發(fā)。通過本節(jié)學習可以熟悉:ADC工作原理鴻蒙系統(tǒng)ADC函數(shù)ADC應用案例ADC信號原理鴻蒙系統(tǒng)ADC函數(shù)ADC應用案例ADC信號原理(1/2)
物聯(lián)網(wǎng)系統(tǒng)電路中廣泛采用數(shù)字信號與模擬信號。數(shù)字信號通過高電平代表二進制1,低電平代表二進制0,在數(shù)字電路中傳輸數(shù)據(jù);而模擬信號則在模擬電路中,以低電平至高電平間的任意電壓值來表示信號的大小或強度。
光敏電阻模塊通過AO輸出一個表示當前亮度的電壓值,當感應到亮度越強時,AO輸出的電壓值越小,反之,AO輸出的電壓值就越大。ADC信號原理(2/2)采樣率:是指一秒鐘內(nèi)檢測電路電壓的次數(shù),ADC采樣率越高則信號的還原度更高,反之,過低的采樣率可導致丟失信號變化的關鍵過程。Hi3861ADC的最大采樣率為157KHz。量化精度:量化是指將采樣得到電壓值轉換成二進制值的過程,此二進制值的最大位數(shù)就是量化精度。越高的量化精度,ADC轉換的結果就更加精確。Hi3861ADC的量化精度為12bit,其中最低兩位用于小數(shù)。ADC信號的關鍵要素:ADC信號原理鴻蒙系統(tǒng)ADC函數(shù)ADC應用案例鴻蒙系統(tǒng)ADC函數(shù)(1/4)Hi3861的ADC共有8個模擬電壓的輸入通道,除了通道7專用于檢測電源的電壓外,其他0~6通道分別對應一個不同的IO:鴻蒙系統(tǒng)ADC函數(shù)(2/4)hi_adc.h頭文件中,已經(jīng)定義了表示各個ADC通道的枚舉常量以及相應的操作函數(shù):typedefenum{HI_ADC_CHANNEL_0,...HI_ADC_CHANNEL_7,}hi_adc_channel_index;hi_u32hi_adc_read(hi_adc_channel_indexchannel,hi_u16*data,hi_adc_equ_model_selequ_model,hi_adc_cur_baiscur_bais,hi_u16delay_cnt);//獲取ADC轉換結果參數(shù)列表:channel:表示ADC選擇的輸入通道data:用于存放轉換結果的變量的地址equ_mode:為提高數(shù)據(jù)的準確性而選擇使用的平均算法模式,可選:HI_ADC_EQU_MODEL_1,/*不使用平均算法,直接取轉換結果*/HI_ADC_EQU_MODEL_8,/*ADC轉換8次后,取平均值作為結果*/cur_bais:用于設置ADC基準電壓值,可選:HI_ADC_CUR_BAIS_1P8V,/*選擇1.8V作為基準電壓*/HI_ADC_CUR_BAIS_3P3V,/*選擇3.3V作為基準電壓*/delay_cut:為了確保轉換電壓值的穩(wěn)定,設置等待時間,一次計數(shù)是334ns,其值需在0~4080之間
函數(shù)返回值:成功返回HI_ERR_SUCCESS(0),失敗返回非0的錯誤碼hi_floathi_adc_convert_to_voltage(hi_u16data);//將ADC轉換結果再轉換成對應的電壓值
參數(shù)data為要轉換成電壓值的數(shù)值,函數(shù)返回值為帶小數(shù)的電壓值,如2.2V。
鴻蒙系統(tǒng)ADC函數(shù)(3/4)鴻蒙系統(tǒng)ADC函數(shù)(4/4)熊派開發(fā)板廠商提供的頭文件iot_adc.h中,也提供獲取ADC轉換結果的函數(shù):unsignedintIoTAdcRead(unsignedintchannel,unsignedshort*data,IotAdcEquModelSelequModel,IotAdcCurBaiscurBais,unsignedshortrstCnt);此函數(shù)的功能、參數(shù)與hi_adc.h中hi_adc_read函數(shù)基本一致。ADC信號原理鴻蒙系統(tǒng)ADC函數(shù)ADC應用案例ADC應用案例(1/2)
光敏電阻傳感器能夠檢測周圍環(huán)境的光線亮度,它的電阻值會隨著光照強度的變化而變化,環(huán)境亮度越強時傳感器的電阻值越低;亮度越弱或處于暗處時傳感器的電阻值越大。ADC應用案例(2/2)
光敏電阻傳感器主要驅動過程
:
IoTGpioInit(SENSOR_IO);//初始化IO口
hi_io_set_func(SENSOR_IO,SENSOR_IOFUNC);//配置IO功能為GPIO
IoTGpioSetDir(SENSOR_IO,IOT_GPIO_DIR_IN);//ADC引腳配置為輸入
//獲取ADC4轉換結果,使用轉換8次平均算法,3.3V基準電壓,等待3340ns后開始轉換
ret=hi_adc_read(ADC_CHANNEL,&val,HI_ADC_EQU_MODEL_8,HI_ADC_CUR_BAIS_3P3V,10);
//將ADC轉換結果再轉換成電壓值
vol=hi_adc_convert_to_voltage(val);請簡述ADC信號的關鍵要素。
講述了ADC工作原理講述了鴻蒙系統(tǒng)ADC函數(shù)講述了光敏電阻模塊的ADC驅動本章主要講述智能煙霧警報器的項目開發(fā)。通過學習本節(jié)將能夠了解智能煙霧警報器的項目開發(fā)。通過本節(jié)學習可以熟悉:項目架構煙霧傳感器繼電器項目架構煙霧傳感器模塊繼電器模塊主程序項目架構(1/2)項目架構(2/2)項目程序流程圖:項目架構煙霧傳感器模塊繼電器模塊主程序煙霧傳感器模塊(1/2)
煙霧傳感器模塊可以根據(jù)當前環(huán)境偵測到可燃氣體的濃度,通過DO引腳輸出高低電平表示感應到可燃氣體與否(靈敏度可在模塊的旋轉電位器上調(diào)節(jié));通過AO輸出一個表示當前可燃氣體的濃度值,濃度越高,AO輸出的電壓值越大,反之,AO輸出的電壓值就越小。煙霧傳感器模塊(2/2)煙霧傳感器接入開發(fā)板:項目架構煙霧傳感器模塊繼電器模塊主程序繼電器模塊(1/2)
繼電器實現(xiàn)通過低電壓控制高電壓的功能:繼電器模塊(2/2)繼電器模塊接入開發(fā)板:項目架構煙霧傳感器模塊繼電器模塊主程序主程序
通過定時改變PWM信號的占空比,讓LED燈光從弱到強,再從強到弱的過程,實現(xiàn)呼吸燈的效果。接著通過ADC轉換煙霧傳感器模塊輸出的電壓值,從而獲取當前環(huán)境可燃氣體的濃度數(shù)據(jù),然后根據(jù)濃度數(shù)據(jù)控制聲光警報器的開關。主要實現(xiàn)步驟:1.IO口初臺化:
(1)煙霧傳感器IO設置(2)繼電器IO設置(3)LED的PWM設置2.循環(huán)處理:(1)LED燈PWM定時改變占空比
(2)定時獲取煙霧濃度
(3)根據(jù)濃度數(shù)據(jù)控制繼電器講述了智能煙霧警報器的項目架構講述了煙霧傳感器的應用開發(fā)講述了繼電器的應用謝謝128鴻蒙系統(tǒng)設備開發(fā)進階本章主要講述鴻蒙系統(tǒng)多線程應用開發(fā)。通過學習本節(jié)將能夠了解鴻蒙多線程應用開發(fā)技術。通過本節(jié)學習可以熟悉:多線程工作原理與用途CMSIS多線程編程POSIX多線程編程多線程應用案例-多線程煙霧警報器多線程工作原理CMSIS多線程編程POSIX多線程編程多線程應用案例-多線程煙霧警報器多線程工作原理
線程是操作系統(tǒng)能夠進行任務調(diào)度的最小單位,也是一個程序中并行執(zhí)行的分支。
每個線程有自己的工作函數(shù)與不同的執(zhí)行路徑,且每個線程都獨自擁有在內(nèi)存上分配局部變量的??臻g,但同屬一個程序的多個線程共享此程序的全局變量等資源。
在多核多線程的主控芯片上,通常由操作系統(tǒng)優(yōu)先調(diào)度線程的任務由一個CPU硬件線程來完成,如果硬件線程資源不足則與單核單線程的主控芯片一樣,采用時間片的調(diào)度方式來實施線程的并行執(zhí)行多線程工作原理CMSIS多線程編程POSIX多線程編程多線程應用案例-多線程煙霧警報器CMSIS多線程編程(1/2)
CMSIS(CortexMicrocontrollerSoftwareInterfaceStandard)標準的多線程編程接口。CMSIS多線程函數(shù)在cmsis_os2.h頭文件中已聲明,具體的編程步驟如下:1.
定義線程執(zhí)行的函數(shù)CMSIS線程函數(shù)原型:void(*func)(void*arg),其中arg是在函數(shù)執(zhí)行時附帶的參數(shù)值,線程在創(chuàng)建時除指定arg參數(shù)值外,還需指定線程要執(zhí)行的函數(shù)名。線程創(chuàng)建成功后自動執(zhí)行線程函數(shù)。2.
設置線程屬性
在CMSIS多線程編程中,使用osThreadAttr_t結構體變量描述線程的名稱、棧大小、優(yōu)先級別等屬性值,參考代碼如下:
osThreadAttr_tattr;//聲明描述線程屬性的結構體變量memset(&attr,0,sizeof(attr));//將結構體變量的全部屬性值清零
="myLed";//設置線程名
attr.stack_size=1024;//設置線程所用的棧大小
attr.priority=osPriorityNormal1;//設置線程優(yōu)先級別CMSIS多線程編程(2/2)
3.
線程管理在CMSIS多線程編程中,使用osThreadNew函數(shù)創(chuàng)建線程,函數(shù)原型:osThreadId_tosThreadNew(osThreadFunc_tfunc,void*arg,constosThreadAttr_t*attr)
其中func參數(shù)用于指定線程函數(shù)名,arg參數(shù)用于指定當線程函數(shù)執(zhí)行時得到的參數(shù)值,attr參數(shù)用于指定使用的線程屬性值。使用上一步驟設置的線程屬性,創(chuàng)建一個線程執(zhí)行呼吸燈處理函數(shù)的代碼如下:osThreadId_ttid=osThreadNew(myLedThreadFunc,NULL,&attr);函數(shù)osThreadNew執(zhí)行成功返回線程的id,通過此線程id,可以通過以下函數(shù)管理線程:osStatus_tosThreadSuspend(osThreadId_ttid);//設置tid線程暫停執(zhí)行osStatus_tosThreadResume(osThreadId_ttid);//設置tid線程恢復執(zhí)行osStatus_tosThreadTerminate(osThreadId_ttid);//結束tid線程的執(zhí)行多線程工作原理CMSIS多線程編程POSIX多線程編程多線程應用案例-多線程煙霧警報器POSIX多線程編程(1/3)
POSIX(PortableOperatingSystemInterface)標準多線程在pthread.h頭文件提供相關操作的函數(shù)聲明,具體的編程步驟如下:1.
定義線程執(zhí)行的函數(shù)POSIX線程與CMSIS線程功能一致,它的函數(shù)原型為:void*(*func)(void*arg),其中arg是在函數(shù)執(zhí)行時附帶的參數(shù)值,線程函數(shù)執(zhí)行結束返回一個地址。POSIX多線程編程(2/3)2.
設置線程屬性
使用pthread_attr_t結構體變量描述線程的屬性,并通過函數(shù)設置線程的屬性值,常用的函數(shù)有:
pthread_attr_tattr;//聲明線程屬性結構體變量
intpthread_attr_init(pthread_attr_t*attr);//初始化線程結構體變量
intpthread_attr_setstacksize(pthread_attr_t*attr,size_tsize);
//在線程屬性結構體變量中設置線程棧大小。
intpthread_attr_setschedpolicy(pthread_attr_t*attr,intpolicy);
//在線程屬性結構體變量中設置線程的調(diào)度算法
policy參數(shù)可選:
SCHED_OTHER(默認值):分時調(diào)度算法,每個線程得到相同的執(zhí)行時間
SCHED_FIFO:工作隊列調(diào)度算法,一個線程執(zhí)行完才會執(zhí)行下一個線程
SCHED_RR:輪流調(diào)度算法,以分時為基礎,結合線程優(yōu)先級別進行調(diào)度
//在線程屬性結構體變量中設置線程的優(yōu)先級別
intpthread_attr_setschedparam(pthread_attr_t*attr,conststructsched_param*param);
用法:先創(chuàng)建一個sched_param類型的結構體變量,
并為其內(nèi)部的sched_priority成員賦一個表示級別的int類型值(數(shù)值越大則級別越高),然后執(zhí)行此函數(shù)并傳遞此sched_param變量的地址。
POSIX多線程編程(3/3)3.
線程管理在POSIX多線程編程中,使用pthread_create函數(shù)創(chuàng)建線程,函數(shù)原型:intpthread_create(pthread_t*tid,constpthread_attr_t*attr,void*(*func)(void*),void*arg);
其中tid參數(shù)用于存放線程id的pthread_t變量地址,attr參數(shù)用于指定使用的線程屬性值,func參數(shù)指定線程執(zhí)行的函數(shù),arg參數(shù)用于指定當線程函數(shù)執(zhí)行時得到的參數(shù)值,函數(shù)執(zhí)行成功返回0,失敗則返回小于0的錯誤碼。pthread_tpthread_self(void);//獲取當前線程的id//當線程函數(shù)執(zhí)行結束后,通過此函數(shù)回收指定id的線程資源,并通過retval參數(shù)接收線程函數(shù)的返回值intpthread_join(pthread_ttid,void**retval);//設置指定id的線程名稱,name為線程名稱intpthread_setname_np(pthread_ttid,constchar*name);//獲取指定id的線程名稱,
獲取的名稱存入buf數(shù)組中,buflen參數(shù)為buf數(shù)組的長度intpthread_getname_np(pthread_ttid,char*buf,size_tbuflen);多線程工作原理CMSIS多線程編程POSIX多線程編程多線程應用案例-多線程煙霧警報器多線程應用案例(1/2)
通過多線程并行執(zhí)行與模塊化開發(fā)的技術,由一個線程專門實現(xiàn)呼吸燈的功能,再由另一個線程循環(huán)檢測煙霧傳感器,當數(shù)據(jù)異常時及時發(fā)出警報。在工程源碼的myhello目錄下,創(chuàng)建myledThread.c源文件。在源文件中由一個CMSIS標準的線程,循環(huán)改變PWM信號占空比實現(xiàn)呼吸燈的功能。voidmyLedInit(){1.LED的PWM初始化
2.線程屬性設置
3.創(chuàng)建PWM線程,指定線程函數(shù)與線程屬性設置}4.PWM線程函數(shù):
循環(huán)定時改變PWM占空比多線程應用案例(2/2)
在工程源碼的myhello目錄下,再創(chuàng)建myadcThread.c源文件。在源文件中由一個POSIX標準的線程,循環(huán)檢測煙霧傳感器及時發(fā)生聲光警報的功能。voidmyAdcInit(){1.煙霧傳感器IO初始化
2.繼電器模塊IO初始化
3.線程屬性設置
4.創(chuàng)建ADC線程,指定線程函數(shù)與線程屬性設置}5.ADC線程函數(shù):(1)循環(huán)定時獲取煙霧傳感器的ADC值
(2)根據(jù)ADC值判斷煙霧濃度,當超出預設值則導通繼電器請簡述多線程的作用。
講述了多線程工作原理。講述了CMSIS多線程編程。講述了POSIX多線程編程。講述了多線程應用案例。本章主要講述鴻蒙系統(tǒng)定時器與線程同步技術。通過學習本節(jié)將能夠了解鴻蒙系統(tǒng)定時器與線程同步技術。通過本節(jié)學習可以熟悉:osTimer定時器信號量實現(xiàn)的線程間同步應用案例-DHT11溫濕度傳感器osTimer定時器鴻蒙系統(tǒng)線程同步綜合應用案例-DHT11溫濕度傳感器驅動osTimer定時器(1/2)
鴻蒙系統(tǒng)的osTimer定時器是基于一個Systemtick硬件定時器封裝出來的軟件定時器。tick硬件定時器按系統(tǒng)的配置的頻率做加1計數(shù),每次增加的間隔為10毫秒。在鴻蒙系統(tǒng)中可以使用多個osTimer軟件定時器,但每個osTimer定時器的時間應當以tick硬件定時器的計數(shù)間隔時間為單位(10ms)。osTimer定時器(2/2)
在頭文件cmsis_os2.h中,已聲明了osTimer相關的操作函數(shù):osTimerId_tosTimerNew(osTimerFunc_tfunc,osTimerType_ttype,void*argument,constosTimerAttr_t*attr)//創(chuàng)建osTimer定時器//其中定時器的超時函數(shù)原型為:void(*osTimerFunc_t)(void*arg);//type參數(shù)可選:osTimerOnce(一次性的定時器),osTimerPeriodic(重復的定時器)//函數(shù)執(zhí)行成功后,返回osTimer定時器的id,通過此id可啟動或停止定時器工作。
//啟動指定id的定時器,并指定ticks定時器間隔時間。如2秒:ticks=計數(shù)頻率*2osTimerStart(osTimerId_tid,uint32_tticks)//注意定時器啟動后,在定時器超時前再執(zhí)行此函數(shù),則定時器會重新開始計數(shù)。
//停止指定id的定時器osTimerStop(osTimerId_ttimer_id)osTimer定時器鴻蒙系統(tǒng)線程同步綜合應用案例-DHT11溫濕度傳感器驅動鴻蒙系統(tǒng)線程同步(1/3)
信號量(Semaphore)是操作系統(tǒng)中一種重要的線程同步機制,主要用于對共享資源的保護訪問。信號量以一個非負整數(shù)值表示可用資源的數(shù)量,當信號量值大于0時,表示有資源可用。此時,若對信號量執(zhí)行上鎖操作,信號量值會減一,并允許線程繼續(xù)執(zhí)行。當信號量值等于0時表示已沒有可用資源,此時上鎖會讓當前線程進入休眠阻塞狀態(tài),直到有可分配的資源才會喚醒并恢復執(zhí)行。信號量的解鎖操作會讓信號量值加一,如果有等待此信號量資源的其他線程時,解鎖操作會喚醒一個處于阻塞狀態(tài)的線程。鴻蒙系統(tǒng)線程同步(2/3)
POSIX信號量在semaphore.h頭文件中聲明了sem_t信號量類型及相關操作函數(shù),關鍵的函數(shù)有:sem_tsem;//聲明一個信號量變量intsem_init(sem_t*sem,intpshared,unsignedintvalue);//信號量初始化參數(shù)列表:sem參數(shù)指定要初始化的變量pshared參數(shù)值非零表示此信號量支持跨線程,零值則表示只支持線程內(nèi)訪問value參數(shù)設置信號量初始時的可用資源數(shù)//對sem信號量作上鎖操作,如信號量值已為0,調(diào)用的線程則進入休眠阻塞狀態(tài),直到有可用資源止;如信號量值大于0,則信號量值減一,上鎖成功接著執(zhí)行。intsem_wait(sem_t*sem);//對sem信號量做解鎖操作,讓信號量值加一,喚醒一個等待此信號量可用資源的阻塞線程。intsem_post(sem_t*sem);鴻蒙系統(tǒng)線程同步(3/3)
實踐:以一個線程循環(huán)對信號量作上鎖操作并進入休眠阻塞狀態(tài),在按鍵按下時對信號量作解鎖操作,喚醒與恢復線程的執(zhí)行。osTimer定時器鴻蒙系統(tǒng)線程同步綜合應用案例-DHT11溫濕度傳感器驅動綜合應用案例(1/5)DHT11是一款輸出高低電平數(shù)字信號的溫濕度傳感器。模塊通過DOUT引腳接收開始采集溫濕度信號,并通過DOUT引腳輸出溫濕度與數(shù)據(jù)校驗和。一次完整的數(shù)據(jù)傳輸為40bit,高位先出。先后輸出:8位濕度整數(shù)數(shù)據(jù)、8位濕度小數(shù)數(shù)據(jù)、8位溫度整數(shù)數(shù)據(jù)、8位溫度小數(shù)數(shù)、8位校驗和。其中校驗和的值應當是前面4節(jié)溫濕數(shù)據(jù)累加后所得結果的末8位。綜合應用案例(2/5)DHT11只有接收到開始信號后才會啟動溫濕度數(shù)據(jù)的采集。首先,連接模塊DOUT引腳的GPIO應當接上拉,默認處于高電平狀態(tài),GPIO應當輸出18毫秒以上的低電平再接著輸出20至40微秒的高電平信號。開始信號發(fā)出后GPIO應當改為輸入功能,由DHT11模塊控制GPIO的電平。DHT11接收到開始信號后,輸出80微秒的低電平的響應信號,正常情況下,通過GPIO即獲取到此低電平信號;如DHT11未接入等不正常情況下,因GPIO的上拉功能,會獲取到高電平信號。綜合應用案例(3/5)DHT11輸出響應信號后,就會發(fā)出表示二進制0或1的電平信號。數(shù)值0的電平信號。DOUT引腳先輸出50微秒低電平信號,接著輸出26至28微秒的高電平信號。DHT11輸出二進制數(shù)值1的電平信號。DOUT引腳先輸出50微秒低電平信號,接著輸出70微秒的高電平信號。綜合應用案例(4/5)
1.初始化:sem_init(&semLock,1,0);//初始化信號量pthread_create(&tid,NULL,threadFunc,NULL);//創(chuàng)建線程timerID=osTimerNew(timerFunc,osTimerOnce,NULL,NULL);//創(chuàng)建osTimer定時器2.在線程函數(shù)里循環(huán):(1)DHT11發(fā)出開始信號,檢查DHT11的響應信號,獲取模塊DOUT輸出的低電平(2)如沒有接收到DHT11輸出的低電平響應信號,則退出循環(huán)(3)注冊GPIO中斷(4)信號量上鎖,當前線程進入休眠狀態(tài),直到信號量解鎖止。(5)線程被喚醒后,輸出獲取的濕度整數(shù)、濕度小數(shù)、溫度整數(shù)、溫度小數(shù)、校驗和(6)釋放GPIO的中斷功能
DHT11驅動實現(xiàn)主要步驟:綜合應用案例(5/5)
3.在GPIO中斷處理函數(shù):(1)由數(shù)組記錄每個中斷的間隔時間(2)啟動定時器,1秒后執(zhí)行timerFunc函數(shù)。注意未超時并再次啟動,定時器會重新計時
4.在timerFunc函數(shù):(1)檢查每個中斷間隔時間,如果大于100微秒則是二進制1,否則是0(2)并將二進制值存放起來(3)數(shù)據(jù)解析完成后,信號量解鎖
請簡述信號量的工作原理。
講述了osTimer定時器。講述了信號量實現(xiàn)的線程間同步。講述了綜合應用案例-DHT11溫濕度傳感器。本章主要講述鴻蒙系統(tǒng)I2C應用開發(fā)。通過學習本節(jié)將能夠了解鴻蒙系統(tǒng)I2C應用開發(fā)技術。通過本節(jié)學習可以熟悉:I2C通信原理鴻蒙系統(tǒng)I2C操作函數(shù)OLED屏工作原理OLED屏驅動I2C通信原理鴻蒙系統(tǒng)I2C操作函數(shù)OLED屏工作原理OLED屏驅動I2C通信原理(1/4)I2C(Inter-IntegratedCircuit),也被稱為I2C或IIC。它既是一種通信協(xié)議,也是一種硬件接口,實現(xiàn)硬件模塊間的通信。常用于獲取觸摸屏的觸點坐標、控制聲卡的音量、配置攝像頭的圖像分辨率等操作。I2C接口是由兩根導線組成:
一根數(shù)據(jù)線SDA,一根時鐘線SCL。時鐘線提供周期信號,每個周期信號表示數(shù)據(jù)線上傳輸一位數(shù)據(jù);數(shù)據(jù)線在每個時鐘周期中,用高電平表示二進制值1,低電平表示二進制值0。并且,I2C傳輸以8位為一個單位,每傳輸8位后,應由接收方拉低SDA引腳電平作為應答ACK信號。I2C通信原理(2/4)
一個I2C接口可并聯(lián)接入多個I2C設備。在同一接口上的每個I2C設備都需要有一個不同的設備地址(通常是7位地址)予以區(qū)分,
每次I2C通信時需要指定所操作的設備地址,I2C通信原理(3/4)WriteMode(向從機設備發(fā)送數(shù)據(jù)):主機先發(fā)出開始信號,
接著發(fā)出8位數(shù)據(jù)(由7位設備地址和一位R/W讀寫位),讀寫位的值為0。同一I2C接口的所有設備都會接收到此設備地址后,與自身的地址進行比較,如果地址是一樣,則由匹配的設備回復應答信號。如果沒有設備匹配設備地址,則沒有應答信號。主機收到應答信號后,再發(fā)出8位數(shù)據(jù),
從機收到數(shù)據(jù)回復應答,表示已收到數(shù)據(jù)。主機如需再發(fā)數(shù)據(jù),則在接收到應答信號后,再發(fā)出8位數(shù)據(jù),如此循環(huán),最后發(fā)出停止信號。I2C通信原理(4/4)ReadMode(讀取從機設備數(shù)據(jù)):主機先發(fā)出開始信號,接著發(fā)出8位數(shù)據(jù)(由7位設備地址和一位R/W讀寫位),讀寫位的值為1。從機地址匹配后,回復應答信號,接著從機輸出8位數(shù)據(jù),而主機接收數(shù)據(jù)后,如需再接收數(shù)據(jù),則向從機回復應答信號。從機收到應答信號后,再發(fā)出8位數(shù)據(jù),如此循環(huán),直到主機停止接收,發(fā)出停止信號。I2C通信原理鴻蒙系統(tǒng)I2C操作函數(shù)OLED屏工作原理OLED屏驅動鴻蒙系統(tǒng)I2C操作函數(shù)(1/2)鴻蒙系統(tǒng)在iot_i2c.h頭文件中提供了I2C控制器操作函數(shù),關鍵的函數(shù)有:unsignedintIoTI2cInit(unsignedintid,unsignedintbaudrate);//初始化I2C控制器//id參數(shù)指定操作第幾個控制器,bandrate參數(shù)指定I2C傳輸速率(標準100KHz,高速400KHz)//執(zhí)行成功返回IOT_SUCCESS,失敗則返回IOT_FAILUREunsignedintIoTI2cWrite(unsignedintid,unsignedshortdevAddr,constunsignedchar*data,unsignedintdataLen);//通過I2C控制器發(fā)出數(shù)據(jù)//參數(shù)id指定操作第幾個控制器,devAddr指定操作的設備地址(包含讀寫位)//參數(shù)data為存放要發(fā)出數(shù)據(jù)的緩沖區(qū)地址,dataLen參數(shù)指定要發(fā)出的數(shù)據(jù)長度//執(zhí)行成功返回IOT_SUCCESS,失敗則返回IOT_FAILURE鴻蒙系統(tǒng)I2C操作函數(shù)(2/2)unsignedintIoTI2cRead(unsignedintid,unsignedshortdevAddr,unsignedchar*data,unsignedintdataLen);//通過I2C控制器接收數(shù)據(jù)//參數(shù)id指定操作第幾個控制器,devAddr指定操作的設備地址(包含讀寫位)//參數(shù)data為存放接收數(shù)據(jù)的緩沖區(qū)地址,dataLen參數(shù)指定要接收的數(shù)據(jù)長度//執(zhí)行成功返回IOT_SUCCESS,失敗則返回IOT_FAILUREI2C通信原理鴻蒙系統(tǒng)I2C操作函數(shù)OLED屏工作原理OLED屏驅動OLED屏工作原理(1/3)
OLED,全稱是OrganicLight-EmittingDiode,即有機發(fā)光二極管。OLED屏也就是使用一個發(fā)光二極管的亮與熄分別表示圖像每個像素點的白與黑。由于存在能發(fā)出不同顏色光的二極管,OLED屏因此既有白、藍、黃等單色屏,也有由紅、綠、藍三個不同的發(fā)光二極管共同構成每個像素顏色的OLED彩屏。OLED屏工作原理(2/3)OLED屏物理上一行有128個像素點,共有64行,因此稱12864屏。屏幕上的每個像素點,通過控制其對應的發(fā)光二極管來顯示黑色或藍色,而圖像與字符的呈現(xiàn),則依賴于由多個像素點構成的點陣來實現(xiàn)。如K字符16x8點陣的像素數(shù)據(jù)分成兩行,每行8字節(jié)數(shù)據(jù),每字節(jié)表示從低位到高位上下8行一列的像素點數(shù)據(jù)OLED屏工作原理(3/3)
本次OLED屏模塊采用了SSD1306驅動IC,該驅動IC內(nèi)部集成了128x64像素點的顯存以及眾多配置寄存器,并支持I2C通信接口。OLED屏的驅動流程:I2C通信原理鴻蒙系統(tǒng)I2C操作函數(shù)OLED屏工作原理OLED屏驅動OLED屏驅動(1/8)
根據(jù)芯片手冊,SSD1306芯片在作為I2C設備時,其設備地址為0x3C。根據(jù)屏商家提供的例程源碼,雖然在物理上OLED屏像素分成64行,每行128個像素點,但在代碼邏輯中僅僅分成8行,每行由物理上的8行組成:OLED屏驅動(2/8)開發(fā)板與OLED屏模塊引腳連接如下:OLED屏模塊
開發(fā)板
VCC
3.3V
GND
GND
SDA
IO13//I2C0_SDA
SCL
IO14//I2C0_SCLOLED屏驅動(3/8)驅動流程:1.OLED屏所接的I2C控制器初始化2.通過I2C控制器向OLED屏發(fā)送命令進行屏的初始化3.屏初始化完成后,顯示花屏。OLED屏驅動(4/8)屏上顯示圖像流程:1.使用PcToLCD工具將圖像轉換為二進制像素數(shù)據(jù)。工具的配置選項:OLED屏驅動(5/8)2.生成字模數(shù)據(jù)后,圖像的二進制數(shù)據(jù)由十六進制數(shù)據(jù)表示。將圖像數(shù)據(jù)復制到源文件中,并由一個數(shù)組存放起來:OLED屏驅動(6/8)3.實現(xiàn)設置OLED屏刷出像素點的開始坐標函數(shù):voidoledSetPosition(u8x,u8y){//x表示一行的第幾個像素點,y表示OLED屏的第幾行(注意此行為物理上的8行像素) oledSendCmd(0xb0+y); oledSendCmd(((x&0xf0)>>4)|0x10); oledSendCmd(x&0x0f);}OLED屏驅動(7/8)4.實現(xiàn)將圖像數(shù)據(jù)傳輸至SSD1306驅動IC,讓之在OLED屏上顯示圖像的功能函數(shù):voidoledShowBmp(u8x,u8y,u8bmpW,u8bmpH,u8*bmpData){//oled每行8列,也是oled屏的一行相當于8行像素
intn=0;
for(intr=0;r<bmpH/8;r++)
{
oledSetPosition(x,r+y);//設置屏顯的始坐標
for(intc=0;c<bmpW;c++)
{
oledSendData(bmpData[n++]);//每次發(fā)一列的8個像素數(shù)據(jù)
}
}}OLED屏驅動(8/8)5.增加調(diào)用代碼:
//在oled屏上32:0坐標開始顯示華為Logo,圖像寬與高均是64個像素
oledShowBmp(32,0,64,64,hwLogo);請簡述I2C接口在OLED屏中的作用。
講述了I2C通信原理講述了鴻蒙系統(tǒng)I2C操作函數(shù)講述了OLED屏工作原理講述了OLED屏驅動本章主要項目實踐-帶屏顯的溫濕度計。通過學習本節(jié)將能夠了解屏顯溫濕度計的項目實踐過程。通過本節(jié)學習可以熟悉:OLED屏顯示數(shù)字OLED屏顯示中文項目程序實現(xiàn)
OLED屏顯示數(shù)字OLED屏顯示中文項目程序實現(xiàn)
OLED屏顯示數(shù)字(1/5)
在屏上顯示一個字符如同顯示一個小圖片一樣,字符的像素點陣數(shù)據(jù)記錄每個像素點是否要顯示出來,如‘W’字符的8x6像素點陣圖:點陣數(shù)據(jù)第0列的數(shù)據(jù)為0x00,第1列數(shù)據(jù)為0x3F,依次對應。OLED屏顯示數(shù)字(2/5)打開PcToLCD工具后,在菜單“模式”中選中“字符模式”后配置選項:OLED屏顯示數(shù)字(3/5)輸入框中輸入“0123456789.”,生成字模16x8的像素點陣數(shù)據(jù):OLED屏顯示數(shù)字(4/5)然后將字符的像素點陣數(shù)據(jù)復制到源文件中,并由一個二維數(shù)組存放起來:OLED屏顯示數(shù)字(5/5)在源文件中實現(xiàn)讓OLED屏顯示數(shù)字字符的功能函數(shù)關鍵代碼:voidoledShowFloat(u8x,u8y,floatn)//在oled屏上顯示浮點數(shù),
x、y表示屏顯始坐標,
n表示要顯示的浮點數(shù)
u8data[20];
sprintf(data,"%.1f",n);//轉換成一位小數(shù)的浮點數(shù)字符串
for(intk=0;k<strlen(data);k++)
for(intr=0;r<2;r++)//每個字符像素數(shù)據(jù)是16x8,所以只算2行
oledSetPosition(x+k*8,r+y);
for(intc=0;c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電機與電氣控制技術 課件 任務7.1.1交流異步電機的調(diào)速控制
- 某著名企業(yè)高層管理人員薪酬調(diào)查報告0729
- 人血白蛋白臨床使用規(guī)范總結2026
- 《GBT 9734-2008化學試劑 鋁測定通 用方法》專題研究報告
- 《GBT 5009.49-2008發(fā)酵酒及其配制酒衛(wèi)生標準的分析方法》專題研究報告
- 《GBT 22402-2008攝影 加工用化學品 無水硫代硫酸鈉和五水合硫代硫酸鈉》專題研究報告長文
- 《FZT 52048-2017有機阻燃粘膠短纖維》專題研究報告
- 道路安全教育培訓班課件
- 道路交通類法律培訓課件
- 2026年高校時政熱點試題含解析及答案
- 眼鏡驗光師試題(及答案)
- 選人用人方面存在的問題及改進措施
- 項目管理流程標準作業(yè)程序手冊
- 自我介紹禮儀課件
- 衛(wèi)生院孕優(yōu)知識培訓課件
- 2025-2030工業(yè)窯爐煙氣多污染物協(xié)同控制技術
- 培訓機構臺賬
- 電商預算表格財務模板全年計劃表格-做賬實操
- 泵車日常管理辦法
- 骨科術后疼痛評估與護理查房
- 輸液泵的使用培訓課件
評論
0/150
提交評論