“NBDK-L4:LiteOS NBIOT实验教程”的版本间的差异

来自谷雨文档中心
跳转至: 导航搜索
(创建页面,内容为“12”)
 
 
(未显示同一用户的8个中间版本)
第1行: 第1行:
12
+
 
 +
LiteOS 是Huawei推出的面向物联网领域轻量级实时操作系统,是华为IOT的一部分。LiteOS基础内核是最精简的Huawei LiteOS操作系统代码,包括任务管理、内存管理、时间管理、通信机制、中断管理、队列管理、事件管理、定时器等操作系统基础组件。
 +
 
 +
下面将以NBDK-L4为硬件平台,以LiteOS为系统软件,实现NB-IOT相关功能。包括附着网络,数据通信等。NB-IOT模组是谷雨NB101。NB101的详细说明可以查阅谷雨文档中心NB-IOT资料汇总。
 +
 
 +
{| class="wikitable"
 +
|+NBIOT实验简介
 +
!实验名称
 +
|内容简介
 +
!功能
 +
|-
 +
|实验01-NB_AttachNetwork
 +
|NB101附着基站网络
 +
|LiteOS下的串口收发操作,状态指示PWM输出
 +
|-
 +
|
 +
|
 +
|
 +
|-
 +
|
 +
|
 +
|
 +
|}
 +
 
 +
== 工程目录简介 ==
 +
大家打开任意一个基础例程,都会看到如下的4个目录(Drivers、Inc、MDK-ARM、Src)及clean.bat文件。
 +
 
 +
其中'''<big>clean.bat</big>'''是用于清除工程编译生成的中间文件。例如我们想拷贝一个编译过的工程,工程有200M左右大小,我们点击clean.bat清除一下编译生成的中间文件,则工程大概会缩小到100M左右,此时工程只剩下了库文件、用户文件,以及编译生成的hex文件。
 +
[[文件:NBDK-TAB-MPath.png|边框|居中|无框|752x752像素]]
 +
 
 +
从上图可以看到,四个主目录下分别包含的一些文件,这边给大家简单的介绍一下这边文件大概的功能。
 +
 
 +
'''<big>Drivers:</big>'''
 +
 
 +
STM32驱动文件目录,也就是大家常说的hal库,里面包含了hal(硬件抽象层)相关的文件。
 +
 
 +
主要就是有RCC时钟、Flash内存,以及大家常用的外设(例如uart、spi、adc等等)的一些库文件。
 +
 
 +
'''<big>Inc:</big>'''
 +
 
 +
用户.h头文件,用户文件的头文件一般都放到这边,也可自己另存其他位置,但是需要在keil中添加头文件所在的路径。
 +
 
 +
添加新路径的方式如下图所示,可以看到../Inc这个路径已经事先添加进去了。
 +
[[文件:NBDK-KEIL-C++.png|居中|无框|640x640像素]]
 +
[[文件:NBDK-KEIL-Paths.png|居中|无框|516x516像素]]
 +
 
 +
'''<big>MDK-ARM:</big>'''
 +
 
 +
工程目录,主要是两个工程文件“.uvoptx”以及".uvprojx"(keil打开的是这个)。剩下的文件比较重要的是Output目录下编译生成的“.hex”文件。
 +
 
 +
'''<big>Src:</big>'''
 +
 
 +
用户.c文件,用户自己开发的一些驱动文件(外设驱动等等),以及main文件所在的目录。
 +
 
 +
=== 常用文件简介[编辑 | 编辑源代码] ===
 +
