真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

LiteOS怎么使用

本篇內(nèi)容主要講解“LiteOS怎么使用”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“LiteOS怎么使用”吧!

創(chuàng)新互聯(lián)公司是一家專(zhuān)業(yè)從事做網(wǎng)站、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)的品牌網(wǎng)絡(luò)公司。如今是成都地區(qū)具影響力的網(wǎng)站設(shè)計(jì)公司,作為專(zhuān)業(yè)的成都網(wǎng)站建設(shè)公司,創(chuàng)新互聯(lián)公司依托強(qiáng)大的技術(shù)實(shí)力、以及多年的網(wǎng)站運(yùn)營(yíng)經(jīng)驗(yàn),為您提供專(zhuān)業(yè)的成都網(wǎng)站建設(shè)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)及網(wǎng)站設(shè)計(jì)開(kāi)發(fā)服務(wù)!

1.E53_IA1擴(kuò)展板及其驅(qū)動(dòng)

關(guān)于E53標(biāo)準(zhǔn)接口

E53接口標(biāo)準(zhǔn)的E取自擴(kuò)展(Expansion)的英文首字母,板子的尺寸為5×3cm,故采用E53作為前綴來(lái)命名尺寸為 5×3cm 類(lèi)型的案例擴(kuò)展板,任何一款滿(mǎn)足標(biāo)準(zhǔn)設(shè)計(jì)的開(kāi)發(fā)板均可直接適配E53擴(kuò)展板。

E53擴(kuò)展板是根據(jù)不同的應(yīng)用場(chǎng)景來(lái)設(shè)計(jì)的,以最大的程度在擴(kuò)展板上還原真實(shí)應(yīng)用場(chǎng)景,不同案例的擴(kuò)展板根據(jù)不同的應(yīng)用場(chǎng)景來(lái)命名后綴。例如:E53_SC1,SC是智慧城市(Smart City)的縮寫(xiě),SC1表示的是智慧城市中的智慧路燈,再比如SC2則表示的是智慧城市中的智慧井蓋。

E53擴(kuò)展接口在電氣特性上,包含了常用的物聯(lián)網(wǎng)感知層傳感器通信接口,比如5V、3.3V、GND、SPI、UART、IIC、ADC、DAC等等,可以適配各種傳感器,還留有4個(gè)普通GPIO,如圖:

LiteOS怎么使用

E53_IA1智慧農(nóng)業(yè)擴(kuò)展板

E53_IA1擴(kuò)展板采用了E53標(biāo)準(zhǔn)接口,包含了一個(gè)補(bǔ)光燈,一個(gè)BH1750光照強(qiáng)度傳感器,一個(gè)小的貼片電機(jī),一個(gè)溫濕度傳感器SHT30,一個(gè)其中補(bǔ)光燈和貼片電機(jī)使用普通GPIO控制,BH1750和SHT30使用IIC接口通信。

LiteOS怎么使用

如果你對(duì)該擴(kuò)展板板載的BH1750光照強(qiáng)度和溫濕度傳感器驅(qū)動(dòng)不熟悉,請(qǐng)先閱讀嵌入式基礎(chǔ)教程

2. 移植E53_IA1驅(qū)動(dòng)到LiteOS

復(fù)制裸機(jī)驅(qū)動(dòng)文件到LiteOS工程

E53_IA1擴(kuò)展板上的 BH1750 光照強(qiáng)度傳感器和SHT30溫濕度傳感器使用的是 IIC 通信接口,所以除了復(fù)制 STM32CubeMX 生成的i2c.hi2c.h文件,還需要在此基礎(chǔ)上復(fù)制包含了 BH1750 傳感器驅(qū)動(dòng)和SHT30傳感器驅(qū)動(dòng)的 E53_IA1 擴(kuò)展板驅(qū)動(dòng)文件。

在復(fù)制文件的時(shí)候,按照上一篇文章中所說(shuō)的,復(fù)制i2c.h到Inc 文件夾,復(fù)制i2c.c到 Src 文件夾,再?gòu)?fù)制自己編寫(xiě)的驅(qū)動(dòng)文件E53_IA1.c、E53_IA1.h到 Hardware文件夾。

IoT-Studio中提供的默認(rèn)工程已經(jīng)復(fù)制好了這些文件,無(wú)需再次添加,如圖:

LiteOS怎么使用

添加驅(qū)動(dòng)文件路徑

因?yàn)?LiteOS 的整個(gè)項(xiàng)目工程使用 make 構(gòu)建,所以復(fù)制驅(qū)動(dòng)文件之后,需要添加驅(qū)動(dòng)文件的路徑到 makefile 中,加入編譯。

project.mk文件指明了工程中所有文件的路徑:

