千家信息网

LiteOS裸机驱动移植05-E53_SF1扩展板驱动方法是什么

发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,这篇文章主要讲解了"LiteOS裸机驱动移植05-E53_SF1扩展板驱动方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"LiteOS裸机驱动
千家信息网最后更新 2025年01月24日LiteOS裸机驱动移植05-E53_SF1扩展板驱动方法是什么

这篇文章主要讲解了"LiteOS裸机驱动移植05-E53_SF1扩展板驱动方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"LiteOS裸机驱动移植05-E53_SF1扩展板驱动方法是什么"吧!

1.E53_SF1扩展板及其驱动

关于E53标准接口

E53接口标准的E取自扩展(Expansion)的英文首字母,板子的尺寸为5×3cm,故采用E53作为前缀来命名尺寸为 5cm*3cm 类型的案例扩展板,任何一款满足标准设计的开发板均可直接适配E53扩展板。

E53扩展板是根据不同的应用场景来设计的,以最大的程度在扩展板上还原真实应用场景,不同案例的扩展板根据不同的应用场景来命名后缀。例如:E53_SC1,SC是智慧城市(Smart City)的缩写,SC1表示的是智慧城市中的智慧路灯,再比如SC2则表示的是智慧城市中的智慧井盖。

E53扩展接口在电气特性上,包含了常用的物联网感知层传感器通信接口,比如5V、3.3V、GND、SPI、UART、IIC、ADC、DAC等等,可以适配各种传感器,还留有4个普通GPIO,如图:

E53_SF1智慧消防扩展板

E53_SF1扩展板采用了E53标准接口,包含了一个可燃气体传感器MQ-2,一个无源蜂鸣器,一个LED,其中无源蜂鸣器使用定时器输出PWM信号控制,LED使用普通GPIO控制,可燃气体传感器的数据使用ADC读取。

如果你对该扩展板板载的MQ-2传感器和无源蜂鸣器的驱动不熟悉,请先阅读嵌入式基础教程

2. 移植E53_SF1驱动到LiteOS

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

本文中所使用的驱动文件,直接将用于产生PWM的定时器TIM16初始化配置代码和ADC初始化配置代码,所以无需复制其它底层文件。

IoT-Studio中提供的默认工程已经包含了该驱动文件,无需再次添加,如图:

添加驱动文件路径

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

之前我们都是在project.mk中直接添加,这里我们使用一种更加简便有效的方法,直接在user_demo.mk中配置,只有当开启了该demo后,才会添加这些驱动文件路径,不会造成冲突:

在user_demo.mk中添加如下代码:

#example for e53_sf1_driver_demoifeq ($(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,则加入工程编译,就完成了驱动的移植。

3. E53_SF1裸机驱动的使用

初始化E53_SF1扩展板

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

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

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

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

操作E53_SF1扩展板

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

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

编写代码:

#include #include "lcd.h"#include "E53_SF1.h"/* 存放E53_SF1扩展板传感器数据,可在E53_SF1.h中查看定义 */E53_SF1_Data_TypeDef E53_SF1_Data;/* 用于数据采集和数据处理任务间同步的信号量 */osal_semp_t sync_semp;/* 数据采集任务-低优先级 */static int data_collect_task_entry(){    /* 初始化扩展板 */    Init_E53_SF1();    while (1)    {        /* 读取扩展板板载数据,存到数据结构体E53_SF1_Data中 */        E53_SF1_Read_Data();        /* 数据读取完毕,释放信号量,唤醒数据处理任务 */        osal_semp_post(sync_semp);        /* 任务睡眠2s */        osal_task_sleep(2*1000);    }}/* 数据处理任务-高优先级 */static int data_deal_task_entry(){    /* smoke_value- 当次数据,old-smoke_value-上次数据 */        int smoke_value = 0, old_smoke_value = 0;    /* LCD清屏,防止干扰显示 */    LCD_Clear(WHITE);    while (1)    {        /* 等待信号量,未等到说明数据还未采集,阻塞等待 */        osal_semp_pend(sync_semp, cn_osal_timeout_forever);        /* 信号量等待,被唤醒,开始处理数据 */        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启动函数,函数名不要修改,否则会影响下一步实验 */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 中将e53_sf1_driver_demo.c文件添加到makefile中,加入编译:

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

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

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 0WELCOME TO IOT_LINK SHELLLiteOS:/>Smoke Value is 0Smoke Value is 0Smoke Value is 0Smoke Value is 0Smoke Value is 279Beep and Light ON!Smoke Value is 103Smoke Value is 88Beep and Light OFF!Smoke Value is 0Smoke Value is 278Beep and Light ON!Smoke Value is 27Beep and Light OFF!……

感谢各位的阅读,以上就是"LiteOS裸机驱动移植05-E53_SF1扩展板驱动方法是什么"的内容了,经过本文的学习后,相信大家对LiteOS裸机驱动移植05-E53_SF1扩展板驱动方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0