您好,登錄后才能下訂單哦!
本篇內容主要講解“LiteOS裸機驅動移植03-E53_SC1擴展板的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“LiteOS裸機驅動移植03-E53_SC1擴展板的方法是什么”吧!
E53接口標準的E取自擴展(Expansion)的英文首字母,板子的尺寸為5×3cm,故采用E53作為前綴來命名尺寸為 5×3cm 類型的案例擴展板,任何一款滿足標準設計的開發板均可直接適配E53擴展板。
E53擴展板是根據不同的應用場景來設計的,以最大的程度在擴展板上還原真實應用場景,不同案例的擴展板根據不同的應用場景來命名后綴。例如:E53_SC1,SC是智慧城市(Smart City)的縮寫,SC1表示的是智慧城市中的智慧路燈,再比如SC2則表示的是智慧城市中的智慧井蓋。
E53擴展接口在電氣特性上,包含了常用的物聯網感知層傳感器通信接口,比如5V、3.3V、GND、SPI、UART、IIC、ADC、DAC等等,可以適配各種傳感器,還留有4個普通GPIO,如圖:
E53_SC1擴展板采用了E53標準接口,包含了一個路燈燈珠,一個BH1750光照強度傳感器,其中路燈燈珠使用普通GPIO控制,BH1750使用IIC接口通信。
如果你對該擴展板或者BH1750光照強度的驅動不熟悉,請先閱讀嵌入式基礎教程
E53_SC1擴展板上的 BH1750 光照強度傳感器使用的是 IIC 通信接口,所以除了復制 STM32CubeMX 生成的i2c.h
和i2c.h
文件,還需要在此基礎上復制包含了 BH1750 傳感器驅動的 E53_SC1 擴展板驅動文件。
在復制文件的時候,按照上一篇文章中所說的,復制i2c.h
到Inc 文件夾,復制i2c.c
到 Src 文件夾,再復制自己編寫的驅動文件E53_SC1.c
、E53_SC1.h
到 Hardware文件夾。
IoT-Studio中提供的默認工程已經復制好了這些文件,無需再次添加,如圖:
因為 LiteOS 的整個項目工程使用 make 構建,所以復制驅動文件之后,需要添加驅動文件的路徑到 makefile 中,加入編譯。
project.mk
文件指明了工程中所有文件的路徑:
在該文件中:
C文件路徑
HARDWARE_SRC:對應Hardware文件夾下的Src文件夾
USER_SRC:對應Src文件夾
頭文件路徑
HARDWARE_INC:對應Hardware文件夾下的Inc文件夾
USER_INC:對應Inc文件夾
如下,E53_SC1 驅動的底層 I2C 接口代碼i2c.c
路徑添加到USER_SRC中:
E53_SC1 驅動的底層 I2C 接口代碼i2c.h
路徑添加到USER_INC中:
基于 I2C 驅動的 E53_SC1 驅動文件E53_SC1.c
添加到HARDWARE_SRC中(默認未添加,需要手動添加):
基于 I2C 驅動的 E53_SC1 驅動文件E53_SC1.h
添加到 HARDWARE_INC 中(默認未添加,需要手動添加):
至此,復制文件到LiteOS工程中,并將新復制的文件路徑添加到makefile中,加入工程編譯,就完成了驅動的移植。
在上一篇文章中詳細的講述了在LiteOS中初始化設備的兩種方式:
在系統啟動調度之前初始化:設備在系統中隨時可被任意任務使用
在任務中初始化:設備一般只在該任務中被使用
本文中移植的 E53_SC1 擴展板驅動,不需要多個任務去操作,只需要傳感器數據采集任務操作即可,所以初始化放在數據采集任務中。
接下來首先創建一個文件夾(如果已有,不用再次創建),用于存放本系列教程實驗的代碼:
在該文件夾中創建一個文件:
編寫代碼:
#include <osal.h> #include "lcd.h" #include "E53_SC1.h" /* 存放E53_SC1擴展板傳感器數據,可在E53_SC1.h中查看定義 */ E53_SC1_Data_TypeDef E53_SC1_Data; /* 用于數據采集和數據處理任務間同步的信號量 */ osal_semp_t sync_semp; /* 數據采集任務-低優先級 */ static int data_collect_task_entry() { /* 初始化擴展板 */ Init_E53_SC1(); while (1) { /* 讀取擴展板板載數據,存到數據結構體E53_SC1_Data中 */ E53_SC1_Read_Data(); /* 數據讀取完畢,釋放信號量,喚醒數據處理任務 */ osal_semp_post(sync_semp); /* 任務睡眠2s */ osal_task_sleep(2*1000); } } /* 數據處理任務-高優先級 */ static int data_deal_task_entry() { /* lux- 當次數據,old-lux-上次數據 */ int lux = 0, old_lux = 0; /* LCD清屏,防止干擾顯示 */ LCD_Clear(WHITE); while (1) { /* 等待信號量,未等到說明數據還未采集,阻塞等待 */ osal_semp_pend(sync_semp, cn_osal_timeout_forever); /* 信號量等待,被喚醒,開始處理數據 */ old_lux = lux; lux = (int)E53_SC1_Data.Lux; printf("BH1750 Value is %d\r\n", lux); LCD_ShowString(10, 100, 200, 16, 16, "BH1750 Value is:"); LCD_ShowNum(140, 100, lux, 5, 16); /* 閾值為1000,自動點亮或者熄滅路燈 */ if(old_lux < 1000 && lux > 1000) { HAL_GPIO_WritePin(SC1_Light_GPIO_Port, SC1_Light_Pin, GPIO_PIN_RESET); printf("Street Light OFF!\r\n"); } else if(old_lux > 1000 && lux < 1000) { HAL_GPIO_WritePin(SC1_Light_GPIO_Port, SC1_Light_Pin, GPIO_PIN_SET); printf("Street Light ON!\r\n"); } } } /* 標準demo啟動函數,函數名不要修改,否則會影響下一步實驗 */ int standard_app_demo_main() { /* 創建信號量 */ osal_semp_create(&sync_semp, 1, 0); /* 數據處理任務的優先級應高于數據采集任務 */ osal_task_create("data_collect",data_collect_task_entry,NULL,0x400,NULL,3); osal_task_create("data_deal",data_deal_task_entry,NULL,0x400,NULL,2); return 0; }
然后按照之前的方法,在 user_demo.mk 中將lcd_driver_demo.c
文件添加到makefile中,加入編譯:
最后在.sdkconfig
中配置開啟宏定義:
編譯,燒錄,即可看到實驗現象。
LCD屏幕上顯示當前傳感器采集的亮度值,并且每2s更新一次,當亮度值低于1000時,E53_SC1擴展板的路燈自動點亮:
當亮度值高于1000時,E53_SC1擴展板的路燈自動熄滅:
另外,打開IoT-Studio自帶的串口終端,可以查看到串口輸出的工作信息:
linkmain:V1.2.1 AT 10:40:09 ON Dec 5 2019 BH1750 Value is 220 WELCOME TO IOT_LINK SHELL LiteOS:/>BH1750 Value is 612 BH1750 Value is 566 BH1750 Value is 14109 Street Light OFF! BH1750 Value is 14814 BH1750 Value is 178 Street Light ON! BH1750 Value is 179 ……
到此,相信大家對“LiteOS裸機驅動移植03-E53_SC1擴展板的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。