LiteOS怎么使用

在該文件中:

  • C文件路徑

    • HARDWARE_SRC:對(duì)應(yīng)Hardware文件夾下的Src文件夾

    • USER_SRC:對(duì)應(yīng)Src文件夾

  • 頭文件路徑

    • HARDWARE_INC:對(duì)應(yīng)Hardware文件夾下的Inc文件夾

    • USER_INC:對(duì)應(yīng)Inc文件夾

如下,E53_IA1 驅(qū)動(dòng)的底層 I2C 接口代碼i2c.c路徑添加到USER_SRC中:

LiteOS怎么使用

E53_IA1 驅(qū)動(dòng)的底層 I2C 接口代碼i2c.h路徑添加到USER_INC中:

LiteOS怎么使用

因?yàn)镾C1和IA1的驅(qū)動(dòng)中都包含BH1750的驅(qū)動(dòng),所以添加的時(shí)候需要注意去掉E53_SC1 的驅(qū)動(dòng)文件E53_SC1.cE53_SC1.h,否則會(huì)引起沖突。

基于 I2C 驅(qū)動(dòng)的 E53_IA1 驅(qū)動(dòng)文件E53_IA1.c添加到HARDWARE_SRC中(默認(rèn)未添加,需要手動(dòng)添加):

LiteOS怎么使用

基于 I2C 驅(qū)動(dòng)的 E53_IA1 驅(qū)動(dòng)文件E53_IA1添加到 HARDWARE_INC 中(默認(rèn)未添加,需要手動(dòng)添加):

LiteOS怎么使用

至此,復(fù)制文件到LiteOS工程中,并將新復(fù)制的文件路徑添加到makefile中,加入工程編譯,就完成了驅(qū)動(dòng)的移植。

3. E53_IA1裸機(jī)驅(qū)動(dòng)的使用

初始化E53_IA1擴(kuò)展板

在第一篇文章中詳細(xì)的講述了在LiteOS中初始化設(shè)備的兩種方式:

  • 在系統(tǒng)啟動(dòng)調(diào)度之前初始化:設(shè)備在系統(tǒng)中隨時(shí)可被任意任務(wù)使用

  • 在任務(wù)中初始化:設(shè)備一般只在該任務(wù)中被使用

本文中移植的 E53_IA1 擴(kuò)展板驅(qū)動(dòng),不需要多個(gè)任務(wù)去操作,只需要傳感器數(shù)據(jù)采集任務(wù)操作即可,所以初始化放在數(shù)據(jù)采集任務(wù)中

操作E53_IA1擴(kuò)展板

接下來(lái)首先創(chuàng)建一個(gè)文件夾(如果已有,不用再次創(chuàng)建),用于存放本系列教程實(shí)驗(yàn)的代碼:

LiteOS怎么使用

LiteOS怎么使用

在該文件夾中創(chuàng)建一個(gè)文件:

LiteOS怎么使用

編寫(xiě)代碼:

#include 
#include "lcd.h"
#include "E53_IA1.h"

/* 存放E53_IA1擴(kuò)展板傳感器數(shù)據(jù),可在E53_IA1.h中查看定義 */
E53_IA1_Data_TypeDef E53_IA1_Data;

/* 用于數(shù)據(jù)采集和數(shù)據(jù)處理任務(wù)間同步的信號(hào)量 */
osal_semp_t sync_semp;

/* 數(shù)據(jù)采集任務(wù)-低優(yōu)先級(jí) */
static int data_collect_task_entry()
{
    /* 初始化擴(kuò)展板 */
    Init_E53_IA1();

    while (1)
    {
        /* 讀取擴(kuò)展板板載數(shù)據(jù),存到數(shù)據(jù)結(jié)構(gòu)體E53_IA1_Data中 */
        E53_IA1_Read_Data();

        /* 數(shù)據(jù)讀取完畢,釋放信號(hào)量,喚醒數(shù)據(jù)處理任務(wù) */
        osal_semp_post(sync_semp);

        /* 任務(wù)睡眠2s */
        osal_task_sleep(2*1000);
    }
}

