您好,登錄后才能下訂單哦!
這篇文章主要講解了“LiteOS裸機驅(qū)動移植05-E53_SF1擴展板驅(qū)動方法是什么”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“LiteOS裸機驅(qū)動移植05-E53_SF1擴展板驅(qū)動方法是什么”吧!
E53接口標準的E取自擴展(Expansion)的英文首字母,板子的尺寸為5×3cm,故采用E53作為前綴來命名尺寸為 5cm*3cm 類型的案例擴展板,任何一款滿足標準設計的開發(fā)板均可直接適配E53擴展板。
E53擴展板是根據(jù)不同的應用場景來設計的,以最大的程度在擴展板上還原真實應用場景,不同案例的擴展板根據(jù)不同的應用場景來命名后綴。例如:E53_SC1,SC是智慧城市(Smart City)的縮寫,SC1表示的是智慧城市中的智慧路燈,再比如SC2則表示的是智慧城市中的智慧井蓋。
E53擴展接口在電氣特性上,包含了常用的物聯(lián)網(wǎng)感知層傳感器通信接口,比如5V、3.3V、GND、SPI、UART、IIC、ADC、DAC等等,可以適配各種傳感器,還留有4個普通GPIO,如圖:
E53_SF1擴展板采用了E53標準接口,包含了一個可燃氣體傳感器MQ-2,一個無源蜂鳴器,一個LED,其中無源蜂鳴器使用定時器輸出PWM信號控制,LED使用普通GPIO控制,可燃氣體傳感器的數(shù)據(jù)使用ADC讀取。
如果你對該擴展板板載的MQ-2傳感器和無源蜂鳴器的驅(qū)動不熟悉,請先閱讀嵌入式基礎教程
本文中所使用的驅(qū)動文件,直接將用于產(chǎn)生PWM的定時器TIM16初始化配置代碼和ADC初始化配置代碼,所以無需復制其它底層文件。
IoT-Studio中提供的默認工程已經(jīng)包含了該驅(qū)動文件,無需再次添加,如圖:
因為 LiteOS 的整個項目工程使用 make 構建,所以復制驅(qū)動文件之后,需要添加驅(qū)動文件的路徑到 makefile 中,加入編譯。
之前我們都是在project.mk
中直接添加,這里我們使用一種更加簡便有效的方法,直接在user_demo.mk
中配置,只有當開啟了該demo后,才會添加這些驅(qū)動文件路徑,不會造成沖突:
在user_demo.mk中添加如下代碼:
#example for e53_sf1_driver_demo ifeq ($(CONFIG_USER_DEMO), "e53_sf1_driver_demo") user_hardware_src = ${wildcard $(TOP_DIR)/targets/STM32L431_BearPi/Hardware/E53_SF1/*.c} user_hardware_inc = -I ${wildcard $(TOP_DIR)/targets/STM32L431_BearPi/Hardware/E53_SF1} endif
添加位置如下:
至此,復制文件到LiteOS工程中,并將新復制的文件路徑添加到makefile中,如果開啟了該demo,則加入工程編譯,就完成了驅(qū)動的移植。
在第一篇文章中詳細的講述了在LiteOS中初始化設備的兩種方式:
在系統(tǒng)啟動調(diào)度之前初始化:設備在系統(tǒng)中隨時可被任意任務使用
在任務中初始化:設備一般只在該任務中被使用
本文中移植的 E53_SF1 擴展板驅(qū)動,不需要多個任務去操作,只需要傳感器數(shù)據(jù)采集任務操作即可,所以初始化放在數(shù)據(jù)采集任務中。
接下來首先創(chuàng)建一個文件夾(如果已有,不用再次創(chuàng)建),用于存放本系列教程實驗的代碼:
在該文件夾中創(chuàng)建一個文件:
編寫代碼:
#include <osal.h> #include "lcd.h" #include "E53_SF1.h" /* 存放E53_SF1擴展板傳感器數(shù)據(jù),可在E53_SF1.h中查看定義 */ E53_SF1_Data_TypeDef E53_SF1_Data; /* 用于數(shù)據(jù)采集和數(shù)據(jù)處理任務間同步的信號量 */ osal_semp_t sync_semp; /* 數(shù)據(jù)采集任務-低優(yōu)先級 */ static int data_collect_task_entry() { /* 初始化擴展板 */ Init_E53_SF1(); while (1) { /* 讀取擴展板板載數(shù)據(jù),存到數(shù)據(jù)結構體E53_SF1_Data中 */ E53_SF1_Read_Data(); /* 數(shù)據(jù)讀取完畢,釋放信號量,喚醒數(shù)據(jù)處理任務 */ osal_semp_post(sync_semp); /* 任務睡眠2s */ osal_task_sleep(2*1000); } } /* 數(shù)據(jù)處理任務-高優(yōu)先級 */ static int data_deal_task_entry() { /* smoke_value- 當次數(shù)據(jù),old-smoke_value-上次數(shù)據(jù) */ int smoke_value = 0, old_smoke_value = 0; /* LCD清屏,防止干擾顯示 */ LCD_Clear(WHITE); while (1) { /* 等待信號量,未等到說明數(shù)據(jù)還未采集,阻塞等待 */ osal_semp_pend(sync_semp, cn_osal_timeout_forever); /* 信號量等待,被喚醒,開始處理數(shù)據(jù) */ old_smoke_value = smoke_value; smoke_value = (int)E53_SF1_Data.Smoke_Value; printf("Smoke Value is %d\r\n", smoke_value); LCD_ShowString(10, 100, 200, 16, 16, "Smoke Value is:"); LCD_ShowNum(140, 100, smoke_value, 5, 16); /* 閾值為100,自動打開或關閉LED或蜂鳴器 */ if(old_smoke_value < 100 && smoke_value > 100) { E53_SF1_LED_StatusSet(ON); E53_SF1_Beep_StatusSet(ON); printf("Beep and Light ON!\r\n"); } else if(old_smoke_value > 100 && smoke_value < 100) { E53_SF1_LED_StatusSet(OFF); E53_SF1_Beep_StatusSet(OFF); printf("Beep and Light OFF!\r\n"); } } } /* 標準demo啟動函數(shù),函數(shù)名不要修改,否則會影響下一步實驗 */ int standard_app_demo_main() { /* 創(chuàng)建信號量 */ osal_semp_create(&sync_semp, 1, 0); /* 數(shù)據(jù)處理任務的優(yōu)先級應高于數(shù)據(jù)采集任務 */ 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 中將e53_sf1_driver_demo.c
文件添加到makefile中,加入編譯:
最后在.sdkconfig
中配置開啟宏定義:
編譯,燒錄,即可看到實驗現(xiàn)象。
LCD屏幕上顯示當前傳感器采集的煙感值,并且每2s更新一次。
當煙感值高于100時,E53_SF1擴展板的LED燈自動點亮,蜂鳴器開始鳴叫:
當煙感值低于100時,E53_SF1擴展板的LED燈自動熄滅,蜂鳴器關閉鳴叫:
另外,打開IoT-Studio自帶的串口終端,可以查看到串口輸出的工作信息:
linkmain:V1.2.1 AT 09:31:53 ON Dec 8 2019 Smoke Value is 0 WELCOME TO IOT_LINK SHELL LiteOS:/>Smoke Value is 0 Smoke Value is 0 Smoke Value is 0 Smoke Value is 0 Smoke Value is 279 Beep and Light ON! Smoke Value is 103 Smoke Value is 88 Beep and Light OFF! Smoke Value is 0 Smoke Value is 278 Beep and Light ON! Smoke Value is 27 Beep and Light OFF! ……
感謝各位的閱讀,以上就是“LiteOS裸機驅(qū)動移植05-E53_SF1擴展板驅(qū)動方法是什么”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對LiteOS裸機驅(qū)動移植05-E53_SF1擴展板驅(qū)動方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。