针对试验工程中的常见文件,我们以开发者的方式来给大家做一个简单的介绍。具体每个文件中的源码的详细说明,大家可以参照每个试验下的源码详解。
 +
{| class="wikitable"
 +
|+常见文件简介列表
 +
!文件名
 +
!说明
 +
|-
 +
|stm32l4xx_hal_conf.h
 +
|路径位于Inc目录下,里面主要是一些宏定义,用于选择本工程所使用的库文件。这边选择的库文件,就是目录简介中提到的HAL库。
 +
|-
 +
|main.c:
 +
|main()所在的文件,keil中我们配置了run to main(),也就是说工程从main()函数开始执行,所以main.c就是我们工程的主文件。[[文件:NBDK-KEIL-RunToMain.png|居中|无框|640x640像素]]
 +
|-
 +
|stm32l4xx_hal_msp.c
 +
|msp(main stack pointer)主栈堆指针初始化的文件。我们重定义外设引脚选择的时候,STM32Cube生成的硬件引脚重定义函数默认也位于此文件下,但是为了方便,我们一般将其复制到各自的驱动文件下。
 +
|-
 +
|stm32l4xx_it.c
 +
|中断配置文件,用于存放工程的中断。STM32Cube生成的中断函数默认位于此文件下,同样为了方便起见,我们一般将各自的中断函数放到各自的驱动文件下。
 +
|-
 +
|gyu_util.c
 +
|从STM32Cube生成的main文件中独立出来的部分。主要用于处理工程的时钟选择,包含系统时钟、总线时钟以及外设时钟。
 +
|-
 +
|stm32l4xx_hal_xx
 +
|HAL库文件。
 +
|-
 +
|gyu_xx
 +
|由谷雨物联编写的文件,大部分是外设的驱动文件。
 +
|}
 +
 
 +
== 实验01-NB_AttachNetwork(附着网络) ==
 +
在01实验中,只进行NB附着网络操作。在NB附着网络成功后,在显示屏上打印信号的RSSI值及设备分配的IP地址。NBDK-L4与NB模块是通过串口进行通信。NBDK-L4通过串口进行AT指令发送与接收。NB模块与NBDK-L4硬件连接如下图所示。
 +
[[文件:NB101 HARD INFO.png|居中|缩略图|840x840像素]]
 +
其中NB_TX与NB_RX是NB模块的串口通信口;NB_EN是控制NB模块上的电源,高电平有效;NB_RST则是复位功能,低电平有效。NB_NET与NB_RI暂未使用(核心模组不支持)。其中SW2是一个单刀双掷开关,用于切换NB模块串口与MCU相连或USB串口相连。这样设计方便开发者对NB模块进行操作。如果NB模块串口直连USB串口,则可以使用谷雨提供的NB Tool对NB模块进行测试,详细说明查看NB Tool说明手册。
 +
 
 +
=== 实验准备 ===
 +
# 使用miniUSB线及10pin排线,通过Jlink仿真器连接PC端和开发板。
 +
# 使用miniUSB线,连接PC与开发板USB接口。
 +
# 将SW1拨到USB端,SW2拨到MCU。
 +
# 使用Keil打开NB_AttachNetwork。
 +
# 根据所用显示屏,开启相应宏定义
 +
# 编译,下载程序
 +
 
 +
=== 实验验证 ===
 +
下载程序之后,NBDK-L4通过串口操作NB模块,并在显示屏上显示"'''LiteOS.\r\nNB_AttachNetwork.\r\n'''"。如果程序没有运行,开发者可以复位NBDK-L4。此时NBDK-L4的LED灯,以1秒为周期,占空比为50进行闪烁。
 +
 
 +
打开串口助手,选择与NBDK-L4相连串口,并配置串口参数为'''115200,8,N,1'''。会显示NBDK-L4与NB模块AT指令日志。如下图所示。
 +
[[文件:NB101 COM LOG.png|居中|无框|634x634像素]]
 +
NB模块附着网络后,会在屏幕上打印信号强度及分配的IP地址。同时LED以2秒为周期,占空比为5进行周期性闪烁。
 +
 
 +
=== 源码详解 ===
 +
本节中的源码说明,仅针对此例程中的重要功能,详细的源码介绍请参照代码后的注释。
 +
 
 +
==== stm32l4xx_hal_conf.h ====
 +
此文件位于“工程名\Src\User”路径中,主要用途是选择使能此例程使用到的库文件。
 +
 
 +
