全部文档
OneOS简介 硬件支持 快速开发指南 编译构造工具 API参考文档 高级语言 用户编程手册 OnePos定位 应用笔记 FAQ

湿度计低功耗开发


基础BSP配置--以APOLLO为例

建立工程文件

温湿度计的低功耗是为了验证低功耗框架在具体的产品中是否真正有作用,找到的一款产品;原产品是基于FreeRTOS系统,我们做的是基于OneOS进行开发,实现温湿度读取和低功耗功能。

温湿度计使用的芯片是APOLLO512-KBR,OneOS已经完成了此款芯片的BSP适配,工程路径:oneos\projects\apollo;复制apollo文件夹粘贴为apollo_th,在apollo_th下进行温湿度计的开发。

温湿度计jlink和串口连接

温湿度计是一款具体的产品,没有预留烧写口和串口,通过焊接飞线方式引出连线,如下:

apollo-th_link

使用 Menuconfig 配置工程选项

  1. 需要读取温湿度计,使用软件I2C,配置如下;
(Top) → Drivers → I2C
                                             OneOS Configuration
[*] Using I2C device drivers
[*]     Use GPIO to simulate I2C
(10)        simulate I2C bus delay(us)
[*]         Enable I2C1 BUS (software simulation)  --->
[ ]         Enable I2C2 BUS (software simulation)  ----
[ ]         Enable I2C3 BUS (software simulation)  ----
[ ]         Enable I2C4 BUS (software simulation)  ----
[ ]     Use at24cxx eeprom

I2C的SCL和SDA管脚分别是5和6

→ Drivers → I2C → Using I2C device drivers → Use GPIO to simulate I2C → Enable I2C1 BUS (software stion)
                                             OneOS Configuration
(5) i2c1 scl pin number
(6) I2C1 sda pin number

2.打开低功耗使能配置

(Top) → Drivers→ Low power manager
                                             OneOS Configuration
[*] Enable low power manager drivers

3.Esc键退出menuconfig,注意保存所修改的设置。

主要代码分析

温湿度计使用的串口io和工程apollo不同,需要修改串口IO(board.h):

//#define UART0_GPIO_RX     40
//#define UART0_GPIO_CFG_RX AM_HAL_PIN_40_UARTRX
//#define UART0_GPIO_TX     14
//#define UART0_GPIO_CFG_TX AM_HAL_PIN_14_UARTTX

#define UART0_GPIO_RX     23
#define UART0_GPIO_CFG_RX AM_HAL_PIN_23_UARTRX
#define UART0_GPIO_TX     22
#define UART0_GPIO_CFG_TX AM_HAL_PIN_22_UARTTX

主要功能代码如下(main.c),分析见注释:

static void send_task(void *parameter)
{
    LPMGR_TIME_S *time = OS_NULL;

    lpmgr_hard_init();
    /* 注册用户回调函数,回调函数里是用户在进入和退出低功耗处理的事物,主要起作用接口os_lpmgr_notify_set() */
    lpmgr_dev_init();   

    os_lpmgr_request(3);    /* 请求进入低功耗模式3 */
    os_kprintf("[%s]-[%d], reques sleep mode, tick[%d]\r\n", __FILE__, __LINE__, os_tick_get());

    while (1)
    {
        /* 请求模式0,模式0和1是正常运行模式,一般请求了0或者1模式,就阻止了系统进入低功耗 */
        os_lpmgr_request(0);    
        os_kprintf("[%s]-[%d], exit sleep mode, tick[%d]\r\n", __FILE__, __LINE__, os_tick_get());

        time = lpmgr_time_get();
        /* 延时,增加用户运行态的时间,便于观察现象 */
        os_task_msleep(time->run_time * 1000);

        /* 用户任务,这里是读取温湿度并通过串口打印出来 */
        task_run();

        os_kprintf("[%s]-[%d], enter sleep mode, tick[%d], run_time[%d], sleep_time[%d]\r\n\n\n", 
            __FILE__, __LINE__, os_tick_get(), time->run_time, time->sleep_time);

         /* 前面请求了低功耗模式3,但又请求了模式0,功耗模式会执行模式最小的模式0,既正常运行模式,这里释放了模式0,会执行模式3的低功耗 */
        os_lpmgr_release(0);   

         /* sleep sleep_time 秒,会在idle任务里面进入低功耗,睡眠的时间是sleep_time秒 */
        os_task_msleep(time->sleep_time * 1000);
    }
}

使用 Scons 构建工程

在上一步打开的 OneOS-Cube 工具命令行输入 scons --ide=mdk5 构建工程;

工程编译及实现

  1. 打开对应的 oneos\projects\apollo_th(project文件夹) 目录下的 project.uvprojx 工程文件;
  2. 编译并下载工程,运行程序;
  3. 程序运行会周期性的进入和退出低功耗,退出低功耗时会读取打印温湿度信息;
  4. 可以通过shell命名配置运行和低功耗时间,lower_time_set run_time(s) sleep_time(s);例如lower_time_set 5 10;表示运行5s,睡眠10s,默认是运行10s,睡眠10s;
  5. 使用万用表从GND处串联进电路,测试电流,运行态:6150uA;低功耗:50uA,测试电流是注意不要超出万用表档位量程。

results matching ""

    No results matching ""

    返回顶部