[干货分享] 【深创客】NB476Liteos例程

    该例程以NB476开发板为硬件平台,结合华为Liteos操作系统,实现环境参数的采集,并使用NB网络进行数据上报。


前置条件  

    NB476开发板:购买通道1  购买通道2

    Keil&STM32CubeMX开发工具:下载链接 密码:7cws

    OceanConnect账号:选择“OceanConnect”环境,单击“预约”按钮,进行试用申请


步骤

    1.下载一份已经针对NB476开发板移植好的Liteos操作系统

          注:完整例程源码见文末附件1

        注:云端配置文件见文末附件2

        如果是要自己给自己的开发板移植Liteos,可参考如下官方移植教程

          Liteos移植教程


    2.初始化要用到的引脚,注册要用到的中断

        在main函数中做如下添加

int main(void)
{
    UINT32 uwRet = LOS_OK;

    //引脚功能初始化
    HardWare_Init();

    uwRet = LOS_KernelInit();
    if (uwRet != LOS_OK)
    {
        return LOS_NOK;
    }
		
		
    //对以下任务中要用到的中断号进行注册
    LOS_HwiCreate(EXTI3_IRQn, 2,0,EXTI3_IRQHandler, NULL);
    LOS_HwiCreate(LPUART1_IRQn, 0, 0, LPUART1_IRQHandler, NULL);
    LOS_HwiCreate(DMA1_Channel1_IRQn, 3,0, DMA1_Channel1_IRQHandler, NULL);
    LOS_HwiCreate(USART2_IRQn, 1, 0, USART2_IRQHandler, NULL);
    
    LOS_Start();
 }

   

    3.创建任务,点亮板载小灯

        在main函数中做如下添加

int main(void)
{
    UINT32 uwRet = LOS_OK;

    //引脚功能初始化
    HardWare_Init();

    uwRet = LOS_KernelInit();
    if (uwRet != LOS_OK)
    {
        return LOS_NOK;
    }
		
		
    //对以下任务中要用到的中断号进行注册
    LOS_HwiCreate(EXTI3_IRQn, 2,0,EXTI3_IRQHandler, NULL);
    LOS_HwiCreate(LPUART1_IRQn, 0, 0, LPUART1_IRQHandler, NULL);
    LOS_HwiCreate(DMA1_Channel1_IRQn, 3,0, DMA1_Channel1_IRQHandler, NULL);
    LOS_HwiCreate(USART2_IRQn, 1, 0, USART2_IRQHandler, NULL);
    
    //小灯闪烁任务
    uwRet = LOS_LEDExampleEntry();
    if (uwRet != LOS_OK)
    {
        return LOS_NOK;
    }
    
    LOS_Start();
}

//小灯闪烁任务  
UINT32 LOS_LEDExampleEntry(void)
{
    UINT32 uwRet;
    TSK_INIT_PARAM_S stTaskInitParam;

    (VOID)memset((void *)(&stTaskInitParam), 0, sizeof(TSK_INIT_PARAM_S));
    stTaskInitParam.pfnTaskEntry = (TSK_ENTRY_FUNC)LOS_LEDExampleTskfunc;//入口函数
    stTaskInitParam.uwStackSize = LOSCFG_BASE_CORE_TSK_IDLE_STACK_SIZE;
    stTaskInitParam.pcName = "LEDDemo";
    stTaskInitParam.usTaskPrio = 10;
    uwRet = LOS_TaskCreate(&g_uwledTaskID, &stTaskInitParam);

    if (uwRet != LOS_OK)
    {
        return LOS_NOK;
    }
    return LOS_OK;
}

//小灯闪烁
VOID LOS_LEDExampleTskfunc(VOID)
{
	while (1)
	{
		LOS_LED_ON();
		LOS_TaskDelay(1000);
		LOS_LED_OFF();
		LOS_TaskDelay(1000);
	}
}


    4.实现以按键中断的方式切换小灯亮灭状态

        在stm32l4xx_it.c中实现GPIO中断回调函数

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)//GPIO中断回调函数
{
    if(GPIO_Pin == SW4_Pin)//按键中断
    {
        LOS_LED_Toggle();//USR_LED状态反转
    }
}


    5.创建任务实现环境温度的采集,并显示在OLED上

        在main函数中做如下添加

int main(void)
{
    UINT32 uwRet = LOS_OK;
    
    ***
    
    //温湿度采集与OLED显示任务
    uwRet = LOS_OLED_DHT11ExampleEntry();
    if (uwRet != LOS_OK)
    {
        return LOS_NOK;
    }
    
    LOS_Start();
}

/*  具体函数实现就不在这里展现了,可见移植完后的附件2 */


    6.创建任务,实现电池电压采集,功耗计算

        在main函数中做如下添加

int main(void)
{
    UINT32 uwRet = LOS_OK;
    
    ***
    
    //AD采样任务
    uwRet = LOS_ADCExampleEntry();
        if (uwRet != LOS_OK)
        {
                return LOS_NOK;
        }
    
        LOS_Start();
}

/*  具体函数实现就不在这里展现了,可见移植完后的附件2 */


    7.创建任务,实现数据上报与命令接收

        在main函数中做如下添加

int main(void)
{
    UINT32 uwRet = LOS_OK;
    
    ***
    
    //NB通信任务
    uwRet = LOS_BC95ExampleEntry();
        if (uwRet != LOS_OK)
        {
                return LOS_NOK;
        }
    
        LOS_Start();
}

/*  具体函数实现就不在这里展现了,可见移植完后的附件2 */



    8.云端配置

        profile

    1.png


        插件

2.png



结果&举例

    1.在开发板上可以看到OLED显示温湿度3.jpg

    

    2.通过调试串口,可以看到AD采样信息

4.png



    3.在云端可以看到上报的采样信息(温度,湿度,电池电量,功耗)




    4.当下发GPS开启命令后,如图,过一会就可以看到上报的GPS坐标


注:要将开发板带到户外才能定位.


源码(因为论坛附件大小要求不能超过20M,所以暂时不能上传,我们会立刻处理,第一时间补传)

附件1

   移植完毕的Liteos


附件2

L476_LITEOS_V2_CIGPlug-in_sign.zip

L476_LITEOS_V2_PLKJ_L476.zip


L476_LITEOS_V2_CIGPlug-in_sign.zip 20.97 KB,下载次数:2

L476_LITEOS_V2_PLKJ_L476.zip 1.2 KB,下载次数:2