此例程我们主要给大家展示STM32L4的UART,SPI,GPIO,TIM等功能,所以我们宏定义中打开相关的宏。<syntaxhighlight lang="c" line="1" start="103">
 +
// 使能的宏
 +
#define HAL_MODULE_ENABLED          // 芯片
 +
#define HAL_FLASH_MODULE_ENABLED    // Flash
 +
#define HAL_PWR_MODULE_ENABLED      // 电源
 +
#define HAL_RCC_MODULE_ENABLED      // 时钟
 +
#define HAL_CORTEX_MODULE_ENABLED  // NVIC
 +
 
 +
#define HAL_GPIO_MODULE_ENABLED    // GPIO
 +
#define HAL_DMA_MODULE_ENABLED      // DMA
 +
#define HAL_SPI_MODULE_ENABLED      // SPI
 +
#define HAL_UART_MODULE_ENABLED    // USART
 +
#define HAL_TIM_MODULE_ENABLED      // TIM
 +
</syntaxhighlight>
 +
 
 +
==== main.c ====
 +
main函数,我们的例程由此处开始执行,首先调用HAL_Init()函数初始化我们的模块,接着调用SystemClock_Config()函数初始化此例程用到的时钟,具体有哪些时钟被初始化,在gyu_util.c部分有详细说明。
 +
 
 +
接下来我们初始化LiteOS内核。
 +
 
 +
接着使能LiteOS心跳定时器。
 +
 
 +
接着初始化工程中使用的外设。
 +
 
 +
创建起始LiteOS任务。
 +
 
 +
完成以上工作后,启动LiteOS,进行任务调度。<syntaxhighlight lang="c" line="1" start="57">
 +
int main(void)
 +
{
 +
  UINT32 uwRet;
 +
 
 +
  // 初始化硬件
 +
  HAL_Init();
 +
  SystemClock_Config();
 +
 
 +
  // 初始化LOS内核
 +
  uwRet = LOS_KernelInit();
 +
  if (uwRet != LOS_OK)
 +
  {
 +
    return LOS_NOK;
 +
  }
 +
 
 +
  // 使能LOS系统tick中断
 +
  uwRet = LOS_EnableTick();
 +
  if (uwRet != LOS_OK)
 +
  {
 +
    return LOS_NOK;
 +
  }
 +
 
 +
  // 初始化开发板硬件
 +
  HardWare_Init();
 +
 
 +
  // 初始化用户任务
 +
  LosTask_Init();
 +
 
 +
  // 运行LOS
 +
  (void)LOS_Start();
 +
  for(;;);
 +
}
 +
</syntaxhighlight>
 +
 
 +
==== los_nbxx_entry.c ====
 +
los_nbxx_entry.c是NB相关操作的RTOS任务文件,其中定义了LiteOS任务函数LOS_NbIot_Tskfunc。在任务函数内部进行屏幕初始化(因显示屏中使用了LiteOS信号量,所以要在任务函数中初始化),并打印相关信息。
 +
 
 +
接着初始化TIM为PWM输出,控制LED闪烁。
 +
 
 +
在主循环内部使用一个简易状态机,根据APP_STATE的状态量,执行不同的NB AT 指令。

2019年4月30日 (二) 17:30的最新版本

LiteOS 是Huawei推出的面向物联网领域轻量级实时操作系统,是华为IOT的一部分。LiteOS基础内核是最精简的Huawei LiteOS操作系统代码,包括任务管理、内存管理、时间管理、通信机制、中断管理、队列管理、事件管理、定时器等操作系统基础组件。

下面将以NBDK-L4为硬件平台,以LiteOS为系统软件,实现NB-IOT相关功能。包括附着网络,数据通信等。NB-IOT模组是谷雨NB101。NB101的详细说明可以查阅谷雨文档中心NB-IOT资料汇总。

NBIOT实验简介
实验名称 内容简介 功能
实验01-NB_AttachNetwork NB101附着基站网络 LiteOS下的串口收发操作,状态指示PWM输出

1 工程目录简介

大家打开任意一个基础例程,都会看到如下的4个目录(Drivers、Inc、MDK-ARM、Src)及clean.bat文件。

