(小熊派IoT开发套件全部教程   ↑点击启阅↑)

▷01 | 物联网一站式开发工具 IoT-Studio

▷02 | Hello World

▷03 | 任务管理

▷04 | 信号量(任务同步)

▷05 | 互斥锁(共享资源保护)

▷06 | 内存管理

▷01 | 以LED为例说明裸机驱动移植方法

▷02 | LCD驱动移植及使用

▷03 | E53_SC1智慧路灯扩展板驱动及使用

▷04 | E53_IA1智慧农业扩展板驱动及使用

1.E53_SF1扩展板及其驱动

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

E53接口电气特性

E53_SF1智慧消防扩展板

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

E53_SF1扩展板

如果你对该扩展板板载的MQ-2传感器和无源蜂鸣器的驱动不熟悉,请先阅读嵌入式基础教程:E53扩展板实验 —— 使用ADC读取气体传感器数据(MQ-2)、E53扩展板实验 —— 使用通用定时器产生PWM驱动蜂鸣器。

2. 移植E53_SF1驱动到LiteOS

如果你对移植裸机驱动到LiteOS的方法还不了解,请先阅读这篇文章:LiteOS裸机驱动移植教程01 | 以LED为例说明裸机驱动移植方法。

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

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

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

E53_SF1扩展板驱动

添加驱动文件路径

因为 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    

添加位置如下:

user_demo.mk

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

3. E53_SF1裸机驱动的使用

初始化E53_SF1扩展板

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

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

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

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

操作E53_SF1扩展板

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

新建文件夹

文件夹名称

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

创建Demo文件

编写代码:

#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中,加入编译:

user_demo.mk文件

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

.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!……

推荐阅读

《物联网创意大赛1.0》万元大奖等你来拿!!!

《物联网创意大赛1.0》一阶段:创意表达

《物联网创意大赛1.0》二阶段:动手实践

《物联网创意大赛1.0》三阶段:风采展示

ccs 移植创建新工程_LiteOS裸机驱动移植05 | E53_SF1智慧消防扩展板驱动及使用相关推荐

  1. ccs 移植创建新工程_CCS新工程创建与配置

    1.一个完整的工程包含的文件 CCS建立一个完整的工程,至少需要以下4个文件: 1)存储器分配cmd文件:cmd命令文件是用来分配存储空间的. 2)C语言系统库rts2xx.lib:rts2xx.li ...

  2. ccs 移植创建新工程_CCS-6-新建TMS320F28335工程(可移植)).pdf

    使用 CCS 6 新建 TMS320F28335 工程 本例程以 CCS 6.0下新建 TMS320F28335工程为例.用CCS 5,或者新建TI的其它处理 器工程的区别也不大,参考本例即可. 所建 ...

  3. ccs 移植创建新工程_3D生物打印器官新突破,模拟肺与肝脏,未来可能实现定制人类器官...

    现在很多疾病造成器官衰竭,这样最终需要器官移植来延续生命,过去移植依赖遗体捐献,但是远远不能满足需求,还会造成免疫反应.现在,器官打印技术有望解决这样问题.科学家克服了3D打印组织发展的主要障碍,打印 ...

  4. 乐鑫ESP32开发 1.Vscode创建新工程,编译,下载烧录,监视端口,点亮一个LED

    前言  Vscode安装ESP-IDF插件后,会在左下角生成一些按钮,用户可以点击实现配置.编译.下载.调试等功能.  但鉴于ESP-IDF的Vscode插件体验不是很好:不仅容易安装出错导致不能使用 ...

  5. matlab中创建一个工程,从文件夹创建新工程

    从文件夹创建新工程 如果您有许多文件并希望将它们整理为一个工程(无论是否进行源代码管理),请按照以下步骤创建一个新工程. 使用 Simulink® Start Page 中的 Folder to Pr ...

  6. Jenkins+Gerrit创建新工程手顺

    1. Gerrit创建新工程 管理员登录Gerrit,Project创建新工程,工程名与远程Git库工程名必须一样. 2. Jenkins配置 > 配置review Jobs Git配置为Ger ...

  7. 【幻灯片动画制作软件】Focusky教程 | 用图片创建新工程

    Focusky 动画演示大师(以下简称为"FS软件")为您提供4种方式创建新工程,包括, 创建空白项目,打开新的在线模板,导入已有的PPT创建新工程,或者用一种全新的方法创建新工程 ...

  8. spring boot创建新工程运行报错解决方案

    [问题出现原因] 问题出现在创建spring Initializr创建新工程时选择myBatis问题. 该类问题一般出现在application.properties配置文件问题. 选择对应的mysq ...

  9. Keil5创建新工程时找不到STM32芯片

    手动添加STM32芯片包 在安装完Keil5之后,需要导入STM32芯片包,但是按照网上提供的安装教程,直接点击资料包会报错,如下图:         没有显示可用STM32芯片 尝试解决: 在安装的 ...

最新文章

  1. 为什么整数集合使用Z来表示?
  2. asp.net MVC iis6 虚拟主机兼容开发方式
  3. New Linux2.6 I2C Driver Model Example
  4. 你所不知道的端口号知识!
  5. CRM WebClient UI里product search上下文节点渲染逻辑
  6. 数字能查出笔迹吗_大家都知道文字可以做笔迹鉴定,我想问一下专家阿拉伯数字是否也可以做笔迹鉴定正确率高吗?...
  7. mysql数据库连接配置路径_关于mysql安装后更改数据库路径方法-linux环境
  8. python引入模块教程_python导入模块--案例
  9. ASP.NET MVC模型绑定int超出范围时
  10. 学python有前途吗-入门学习Python编程有前途吗?
  11. 微博登录过程分析以及scrapy模拟登录微博
  12. 怎么卸载脚手架_安装卸载流程 · 广联达BIM模板脚手架设计软件帮助文档 · 看云...
  13. iReader阅读软件-Android手机电子书阅读器
  14. 电脑版微信多开显示网络代理服务器,电脑版微信多开办法,超级简单,一看就会...
  15. Tomcat端口配置(详细)
  16. Mac To Win
  17. Windows下安装Golang开发环境-SDK安装
  18. 【2016新年版】年度精品 XP,32/64位Win7,32/64位Win8,32/64位Win10系统
  19. Oracle 还原数据库
  20. java里 输出101-150中的素数

热门文章

  1. thttpd源码解析 定时器模块
  2. 二进制(1):无符号编码和补码编码
  3. python编写登录_通过Python编写一个简单登录功能过程解析
  4. 易语言数据类型与c 对照,易语言利用自定义数据类型和数组. 制作键对值操作类/内存配置...
  5. Unreal Engine 4 —— 版本兼容的工作原理以及一些可优化项
  6. 使用Jenkins配置自动化构建
  7. 为什么Unreal 4引擎能轻易实时渲染出vray要花半天才能渲染出的场景
  8. UE4 iOS游戏开发
  9. 浅谈oracle中for update 和 for update nowait 和 for update wait x的区别
  10. 简书自动生成目录小工具