91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

LiteOS裸機驅動移植03-E53_SC1擴展板的方法是什么

發布時間:2021-12-29 10:25:12 來源:億速云 閱讀:139 作者:iii 欄目:互聯網科技

本篇內容主要講解“LiteOS裸機驅動移植03-E53_SC1擴展板的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“LiteOS裸機驅動移植03-E53_SC1擴展板的方法是什么”吧!

1.E53_SC1擴展板及其驅動

關于E53標準接口

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,如圖:

LiteOS裸機驅動移植03-E53_SC1擴展板的方法是什么

E53_SC1智慧路燈擴展板

E53_SC1擴展板采用了E53標準接口,包含了一個路燈燈珠,一個BH1750光照強度傳感器,其中路燈燈珠使用普通GPIO控制,BH1750使用IIC接口通信。

LiteOS裸機驅動移植03-E53_SC1擴展板的方法是什么

如果你對該擴展板或者BH1750光照強度的驅動不熟悉,請先閱讀嵌入式基礎教程

2. 移植E53_SC1驅動到LiteOS

復制裸機驅動文件到LiteOS工程

E53_SC1擴展板上的 BH1750 光照強度傳感器使用的是 IIC 通信接口,所以除了復制 STM32CubeMX 生成的i2c.hi2c.h文件,還需要在此基礎上復制包含了 BH1750 傳感器驅動的 E53_SC1 擴展板驅動文件。

在復制文件的時候,按照上一篇文章中所說的,復制i2c.h到Inc 文件夾,復制i2c.c到 Src 文件夾,再復制自己編寫的驅動文件E53_SC1.cE53_SC1.h到 Hardware文件夾。

IoT-Studio中提供的默認工程已經復制好了這些文件,無需再次添加,如圖:

LiteOS裸機驅動移植03-E53_SC1擴展板的方法是什么

添加驅動文件路徑

因為 LiteOS 的整個項目工程使用 make 構建,所以復制驅動文件之后,需要添加驅動文件的路徑到 makefile 中,加入編譯。

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

LiteOS裸機驅動移植03-E53_SC1擴展板的方法是什么

在該文件中:

  • C文件路徑

    • HARDWARE_SRC:對應Hardware文件夾下的Src文件夾

    • USER_SRC:對應Src文件夾

  • 頭文件路徑

    • HARDWARE_INC:對應Hardware文件夾下的Inc文件夾

    • USER_INC:對應Inc文件夾

如下,E53_SC1 驅動的底層 I2C 接口代碼i2c.c路徑添加到USER_SRC中:

LiteOS裸機驅動移植03-E53_SC1擴展板的方法是什么

E53_SC1 驅動的底層 I2C 接口代碼i2c.h路徑添加到USER_INC中:

LiteOS裸機驅動移植03-E53_SC1擴展板的方法是什么

基于 I2C 驅動的 E53_SC1 驅動文件E53_SC1.c添加到HARDWARE_SRC中(默認未添加,需要手動添加):

LiteOS裸機驅動移植03-E53_SC1擴展板的方法是什么

基于 I2C 驅動的 E53_SC1 驅動文件E53_SC1.h添加到 HARDWARE_INC 中(默認未添加,需要手動添加):

LiteOS裸機驅動移植03-E53_SC1擴展板的方法是什么

至此,復制文件到LiteOS工程中,并將新復制的文件路徑添加到makefile中,加入工程編譯,就完成了驅動的移植。

3. E53_SC1裸機驅動的使用

初始化E53_SC1擴展板

在上一篇文章中詳細的講述了在LiteOS中初始化設備的兩種方式:

  • 在系統啟動調度之前初始化:設備在系統中隨時可被任意任務使用

  • 在任務中初始化:設備一般只在該任務中被使用

本文中移植的 E53_SC1 擴展板驅動,不需要多個任務去操作,只需要傳感器數據采集任務操作即可,所以初始化放在數據采集任務中

操作E53_SC1擴展板

接下來首先創建一個文件夾(如果已有,不用再次創建),用于存放本系列教程實驗的代碼:

LiteOS裸機驅動移植03-E53_SC1擴展板的方法是什么

LiteOS裸機驅動移植03-E53_SC1擴展板的方法是什么

在該文件夾中創建一個文件:

LiteOS裸機驅動移植03-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中,加入編譯:

LiteOS裸機驅動移植03-E53_SC1擴展板的方法是什么

最后在.sdkconfig中配置開啟宏定義:

LiteOS裸機驅動移植03-E53_SC1擴展板的方法是什么

編譯,燒錄,即可看到實驗現象。

LCD屏幕上顯示當前傳感器采集的亮度值,并且每2s更新一次,當亮度值低于1000時,E53_SC1擴展板的路燈自動點亮:

LiteOS裸機驅動移植03-E53_SC1擴展板的方法是什么

當亮度值高于1000時,E53_SC1擴展板的路燈自動熄滅:

LiteOS裸機驅動移植03-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擴展板的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

衡阳县| 云梦县| 内江市| 全椒县| 常熟市| 岑巩县| 余姚市| 玉田县| 金阳县| 庄河市| 达州市| 武安市| 太康县| 兰州市| 宜宾市| 罗平县| 囊谦县| 平乡县| 巴里| 沾化县| 恩平市| 贵阳市| 富平县| 佛坪县| 南华县| 新津县| 岑溪市| 新干县| 崇阳县| 赤峰市| 屏东市| 灵山县| 兴隆县| 古交市| 玉溪市| 济宁市| 成武县| 万源市| 闻喜县| 文安县| 江山市|