其中clean.bat是用于清除工程编译生成的中间文件。例如我们想拷贝一个编译过的工程,工程有200M左右大小,我们点击clean.bat清除一下编译生成的中间文件,则工程大概会缩小到100M左右,此时工程只剩下了库文件、用户文件,以及编译生成的hex文件。

NBDK-TAB-MPath.png

从上图可以看到,四个主目录下分别包含的一些文件,这边给大家简单的介绍一下这边文件大概的功能。

Drivers:

STM32驱动文件目录,也就是大家常说的hal库,里面包含了hal(硬件抽象层)相关的文件。

主要就是有RCC时钟、Flash内存,以及大家常用的外设(例如uart、spi、adc等等)的一些库文件。

Inc:

用户.h头文件,用户文件的头文件一般都放到这边,也可自己另存其他位置,但是需要在keil中添加头文件所在的路径。

添加新路径的方式如下图所示,可以看到../Inc这个路径已经事先添加进去了。

NBDK-KEIL-C++.png
NBDK-KEIL-Paths.png

MDK-ARM:

工程目录,主要是两个工程文件“.uvoptx”以及".uvprojx"(keil打开的是这个)。剩下的文件比较重要的是Output目录下编译生成的“.hex”文件。

Src:

用户.c文件,用户自己开发的一些驱动文件(外设驱动等等),以及main文件所在的目录。

1.1 常用文件简介[编辑 | 编辑源代码]

针对试验工程中的常见文件,我们以开发者的方式来给大家做一个简单的介绍。具体每个文件中的源码的详细说明,大家可以参照每个试验下的源码详解。

常见文件简介列表
文件名 说明
stm32l4xx_hal_conf.h 路径位于Inc目录下,里面主要是一些宏定义,用于选择本工程所使用的库文件。这边选择的库文件,就是目录简介中提到的HAL库。
main.c: main()所在的文件,keil中我们配置了run to main(),也就是说工程从main()函数开始执行,所以main.c就是我们工程的主文件。
NBDK-KEIL-RunToMain.png
stm32l4xx_hal_msp.c msp(main stack pointer)主栈堆指针初始化的文件。我们重定义外设引脚选择的时候,STM32Cube生成的硬件引脚重定义函数默认也位于此文件下,但是为了方便,我们一般将其复制到各自的驱动文件下。
stm32l4xx_it.c 中断配置文件,用于存放工程的中断。STM32Cube生成的中断函数默认位于此文件下,同样为了方便起见,我们一般将各自的中断函数放到各自的驱动文件下。
gyu_util.c 从STM32Cube生成的main文件中独立出来的部分。主要用于处理工程的时钟选择,包含系统时钟、总线时钟以及外设时钟。
stm32l4xx_hal_xx HAL库文件。
gyu_xx 由谷雨物联编写的文件,大部分是外设的驱动文件。

2 实验01-NB_AttachNetwork(附着网络)

在01实验中,只进行NB附着网络操作。在NB附着网络成功后,在显示屏上打印信号的RSSI值及设备分配的IP地址。NBDK-L4与NB模块是通过串口进行通信。NBDK-L4通过串口进行AT指令发送与接收。NB模块与NBDK-L4硬件连接如下图所示。

NB101 HARD INFO.png

其中NB_TX与NB_RX是NB模块的串口通信口;NB_EN是控制NB模块上的电源,高电平有效;NB_RST则是复位功能,低电平有效。NB_NET与NB_RI暂未使用(核心模组不支持)。其中SW2是一个单刀双掷开关,用于切换NB模块串口与MCU相连或USB串口相连。这样设计方便开发者对NB模块进行操作。如果NB模块串口直连USB串口,则可以使用谷雨提供的NB Tool对NB模块进行测试,详细说明查看NB Tool说明手册。

