小熊派华为物联网操作系统LiteOS裸机驱动移植03-E53_SC1扩展板驱动及使用

举报
小熊派开源社区 发表于 2020/02/16 19:05:01 2020/02/16
【摘要】 1.E53_SC1扩展板及其驱动关于E53标准接口E53接口标准的E取自扩展(Expansion)的英文首字母,板子的尺寸为5×3cm,故采用E53作为前缀来命名尺寸为 5×3cm 类型的案例扩展板,任何一款满足标准设计的开发板均可直接适配E53扩展板。E53扩展板是根据不同的应用场景来设计的,以最大的程度在扩展板上还原真实应用场景,不同案例的扩展板根据不同的应用场景来命名后缀。例如:E53...

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

image.png


E53_SC1智慧路灯扩展板

E53_SC1扩展板采用了E53标准接口,包含了一个路灯灯珠,一个BH1750光照强度传感器,其中路灯灯珠使用普通GPIO控制,BH1750使用IIC接口通信。

image.png


如果你对该扩展板或者BH1750光照强度的驱动不熟悉,请先阅读嵌入式基础教程

2. 移植E53_SC1驱动到LiteOS

复制裸机驱动文件到LiteOS工程

E53SC1扩展板上的 BH1750 光照强度传感器使用的是 IIC 通信接口,所以除了复制 STM32CubeMX 生成的i2c.h和i2c.h文件,还需要在此基础上复制包含了 BH1750 传感器驱动的 E53SC1 扩展板驱动文件。

在复制文件的时候,按照上一篇文章中所说的,复制i2c.h到Inc 文件夹,复制i2c.c到 Src 文件夹,再复制自己编写的驱动文件E53_SC1.c、E53_SC1.h到 Hardware文件夹。

IoT-Studio中提供的默认工程已经复制好了这些文件,无需再次添加,如图:

image.png


添加驱动文件路径

因为 LiteOS 的整个项目工程使用 make 构建,所以复制驱动文件之后,需要添加驱动文件的路径到 makefile 中,加入编译。

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

image.png


在该文件中:

  • C文件路径 HARDWARE_SRC:对应Hardware文件夹下的Src文件夹 USER_SRC:对应Src文件夹

  • 头文件路径 HARDWARE_INC:对应Hardware文件夹下的Inc文件夹 USER_INC:对应Inc文件夹

如下,E53SC1 驱动的底层 I2C 接口代码i2c.c路径添加到USERSRC中:

image.png


E53SC1 驱动的底层 I2C 接口代码i2c.h路径添加到USERINC中:

image.png


基于 I2C 驱动的 E53SC1 驱动文件`E53SC1.c`添加到HARDWARE_SRC中

image.png


基于 I2C 驱动的 E53SC1 驱动文件`E53SC1.h`添加到 HARDWARE_INC 中

image.png


至此,复制文件到LiteOS工程中,并将新复制的文件路径添加到makefile中,加入工程编译,就完成了驱动的移植。

3. E53_SC1裸机驱动的使用


初始化E53_SC1扩展板

在上一篇文章中详细的讲述了在LiteOS中初始化设备的两种方式:

  • 在系统启动调度之前初始化:设备在系统中随时可被任意任务使用

  • 在任务中初始化:设备一般只在该任务中被使用

本文中移植的 E53_SC1 扩展板驱动,**不需要多个任务去操作,只需要传感器数据采集任务操作即可,所以初始化放在数据采集任务中**。

操作E53_SC1扩展板

接下来首先创建一个文件夹(如果已有,不用再次创建),用于存放本系列教程实验的代码:


image.png

image.png


在该文件夹中创建一个文件:


image.png

编写代码:

#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;
}

然后按照之前的方法,在 userdemo.mk 中将`lcddriver_demo.c`文件添加到makefile中,加入编译:

image.png


最后在.sdkconfig中配置开启宏定义:

image.png


编译,烧录,即可看到实验现象。

LCD屏幕上显示当前传感器采集的亮度值,并且每2s更新一次,当亮度值低于1000时,E53_SC1扩展板的路灯自动点亮:

image.png


当亮度值高于1000时,E53_SC1扩展板的路灯自动熄灭:

image.png


另外,打开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
……


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。