开发者学堂课程【基于STM32的端到端物联网全栈开发:LinkKit SDK 接入阿里云物联网平台(3)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/574/detail/7943
LinkKit SDK 接入阿里云物联网平台(3)
目录
一、项目内容简介
二、LinkKit SDK 项目操作示例
一、 例程介绍
1.软件包和项目结构
2.使用 CubeMX 生成系统初始化框架和代码
3.网络通信的管理(网络通信抽象层和 wifi 驱动)
4.使用 Linkkit C-SDK 连接阿里云 IoT 平台
5.例程参数的存储及 Sensor 数据的读取
首先会讲述整个项目的代码结构,项目用到的哪些文件,这些文件分别的作用是什么?
使用 CubeMX 生成系统初始化框架和代码,再在初始工程的基础上继续添加所需的代码,包括 Linkkit C-SDK 等代码都是需要手工加入到工程中,再结合 ST 自己的部分适配文件,将整个数据的网络应用流通。
使用 CubeMX 生成系统初始化框架和代码这部分与第二节区别不大,但是也有新加入的内容,比如中间件的使能和配置,项目例程参数的存储,包括 wifi 热点配置,节点设备三元组,以及传感器数据读取,这里两部分与第二部分内容基本一样。
二、LinkKit SDK 项目操作示例
节点端系统框图:
//NUCLEO-L4R5ZI、X-NUCLEO-IKS01A2-Sensor 扩展板、EXT-AT3080 Wifi扩展板通过 Aruino Uno 接口结合组成
//STM32L4R5ZI 上的GPIO 按钮、LED 灯、STLINK 充当的虚拟串口
//通过 IFUNC 与传感器扩展板通信,读取板上的传感器值
//在该项目例程中,使用到了板上的温湿度传感器,STM32L4R5ZI 通过串口与 wifi 扩展板通信,进行 wifi 配网,发送温湿度数据以及接收云端下发的命令等。
//STM32L4R5ZI 的另外个串口连接到 STLINK,通过它的虚拟串口功能,与 pc 端的串口工具通行。
//NUCLEO-L4R5ZI 板上集成有三个 LED 集成灯,以及一个蓝色的用户按钮。在本项例程中,红灯和绿灯用来指示程序运行的状态,蓝色按钮用来切换程序运行流程,等待用户从串口终端的输入。
IAR 工程及文件结构:
//Drivers 文件夹下包含了 STM32L4R5ZI 的 HAL 驱动以及 Sensor 板上传感器的驱动文件
//Middewares 分组下包含了阿里 Linkkit C-SDK、FreeRTOS、MbedTLS 协议栈三大功能中间件
//WIFI 分组下是 WIFI 模块的驱动
//Application 文件下的 Ali 子分组下的需要适配到 HAL 清单在 STM32L4R5ZI 上的实现。
//Shared 分组下是 flash 操作以及网络适配层,这里的适配文件来自 ST,它上接 mbedtls 协议栈,下接 wifi 驱动。在此文件中出现的是 net 通信层的初始化、连接、发送、接收,在这些抽象出来的 API 中,可以用 wifi 驱动去实现,也可以用其他硬件连接方式去进行实现,比如2G/3G的模块或者以太网驱动等。
项目例程软件架构:
应用程序:
1.用户业务程序
2.FREERTOS 适配层
3.Linkkit 连接适配层
4.MbedTLS 适配层
//FREERTOS 是本项目中新增的,CubeMX 原生就集成了 FREERTOS,在项目配置的时候通过在图形界面勾选,可以把它自动包含到项目中
//mbedTLS 本来也是 CubeMX 原生支持的,但只有在芯片选择是带有以太网 IP 的信号时,中间件里才会有 MbedTLS 供用户勾选。
中间件:
1.FREERTOS
2.Linkkit C-SDK
3.mbedTLS
// Linkkit C-SDK 基本实现了第二节里 Paho MQTT 客户端协议栈和 ST 提供的网络通信管理层两个子模块的功能
//mbedtls 协议栈在第三节里仅用到了 TLS 协议栈中建立安全通信的全部功能
底层驱动:
1.STM32L4 Cube HAL 硬件抽象层
2.传感器驱动
3.WIFI 模块驱动
// STM32L4 Cube HAL 硬件抽象层和传感器驱动都可以在 CubeMX 中,通过在图形界面上的勾选来自动把相关代码包含进自动生成的初始工具里。
//此例程芯片选择的是 STM32L4R5ZI,没有以太网 IP,因此中间件中没有 MbedTLS 供用户选择,需要在初始化 I2工程设置之后,从固件包中的 Middewares 目录下,手工拷贝到目标工程目录下,再手动添加到 I2工程中
//Linkkit C-SDK 目前还没有以插件形式集群到 CubeMX 中,因此也需要自己下载后添加到目标工程里。
MCU 外设的使用:
与 WIFI 扩展板的接口定义:
1. (1)NCULEO 板接口编号:CN10
(2)引脚编号:14
(3)引脚名:D1
(4)STM32引脚:PD8
(5)外设配置:USART3_TX
2. (1)NCULEO 板接口编号:CN10
(2)引脚编号:16
(3)引脚名:D0
(4)STM32引脚:PD9:
(5)外设配置:USART3_RX
与传感器扩展板的接口定义:
1.(1)NCULEO接口编号:CN7
(2)引脚编号:2
(3)引脚名:D15
(4)STM32引脚:PB8
(5)外设配置:I2C1_SCL
2.(1)NCULEO板接口编号:CN7
(2)引脚编号:4
(3)引脚名:D14
(4)STM32引脚:PB9:
(5)外设配置:I2C1_SDA
虚拟串口接口定义:
连接到 STLINK USB 虚拟串口:
1.(1)STM32引脚:PG7
(2)外设配置:LPUART1_TX
2.(1)STM32引脚:PG8
(2)外设配置:LPUART1_RX
与USER按键的接口定义:
1.(1)NCULEO 板:蓝色 User 按键
(2)STM32引脚:PC13
(3)外设配置:外部中断,下降沿触发
(4)功能:切换允许流程至等待用户输入 WIFI 配网,三元组等信息
与 LED 灯的接口定义:
1.(1)NCULEO 板:LD1(绿)
(2)STM32引脚:PC7
(3)外设配置:GPIO 输出
(4)功能:每次上传温湿度信息时,闪烁一次
2.(1)NCULEO板:LD3(红)
(2)STM32引脚:PB14
(3)外设配置:GPIO 输出
(4)功能:高温报警提醒
片上外设:
1.(1)NCULEO 板:N.A
(2)STM32引脚:N.A
(3)STM32外设配置:Sysick
(4)功能:FreeRTOS 系统滴答
2.(1)NCULEO 板:N.A
(2)STM32引脚:N.A
(3)STM32外设配置:RNG
(4)功能:产生真随机数
使用 CubeMX 初始化系统:
步骤一:选择 MCU 型号
步骤二:1.引脚外设配置(UART/12C/EXT)
2.时钟配置
3.插件配置
4.FREERTOS 配置
步骤三:生成初始工程
使用 CubeMX 初始化系统:步骤一
MCU 型号:STM32L4R5ZITx
1. 使用 MCU 选项工具
2. 输入型号:STM32L4R5ZI
3. 双击打开项目
引脚和配置:
1.外设使能和配置
2.外设在引脚上的映射
3.中间件的配置
时钟配置:
1. 时钟树参数的智能配置
项目管理:
1.管理初始代码的生成
2.管理初始项目的生成
工具:1.功耗估计
使用 CubeMX 初始化系统:步骤二
将功能落实到实际所用的引脚上:
1. 查找需要配置的引脚:
2. 选择该引脚上的“串口发送”功能:
使能 I2C:与传感器扩展板通信的 I2C1
参数配置:使用默认配置即可
修改引脚定义:
1. 使能 I2C1:
2. 使能并使用默认参数配置:
3. 落实到例程实际所用引脚上:
控制 LED 灯:PC7和PB14配置程:GPIO_Output
控制 USER 按键:
1.PC13配置成:GPIO_EXTI13
2.使能 EXT13外部中断
使能 RNG 硬件模块:
规划 FreeRTOS 的使用:
3个应用任务:
1.Ali_loT_KIT
2.LED_CTRL
3.Sensor_CTRL
5个同步信号量:
1.PublishPropertiesLed
2.PublishAlarmValue
3.PublishAlarmLed
4.RecoverAlarmLed
5.ClearAlarmLed
任务间的同步:
配置 FREERTOS 的堆大小:
配置 FREERTOS:使能 xTaskAbortDelay 函数:
创建任务:任务名/优先级/任务堆栈/任务函数/函数声明
安装 MEMS 传感器驱动(CubeMX 插件)
选择所需要的传感器(HTS221)及驱动
对温湿度传感器驱动进行 BSP 配置:使用 I2C1
时钟配置
1.PLL 源选择:MSI
2.系统时钟:120MHz
1. 选择 MSI 作为PLL输入:
2. 选择 PLL 输入作为系统时钟源,输入目标系统时钟值
生成 IAR 初始工程:
初始 vs.交付:
自动生成 IAR 初始工程文件
用户添加代码:
从初始工程项目开始:
需要用户手动添加文件:
1.阿里云 loT 平台设备端 C-SDK
2.mbedTLS 协议栈
3.Wifi 模块驱动.
1.应用逻辑
1.新增 include 路径
2.新增预编译宏定义