/* 數(shù)據(jù)處理任務(wù)-高優(yōu)先級(jí) */
static int data_deal_task_entry()
{
    /* lux- 當(dāng)次數(shù)據(jù),old-lux-上次數(shù)據(jù) */
    int lux = 0, old_lux = 0;
    int temperature = 0, old_temperature = 0;;
    int humidity;

    /* LCD清屏,防止干擾顯示 */
    LCD_Clear(WHITE);

    while (1)
    {
        /* 等待信號(hào)量,未等到說(shuō)明數(shù)據(jù)還未采集,阻塞等待 */
        osal_semp_pend(sync_semp, cn_osal_timeout_forever);

        /* 信號(hào)量等待,被喚醒,開(kāi)始處理數(shù)據(jù) */
        //處理光照強(qiáng)度
        old_lux = lux;
        lux = (int)E53_IA1_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,自動(dòng)點(diǎn)亮或者熄滅路燈 */
        if(old_lux < 1000 && lux > 1000)
        {
            HAL_GPIO_WritePin(IA1_Light_GPIO_Port, IA1_Light_Pin, GPIO_PIN_RESET);
            printf("Light OFF!\r\n");
        }
        else if(old_lux > 1000 && lux < 1000)
        {
            HAL_GPIO_WritePin(IA1_Light_GPIO_Port, IA1_Light_Pin, GPIO_PIN_SET);
            printf("Light ON!\r\n");
        }

        //處理濕度數(shù)據(jù)
        humidity = E53_IA1_Data.Humidity;
        printf("Humidity is %d\r\n", humidity);
        LCD_ShowString(10, 120, 200, 16, 16, "Humidity: ");
        LCD_ShowNum(140, 120, humidity, 5, 16);

        //處理溫度數(shù)據(jù)
        old_temperature = temperature;
        temperature = E53_IA1_Data.Temperature;
        printf("Temperature is %d\r\n", temperature);
        LCD_ShowString(10, 140, 200, 16, 16, "Temperature: ");
        LCD_ShowNum(140, 140, temperature, 5, 16);

        /* 溫度閾值為30,自動(dòng)開(kāi)啟或者關(guān)閉電機(jī) */
        if(old_temperature < 30 && temperature >= 30)
        {
            HAL_GPIO_WritePin(IA1_Motor_GPIO_Port, IA1_Motor_Pin, GPIO_PIN_SET);
            printf("Motor ON!\r\n");
        }
        else if(old_temperature >= 30 && temperature < 30)
        {
            HAL_GPIO_WritePin(IA1_Motor_GPIO_Port, IA1_Motor_Pin, GPIO_PIN_RESET);
            printf("Motor OFF!\r\n");
        }
    }
}

/* 標(biāo)準(zhǔn)demo啟動(dòng)函數(shù),函數(shù)名不要修改,否則會(huì)影響下一步實(shí)驗(yàn) */
int standard_app_demo_main()
{
    /* 創(chuàng)建信號(hào)量 */
    osal_semp_create(&sync_semp, 1, 0);

    /* 數(shù)據(jù)處理任務(wù)的優(yōu)先級(jí)應(yīng)高于數(shù)據(jù)采集任務(wù) */
    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 中將e51_ia1_driver_demo.c文件添加到makefile中,加入編譯:

LiteOS怎么使用

最后在.sdkconfig中配置開(kāi)啟宏定義:

LiteOS怎么使用

編譯,燒錄,即可看到實(shí)驗(yàn)現(xiàn)象。

LCD屏幕上顯示當(dāng)前傳感器采集的亮度值,溫度值,濕度值,并且每2s更新一次。

當(dāng)亮度值低于1000時(shí),E53_IA1擴(kuò)展板的補(bǔ)光燈自動(dòng)點(diǎn)亮:

LiteOS怎么使用

當(dāng)亮度值高于1000時(shí),E53_IA1擴(kuò)展板的補(bǔ)光燈自動(dòng)熄滅:

LiteOS怎么使用

在調(diào)節(jié)溫度的時(shí)候,可以用手按著SHT30溫濕度傳感器,天干物燥,務(wù)必提前觸摸一下金屬物體,釋放靜電,防止靜電破壞傳感器!

當(dāng)溫度上升到30°的時(shí)候,電機(jī)自動(dòng)啟動(dòng),當(dāng)溫度降低到30°以下時(shí),電機(jī)自動(dòng)關(guān)閉。

另外,打開(kāi)IoT-Studio自帶的串口終端,可以查看到串口輸出的工作信息:

linkmain:V1.2.1 AT 10:40:09 ON Dec  5 2019 

BH1750 Value is 237
Humidity is 19
Temperature is 28
WELCOME TO IOT_LINK SHELL

LiteOS:/>BH1750 Value is 1074
Light OFF!
Humidity is 19
Temperature is 29
BH1750 Value is 14086
Humidity is 20
Temperature is 30
Motor ON!
BH1750 Value is 284
Light ON!
Humidity is 21
Temperature is 30
BH1750 Value is 303
Humidity is 21
Temperature is 29
Motor OFF!
……

到此,相信大家對(duì)“LiteOS怎么使用”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!


當(dāng)前題目:LiteOS怎么使用
本文路徑:http://weahome.cn/article/pcshhd.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部