2.1 实验准备

  1. 使用miniUSB线及10pin排线,通过Jlink仿真器连接PC端和开发板。
  2. 使用miniUSB线,连接PC与开发板USB接口。
  3. 将SW1拨到USB端,SW2拨到MCU。
  4. 使用Keil打开NB_AttachNetwork。
  5. 根据所用显示屏,开启相应宏定义
  6. 编译,下载程序

2.2 实验验证

下载程序之后,NBDK-L4通过串口操作NB模块,并在显示屏上显示"LiteOS.\r\nNB_AttachNetwork.\r\n"。如果程序没有运行,开发者可以复位NBDK-L4。此时NBDK-L4的LED灯,以1秒为周期,占空比为50进行闪烁。

打开串口助手,选择与NBDK-L4相连串口,并配置串口参数为115200,8,N,1。会显示NBDK-L4与NB模块AT指令日志。如下图所示。

NB101 COM LOG.png

NB模块附着网络后,会在屏幕上打印信号强度及分配的IP地址。同时LED以2秒为周期,占空比为5进行周期性闪烁。

2.3 源码详解

本节中的源码说明,仅针对此例程中的重要功能,详细的源码介绍请参照代码后的注释。

2.3.1 stm32l4xx_hal_conf.h

此文件位于“工程名\Src\User”路径中,主要用途是选择使能此例程使用到的库文件。

此例程我们主要给大家展示STM32L4的UART,SPI,GPIO,TIM等功能,所以我们宏定义中打开相关的宏。

103 // 使能的宏
104 #define HAL_MODULE_ENABLED          // 芯片
105 #define HAL_FLASH_MODULE_ENABLED    // Flash
106 #define HAL_PWR_MODULE_ENABLED      // 电源
107 #define HAL_RCC_MODULE_ENABLED      // 时钟
108 #define HAL_CORTEX_MODULE_ENABLED   // NVIC
109 
110 #define HAL_GPIO_MODULE_ENABLED     // GPIO
111 #define HAL_DMA_MODULE_ENABLED      // DMA
112 #define HAL_SPI_MODULE_ENABLED      // SPI
113 #define HAL_UART_MODULE_ENABLED     // USART
114 #define HAL_TIM_MODULE_ENABLED      // TIM

2.3.2 main.c

main函数,我们的例程由此处开始执行,首先调用HAL_Init()函数初始化我们的模块,接着调用SystemClock_Config()函数初始化此例程用到的时钟,具体有哪些时钟被初始化,在gyu_util.c部分有详细说明。

接下来我们初始化LiteOS内核。

接着使能LiteOS心跳定时器。

接着初始化工程中使用的外设。

创建起始LiteOS任务。

完成以上工作后,启动LiteOS,进行任务调度。

57 int main(void)
58 {
59   UINT32 uwRet;
60   
61   // 初始化硬件
62   HAL_Init();
63   SystemClock_Config();
64   
65   // 初始化LOS内核
66   uwRet = LOS_KernelInit();
67   if (uwRet != LOS_OK) 
68   {
69     return LOS_NOK;
70   }
71   
72   // 使能LOS系统tick中断
73   uwRet = LOS_EnableTick();
74   if (uwRet != LOS_OK)
75   {
76     return LOS_NOK;
77   }
78   
79   // 初始化开发板硬件
80   HardWare_Init();
81   
82   // 初始化用户任务
83   LosTask_Init();
84   
85   // 运行LOS
86   (void)LOS_Start();
87   for(;;);
88 }

2.3.3 los_nbxx_entry.c

los_nbxx_entry.c是NB相关操作的RTOS任务文件,其中定义了LiteOS任务函数LOS_NbIot_Tskfunc。在任务函数内部进行屏幕初始化(因显示屏中使用了LiteOS信号量,所以要在任务函数中初始化),并打印相关信息。

接着初始化TIM为PWM输出,控制LED闪烁。

在主循环内部使用一个简易状态机,根据APP_STATE的状态量,执行不同的NB AT 指令。

本PDF由谷雨文档中心自动生成,点击下方链接阅读最新内容。

取自“http://doc.iotxx.com/index.php?title=NBDK-L4:LiteOS_NBIOT实验教程&oldid=1707