增加BDW01-STM32L496VG开发板
120
board/BDW01-STM32L496VG/doc/1. 开发板BDW01入门介绍.md
Normal file
@@ -0,0 +1,120 @@
|
||||
# 开发板BDW01入门介绍
|
||||
---
|
||||
## 1. 开发板特性
|
||||
BDW01物联网开发板的板载资源如下:
|
||||

|
||||
|
||||
主控芯片采用STM32L4VGTx,Flash空间大小1MB,SRAM空间大小320KB;
|
||||
|
||||
- 板载中移物联NB-IOT模组M5313;
|
||||
- 板载中科微北斗定位模组ATGM336H;
|
||||
- 板载环境光检测传感器TMD27713;
|
||||
- 板载压力传感器BMP280;
|
||||
- 板载温湿度传感器SHT3X;
|
||||
- 板载3D加速度陀螺仪传感器LSM6DSL;
|
||||
- 板载磁力计传感器MMC3680KJ;
|
||||
- 板载E43接口可扩展其他无线通信模块;
|
||||
- 板载E32接口可扩展其他定位模块;
|
||||
- 板载E53传感器标准接口,方便连接各种E53传感器;
|
||||
- 板载0.91'OLED显示屏幕;
|
||||
- 板载新塘语离线音识别模块ISD9160;
|
||||
- 板载TF卡卡座,方便扩展存储空间;
|
||||
- 板载MINI PCIE接口,方便连接4G通信模块;
|
||||
- 板载18650锂电池插座,方便移动时正常供电;
|
||||
- 板载CH340转串口连接,可以使用一根USB线连接至电脑,查看串口日志;
|
||||
|
||||
关于开发板硬件电路的更多信息和详解,请查看文档BDW01主板规格书和文档物联网开发板原理图。
|
||||
|
||||
## 2. 开发板硬件准备
|
||||
### 2.1 连接LOG USB线
|
||||

|
||||
### 2.2 连接ST-Link烧录器
|
||||
对照烧录器引脚图和开发板原理图,找到开发板上的网络标号SW11,连接如下:
|
||||
**注意电源正负极不要接反接错,避免烧掉MCU和烧录器。**
|
||||

|
||||
|
||||
- 开发板VCC(3v3) ---> STlink 3.3V
|
||||
- 开发板ST_SWDIO ---> STlink SWDIO
|
||||
- 开发板ST_SWCLK ---> STlink SWCLK
|
||||
- 开发板GND ---> STlink GND
|
||||
|
||||
## 3. 开发软件的环境准备
|
||||
### 3.1 软件开发工具的下载安装
|
||||
我们使用的软件开发工具是Keil公司的MDK(Microcontroller Development kit),MDK官网下载地址:[http://www2.keil.com/mdk5](http://www2.keil.com/mdk5)
|
||||
|
||||
下载的版本最好在5.24或5.24以上,本次介绍以5.25版本为例,双击MDK524应用程序文件,接着点击next>>。
|
||||
|
||||

|
||||
|
||||
在I agree前面的小方框打勾,表示同意该安装协议,再点击next>>。
|
||||
|
||||

|
||||
|
||||
选择安装路径,默认情况下会安装在系统盘C盘,建议在其他盘建立单独的文件夹,并选择安装到该文件夹下。点击next>>。
|
||||
|
||||

|
||||
|
||||
填上我们的信息后,继续next>>。
|
||||
|
||||

|
||||
|
||||
然后等待安装完成后点击Finish,接着会跳出器件支持包安装界面,点OK再把弹框都叉掉,后续再介绍。最后要激活MDK,导入License,激活MDK后就可以使用了。
|
||||
|
||||

|
||||
|
||||
特别提示:一定要输入License激活MDK软件,建议购买正版License。
|
||||
|
||||
### 3.2 安装器件支持包
|
||||
MDK V4版本安装包里集成了器件的支持包,而MDK V5版本是独立出来的,可以自己下载安装。安装完开发工具MDK V5后,我们需要安装开发板主芯片型号对应的芯片器件支持包。
|
||||
#### 3.2.1 安装方式一
|
||||
登录官网:[http://www.keil.com/dd2/pack/](http://www.keil.com/dd2/pack/)
|
||||
下载Keil.STM32L4xx_DFP.x.x.x.pack 完成后,双击打开安装。
|
||||
#### 3.2.2 安装方式二
|
||||
MDK软件上在线安装,一般下载速度会比较慢,更新时间很长,不推荐。
|
||||
打开软件,在导航栏打开Pack安装界面,弹出包安装提示点击ok选项。
|
||||

|
||||
进入在线安装界面,选择STM32L4XX Pack,点击Install进行安装。
|
||||

|
||||
|
||||
### 3.3 CH340串口驱动安装
|
||||
BDW01开发板板载USB转串口芯片,所以使用USB线将开发板连接到电脑,就在串口调试助手查看串口输出的LOG信息。使用串口调试助手之前需要下载安装CH340转串口芯片的驱动。直接在网上搜索下载CH340转串口芯片的驱动,下载完成后打开驱动安装程序点击安装即可。
|
||||

|
||||
|
||||
### 3.4 串口调试助手的安装与使用
|
||||
工具下载网址:[http://www.daxia.com/download/sscom.rar](http://www.daxia.com/download/sscom.rar)
|
||||
下载完成后,解压,双击打开串口调试助手执行程序,直接使用。
|
||||

|
||||
使用USB线一端接开发板LOG USB串口,另一端连接到电脑,前面安装完CH340转串口芯片的驱动,打开电脑的设备管理器,就可以在端口列表查看PC与开发板之间连接端口号,然后在串口调试助手-端口号处,选择PC和开发板之间的连接端口(我这里显示的是COM15,所以要在串口调试助手中选择COM15)。
|
||||

|
||||
再根据开发板串口波特率设置串口调试助手-波特率,开发板程序波特率设置为115200,所以在串口调试助手中选择115200波特率。最后打开串口就可以使用了。
|
||||
|
||||
### 3.5 ST-Link驱动的下载与安装
|
||||
前面2.2介绍过开发板与ST-Link烧录器的接线方式,在使用烧录器将程序烧录到开发板之前,需要安装烧录器的驱动。
|
||||
在ST官网下载ST-Link驱动STSW-LINK009,下载网址:
|
||||
[https://www.st.com/content/st_com/zh/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-utilities/stsw-link009.html](https://www.st.com/content/st_com/zh/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-utilities/stsw-link009.html)
|
||||
|
||||
再根据电脑系统安装驱动,32位电脑系统安装dpinst_x86.exe,64位电脑系统安装dpinst_amd64.exe 。
|
||||

|
||||
|
||||
运行对应的驱动执行程序,开始安装ST-Link V2驱动,最后点击完成。
|
||||

|
||||
|
||||
安装完成后, 将开发板电源打开,将连着开发板的烧录器通过USB接口连至电脑。
|
||||
|
||||
打开电脑上的设备管理器。若可以看到通用串行总线设备-STM32 STLink,表示驱动安装成功,如下图所示。
|
||||

|
||||
|
||||
## 4. 开发与调试
|
||||
前面的软硬件工作准备好之后,接下来就可以进行开发与调试了。示例工程hello_world的主要功能是创建两个任务,两个任务循环输出打印 。
|
||||
路径:TencentOS-tiny\board\BDW01-STM32L496VG\KEIL\hello_world。
|
||||
|
||||
打开示例工程hello_world,进入到MDK keil5主窗口界面:
|
||||

|
||||
点击 Build Target 编译工程目标:
|
||||

|
||||
编译完成后,查看消息窗口:0 Error(s),表示代码没有语法错误。
|
||||

|
||||
LOG USB线和烧录器ST-Link/v2都连接到电脑,串口调试助手也配置好并打开。
|
||||
点击 Download 下载程序到开发板。
|
||||
下载完成后,在开发板上按下复位按钮,查看串口调试助手上接收数据的显示。
|
||||

|
32
board/BDW01-STM32L496VG/doc/2.TCP Socket 通讯测试.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# TCP Socket 通讯测试
|
||||
---
|
||||
本示例会启动两个线程,建立两个TCP链接,分别发送数据
|
||||
M5313可同时支持4个链接,不过在代码默认定义的是3个,有需要可以修改为4个或根据自己需要进行修改。
|
||||
|
||||
路径:TencentOS-tiny\net\at\include\tos_at.h
|
||||

|
||||
|
||||
## 1. 搭建TCP服务器
|
||||
M5313 使用2G网络,本地PC使用的是局域网,这里做了一个服务器的内网穿透,然后百度ip查看服务器的外网IP。
|
||||
这里使用SocketTool建立TCP server。
|
||||
|
||||
## 2. 运行工程
|
||||
使用 Keil-MDK 打开 tcp_through_module工程:
|
||||
路径:TencentOS-tiny\board\BDW01-STM32L496VG\KEIL\tcp_through_module
|
||||

|
||||
|
||||
打开2g模块M5313的串口接收:
|
||||

|
||||
|
||||
打开tcp_through_module.c文件,根据自己的TCP服务器地址,修改配置:
|
||||

|
||||
|
||||
修改完成后,点击编译按钮编译,编译成功之后烧录到开发板(默认使用ST-Link下载器)。
|
||||
|
||||
烧录之后按下开发板上的复位按钮,程序开始运行,在串口助手查看日志:
|
||||

|
||||
|
||||
在TCP服务器上可查看收到的数据
|
||||

|
||||
|
||||

|
328
board/BDW01-STM32L496VG/doc/3.对接腾讯云与腾讯连连-测试.md
Normal file
@@ -0,0 +1,328 @@
|
||||
# 对接腾讯云与腾讯连连-测试
|
||||
|
||||
----------
|
||||
本示例示范如何对接到腾讯云物联网开发平台IoT Explore和腾讯连连小程序
|
||||
## 1.云端操作步骤
|
||||
登录[腾讯云物联网开发平台(IoT Explorer)](https://cloud.tencent.com/product/iotexplorer "腾讯云物联网开发平台(IoT Explorer)"),点击“立即使用”进入控制台,个人开发可以使用微信进行登录。
|
||||
|
||||
### 1.1 新建项目
|
||||
项目是为了用户面对不同的产品迭代或不同的项目角色而设计的一种隔离机制,便于用户清晰管理物联网项目,并能灵活地配置项目权限。
|
||||
|
||||
1. 项目下可以建立多个产品与应用,应用默认有权限访问该项目下的所有产品;
|
||||
2. 每个项目会有自己的唯一 ID,数据会根据项目进行隔离,以确保数据安全;
|
||||
3. 项目删除后,该项目所属产品等数据都将被删除且不能恢复;
|
||||
4. 开发平台提供资源级的权限控制,可为不同的子用户分配项目级、产品级的权限控制;
|
||||
|
||||
点击新建项目,填写项目名称和简介:
|
||||

|
||||
|
||||
### 1.2. 产品开发
|
||||
#### 1.2.1 新建产品
|
||||
点击项目名称进入到该项目中,点击新建产品:
|
||||

|
||||
填写产品的一些信息:
|
||||
1. 产品名称:名称为中文、字母、数字、下划线的组合,1 - 20位且不能为空。
|
||||
2. 产品品类:选择您所创建产品的所属品类,不同类型产品的属性、事件等数据模板会有所不同。详情请参见 数据模板。
|
||||
3. 设备类型:设备使用2G/3G/4G/Wi-Fi无线通信或有线通信方式,网关可提供云端通信能力,帮助设备与平台通信。
|
||||
4. 认证方式:物联网开发平台提供两种认证方式用于设备与平台之间鉴权认证。
|
||||
证书认证:在创建设备时,平台将为设备生成一个证书文件和一个私钥文件,实现设备与云之间的双向认证。
|
||||
密钥认证:在创建设备时,使用平台为设备随机生成的 PSK。
|
||||
5. 通信方式:您可以选择 Wi-Fi、移动蜂窝(2G/3G/4G)和其他通信方式。
|
||||
6. 数据协议:默认采用数据模板的数据协议,您也可以自定义协议进行透传。
|
||||
7. 描述:字数不能超过80个,您可以根据需要选填。
|
||||

|
||||
产品新建成功后,可在产品列表页查看到“智能灯”。
|
||||

|
||||
|
||||
#### 1.2.2 数据模版
|
||||
数据模板是将物理实体设备进行数字化描述,构建其数字模型。在物联网开发平台定义数据模板即定义产品功能。完成功能定义后,系统将自动生成该产品的数据模板。
|
||||
|
||||
点击智能灯产品进入。
|
||||
|
||||
##### 1.2.2.1
|
||||
选择“智能灯”类型后,系统会自动生成标准功能:
|
||||

|
||||
#### 1.2.2.2
|
||||
下方的新建功能,可以增加新的功能,定义如下:
|
||||

|
||||
功能类型包含三元素:
|
||||
1. 属性:包括布尔型、整数型、字符型、浮点型、枚举型和时间型等6种基本数据类型;
|
||||
2. 事件:包括告警、故障和信息三种类型,事件型功能属性可以添加具体的事件参数,这些参数可以由属性中6种基本数据类型组成;
|
||||
3. 行为:用于实现更复杂的业务逻辑,可包含输入参数和输出参数,可用于让设备执行某项特定的任务。行为的输入参数和输出参数可添加上述6种属性的基本数据类型。
|
||||
|
||||
| 功能元素 | 功能描述 | 功能标识符 |
|
||||
| -------- | --------- | ----------- |
|
||||
| 属性 | 用于描述设备的实时状态,支持读取和设置,如模式、亮度、开关等。 | PropertiesId |
|
||||
| 事件 | 用于描述设备运行时的事件,包括告警、信息和故障等三种事件类型,可添加多个输出参数,如环境传感器检测到空气质量很差,空调异常 | EventId |
|
||||
| 行为 | 用于描述复杂的业务逻辑,可添加多个调用参数和返回参数,用于让设备执行某项定特定的任务,例如,开锁动作需要知道是哪个用户在什么时间开锁,锁的状态如何等。 | ActionId |
|
||||
|
||||
数据类型支持6种:
|
||||
1.布尔型:非真即假的二值型变量。例如,开关功能。
|
||||
2.整数型:可用于线性调节的整数变量。例如,空调的温度。
|
||||
3.字符型:以字符串形式表达的功能点,例如,灯的位置。
|
||||
4.浮点型:精度为浮点型的功能点。例如,压力值的范围:0.0 - 24.0。
|
||||
5.枚举型:自定义的有限集合值。例如,灯的颜色:白色、红色、黄色等。
|
||||
6.时间型:string 类型的 UTC 时间戳(毫秒)。
|
||||
|
||||
#### 1.2.3
|
||||
数据模板是一个 JSON 格式的文件,使用数据模板协议,用户的设备需按数据模板定义要求传输设备数据到云端,并可使用基于数据模板的诸多业务功能,点击查看json可以看到上面创建功能的json格式:
|
||||

|
||||
|
||||
```c
|
||||
{
|
||||
"version": "1.0",
|
||||
"properties": [
|
||||
{
|
||||
"id": "power_switch",
|
||||
"name": "电灯开关",
|
||||
"desc": "控制电灯开灭",
|
||||
"required": true,
|
||||
"mode": "rw",
|
||||
"define": {
|
||||
"type": "bool",
|
||||
"mapping": {
|
||||
"0": "关",
|
||||
"1": "开"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "color",
|
||||
"name": "颜色",
|
||||
"desc": "灯光颜色",
|
||||
"mode": "rw",
|
||||
"define": {
|
||||
"type": "enum",
|
||||
"mapping": {
|
||||
"0": "Red",
|
||||
"1": "Green",
|
||||
"2": "Blue"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "brightness",
|
||||
"name": "亮度",
|
||||
"desc": "灯光亮度",
|
||||
"mode": "rw",
|
||||
"define": {
|
||||
"type": "int",
|
||||
"unit": "%",
|
||||
"step": "1",
|
||||
"min": "0",
|
||||
"max": "100",
|
||||
"start": "1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "name",
|
||||
"name": "灯位置名称",
|
||||
"desc": "灯位置名称:书房、客厅等",
|
||||
"mode": "rw",
|
||||
"required": false,
|
||||
"define": {
|
||||
"type": "string",
|
||||
"min": "0",
|
||||
"max": "64"
|
||||
}
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"id": "status_report",
|
||||
"name": "DeviceStatus",
|
||||
"desc": "Report the device status",
|
||||
"type": "info",
|
||||
"required": false,
|
||||
"params": [
|
||||
{
|
||||
"id": "status",
|
||||
"name": "running_state",
|
||||
"desc": "Report current device running state",
|
||||
"define": {
|
||||
"type": "bool",
|
||||
"mapping": {
|
||||
"0": "normal",
|
||||
"1": "fault"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "message",
|
||||
"name": "Message",
|
||||
"desc": "Some extra message",
|
||||
"define": {
|
||||
"type": "string",
|
||||
"min": "0",
|
||||
"max": "64"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "low_voltage",
|
||||
"name": "LowVoltage",
|
||||
"desc": "Alert for device voltage is low",
|
||||
"type": "alert",
|
||||
"required": false,
|
||||
"params": [
|
||||
{
|
||||
"id": "voltage",
|
||||
"name": "Voltage",
|
||||
"desc": "Current voltage",
|
||||
"define": {
|
||||
"type": "float",
|
||||
"unit": "V",
|
||||
"step": "1",
|
||||
"min": "0.0",
|
||||
"max": "24.0",
|
||||
"start": "1"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "hardware_fault",
|
||||
"name": "Hardware_fault",
|
||||
"desc": "Report hardware fault",
|
||||
"type": "fault",
|
||||
"required": false,
|
||||
"params": [
|
||||
{
|
||||
"id": "name",
|
||||
"name": "Name",
|
||||
"desc": "Name like: memory,tf card, censors ...",
|
||||
"define": {
|
||||
"type": "string",
|
||||
"min": "0",
|
||||
"max": "64"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "error_code",
|
||||
"name": "Error_Code",
|
||||
"desc": "Error code for fault",
|
||||
"define": {
|
||||
"type": "int",
|
||||
"unit": "",
|
||||
"step": "1",
|
||||
"min": "0",
|
||||
"max": "2000",
|
||||
"start": "1"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"actions": [],
|
||||
"profile": {
|
||||
"ProductId": "S7271EG5D8",
|
||||
"CategoryId": "3"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
### 1.3. 创建测试设备
|
||||
在【设备调试】页面中,单击【新建设备】,设备名为 bdw01_led:
|
||||

|
||||
|
||||
## 2. 设备侧操作
|
||||
使用 Keil-MDK 打开 mqttclient_iot_explorer 工程:
|
||||
TencentOS-tiny\board\BDW01-STM32L496VG\KEIL\mqttclient_iot_explorer
|
||||

|
||||
|
||||
### 2.1 配置使用的网络设备
|
||||
打开mqttclient_iot_explorer.c文件,修改配置。
|
||||
修改本工程所使用的通信模组,打开USE_M5313,如图:
|
||||

|
||||
|
||||
#### 2.1.1 修改MQTT对接参数
|
||||
在腾讯云物联网开发平台可以看到一些产品ID、设备ID、设备秘钥三个参数,如图:
|
||||

|
||||
|
||||
接下来进入TencentOS-tiny仓库中的tools目录,使用python运行脚本mqtt_config_gen.py,按照提示输出刚刚在平台查询到的三个参数,脚本会自动生成mqtt配置参数:
|
||||

|
||||
① 输入产品ID;
|
||||
② 输入设备名称;
|
||||
③ 输入设备秘钥;
|
||||
④ ⑤ 保持默认,直接回车;
|
||||
⑥ 需要的生成信息。
|
||||
接下来在代码中修改配置信息:
|
||||

|
||||
|
||||
#### 2.1.2 修改mqtt对接topic
|
||||
设备向云端上报数据的topic如下:
|
||||
上行请求 Topic: $thing/up/property/{ProductID}/{DeviceName}
|
||||
上行响应 Topic: $thing/down/property/{ProductID}/{DeviceName}
|
||||
这两个topic咋玩呢?
|
||||
首先订阅上行响应topic,接着向上行请求topic上报数据,上报数据时平台不仅规定了topic,还规定了数据内容,如下:
|
||||
```c
|
||||
{
|
||||
"method":"report",
|
||||
"clientToken":"clientToken-145023f5-bc9b-4174-ba3b-430ba5956e5c",
|
||||
"params":
|
||||
{
|
||||
"brightness":55,
|
||||
"name":"bedroom",
|
||||
"power_switch":1,
|
||||
"color":2
|
||||
}
|
||||
}
|
||||
```
|
||||
其中每一项的意义如下:
|
||||
| 参数 | 类型 | 说明 |
|
||||
| -------- | --------- | ----------- |
|
||||
| method | String | report 表示设备属性上报 |
|
||||
| clientToken | String | 用于上下行消息配对标识 |
|
||||
| timestamp | Integer | 属性上报的时间 |
|
||||
| params | JSON | JSON 结构内为设备上报的属性值 |
|
||||
|
||||
同时,因为订阅了上行响应topic,所以模组会收到云端下发的响应并通过URC模式上报,云端响应报文整理一下格式如下:
|
||||
```c
|
||||
{
|
||||
"method":"report_reply",
|
||||
"clientToken":"clientToken-145023f5-bc9b-4174-ba3b-430ba5956e5c",
|
||||
"code":0,
|
||||
"status":"success"}
|
||||
}
|
||||
```
|
||||
其中每一项也有具体的含义:
|
||||
| 参数 | 类型 | 说明 |
|
||||
| -------- | --------- | ----------- |
|
||||
| method | String | report_reply 表示云端接收设备上报后的响应报文 |
|
||||
| clientToken | String | 用于上下行消息配对标识 |
|
||||
| code | Integer | 0表示云端成功收到设备上报的属性 |
|
||||
| status | String | 当code非0的时候, 提示错误信息 |
|
||||
|
||||
接下来修改代码,首先**根据自己的产品ID和设备ID修改上报topic**:
|
||||

|
||||
然后修改订阅topic:
|
||||

|
||||
|
||||
打开2g模块M5313的串口接收:
|
||||

|
||||
|
||||
#### 2.1.3 编译下载
|
||||
修改完成之后编译工程,下载到开发板中,重新上电开始运行,在串口助手中查看打印日志:
|
||||

|
||||
在云端查看上报日志:
|
||||

|
||||
点击【设备属性】,点击亮度属性一栏的查看,可以查看曲线显示:
|
||||

|
||||
|
||||
## 3. 腾讯连连小程序操作步骤
|
||||
### 3.1 添加家庭
|
||||
手机端在【微信】搜索【腾讯连连】小程序,首次使用需要进入后点击【我的】->【家庭管理】,添加一个你喜欢的名称即可。
|
||||
|
||||
### 3.2 添加设备
|
||||
进入后在中下方点击➕号,开始扫描二维码
|
||||

|
||||

|
||||
在腾讯云物联网开发平台进入【设备调试】,点击对应设备后的【二维码】:
|
||||

|
||||
腾讯连连扫描此二维码即可成功添加设备,添加成功之后如图:
|
||||

|
||||
给设备上电,等一会可以看到设备上线,点击进入可以看到代码上传的亮度数据
|
||||

|
||||
|
159
board/BDW01-STM32L496VG/doc/4.对接腾讯云与腾讯连连-电动车追踪.md
Normal file
@@ -0,0 +1,159 @@
|
||||
# 对接腾讯云与腾讯连连-电动车追踪
|
||||
本示例示范如何对接到腾讯云物联网开发平台IoT Explore和腾讯连连小程序
|
||||
并上传GPS定位和通过腾讯云与腾讯连连控制开发板上的LED。
|
||||
## 1. 云端操作步骤
|
||||
登录[腾讯云物联网开发平台(IoT Explorer)](https://cloud.tencent.com/product/iotexplorer "腾讯云物联网开发平台(IoT Explorer)"),点击“立即使用”进入控制台,个人开发可以使用微信进行登录。
|
||||
### 1.1 新建项目
|
||||
具体可参考《3.对接腾讯云与腾讯连连-测试》新建项目章节,根据文档已经创建了一个智能终端的项目
|
||||

|
||||
### 1.2 产品开发
|
||||
#### 1.2.1 新建产品
|
||||
点击项目名称进入到该项目中,点击新建产品:
|
||||

|
||||
|
||||

|
||||
产品新建成功后,可在产品列表页查看到“电动车追踪”。
|
||||

|
||||
|
||||
#### 1.2.2 新建功能
|
||||
点击电动车追踪产品进入。
|
||||
##### 1.2.2.1
|
||||
参照下图建立两个功能:灯和位置两个功能
|
||||

|
||||
|
||||
##### 1.2.2.2
|
||||
json格式为:
|
||||

|
||||
```c
|
||||
{
|
||||
"version": "1.0",
|
||||
"profile": {
|
||||
"ProductId": "OKY0D78DP2",
|
||||
"CategoryId": "1"
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"id": "led",
|
||||
"name": "灯",
|
||||
"desc": "",
|
||||
"mode": "rw",
|
||||
"define": {
|
||||
"type": "bool",
|
||||
"mapping": {
|
||||
"0": "关",
|
||||
"1": "开"
|
||||
}
|
||||
},
|
||||
"required": false
|
||||
},
|
||||
{
|
||||
"id": "location",
|
||||
"name": "位置",
|
||||
"desc": "",
|
||||
"mode": "r",
|
||||
"define": {
|
||||
"type": "string",
|
||||
"min": "0",
|
||||
"max": "1024"
|
||||
},
|
||||
"required": false
|
||||
}
|
||||
],
|
||||
"events": [],
|
||||
"actions": []
|
||||
}
|
||||
```
|
||||
### 1.3 创建测试设备
|
||||
在【设备调试】页面中,单击【新建设备】,设备名为 bd_location:
|
||||

|
||||
|
||||
## 2. 设备侧操作
|
||||
使用 Keil-MDK 打开 mqttclient_iot_explorer_location 工程:
|
||||
TencentOS-tiny\board\BDW01-STM32L496VG\KEIL\mqttclient_iot_explorer_location
|
||||

|
||||
### 2.1 配置使用的网络设备
|
||||
打开mqttclient_iot_explorer_location.c文件,修改配置。
|
||||
路径为:TencentOS-tiny\board\BDW01-STM32L496VG\BSP\app
|
||||
修改本工程所使用的通信模组,打开USE_M5313,如图:
|
||||

|
||||
|
||||
#### 2.1.1 修改MQTT对接参数
|
||||
在腾讯云物联网开发平台可以看到一些产品ID、设备ID、设备秘钥三个参数,如图:
|
||||

|
||||
接下来进入TencentOS-tiny仓库中的tools目录,使用python运行脚本mqtt_config_gen.py,按照提示输出刚刚在平台查询到的三个参数,脚本会自动生成mqtt配置参数:
|
||||

|
||||
① 输入产品ID;
|
||||
② 输入设备名称
|
||||
③ 输入设备秘钥;
|
||||
④ ⑤ 保持默认,直接回车;
|
||||
⑥ 需要的生成信息。
|
||||
接下来在代码中修改配置信息:
|
||||

|
||||
#### 2.1.2 修改mqtt对接topic
|
||||
设备向云端上报数据的topic如下:
|
||||
上行请求 Topic: $thing/up/property/{ProductID}/{DeviceName}
|
||||
上行响应 Topic: $thing/down/property/{ProductID}/{DeviceName}
|
||||
首先订阅上行响应topic,数据内容如下:
|
||||
```c
|
||||
{
|
||||
"method":"control",
|
||||
"clientToken":"clientToken-9d2601f3-c36f-46a5-bdf6-1bd21c547406",
|
||||
"params":
|
||||
{
|
||||
"led":1,
|
||||
}
|
||||
}
|
||||
```
|
||||
同时,因为订阅了上行响应topic,所以模组会收到云端下发的响应并通过URC模式上报,云端响应报文整理一下格式如下:
|
||||
```c
|
||||
{
|
||||
"method":"report_reply",
|
||||
"clientToken":"clientToken-9d2601f3-c36f-46a5-bdf6-1bd21c547406",
|
||||
"code":0,
|
||||
"status":"success"}
|
||||
}
|
||||
```
|
||||
修改代码,首先**根据自己的产品ID和设备ID修改上报topic**:
|
||||

|
||||
然后修改订阅topic:
|
||||

|
||||
打开2g模块M5313的串口接收:
|
||||

|
||||
#### 2.1.3 编译下载
|
||||
修改完成之后编译工程,下载到开发板中,重新上电开始运行,在串口助手中查看打印日志:
|
||||

|
||||
#### 2.1.4 上报定位
|
||||
GPS获取到定位时,串口会打印GPS定位信息:
|
||||

|
||||
同时将定位上传到云端,
|
||||
在云端查看上报日志:
|
||||

|
||||
#### 2.1.5 LED控制
|
||||
在设备调试里,打开在线调试,选择灯,期望值选择打开状态,然后点击发送,成功控制板子上的LED,并返回数据
|
||||

|
||||
|
||||
## 3. 腾讯连连小程序操作步骤
|
||||
### 3.1 添加家庭
|
||||
手机端在【微信】搜索【腾讯连连】小程序,首次使用需要进入后点击【我的】->【家庭管理】,添加一个你喜欢的名称即可。
|
||||
### 3.2 添加设备
|
||||
进入后在中下方点击➕号,开始扫描二维码
|
||||

|
||||

|
||||
在腾讯云物联网开发平台进入【设备调试】,点击对应设备后的【二维码】:
|
||||

|
||||
腾讯连连扫描此二维码即可成功添加设备,添加成功之后如图:
|
||||

|
||||
给设备上电,等一会可以看到设备上线,点进去可进行LED的控制,
|
||||
开发板上的LED会亮。
|
||||

|
||||
#### 3.2.1 面板配置
|
||||
可以采用H5对小程序的显示页面进行编辑
|
||||

|
||||

|
||||
上传文件index.js、index.css(在source文件夹里)
|
||||

|
||||
并将腾讯连连小程序里的帐号添加至白名单。
|
||||

|
||||
用小程序重新扫描设备二维码,给设备重新上电,当有定位时,效果如下:
|
||||

|
||||
|
229
board/BDW01-STM32L496VG/doc/OTA-HTTP方式.md
Normal file
@@ -0,0 +1,229 @@
|
||||
# OTA-HTTP方式
|
||||
## 1. TencentOS-tiny OTA
|
||||
### 1.1 OTA与IAP
|
||||
IAP全称 In Application Programming,什么是在应用编程呢?
|
||||
正常开发流程如下:
|
||||
1. 使用Keil MDK工具编写应用程序;
|
||||
2. 编译出.axf可执行程序或者.bin文件,或者.hex文件;
|
||||
3. 使用Keil MDK工具直接烧录.axf文件到STM32 Flash中,或者使用类似STM32CubeProg之类的软件烧录.bin文件到STM32 Flash中;
|
||||
4. 复位,单片机从Flash起始地址处读取程序并执行;
|
||||
|
||||
当产品开发完成用于生产后,通常不会再引出下载器接口给用户,所以也就无法连接各种各样的下载器,更别说用Keil或者STM32CubeProg这些工具下载程序,如果发现应用程序有漏洞,或者要修改部分功能,都已经无法完成。
|
||||
#### 1.1.1 IAP设计思想
|
||||
IAP巧妙的解决了这个问题,即在应用程序正常工作的时候,还可以接收新的固件并烧录到Flash中。
|
||||
|
||||
- 应用程序如何接收新的固件?
|
||||
|
||||
一般产品设计时都会留一个用于打印日志信息的串口,可以直接利用此串口来接收PC发送到新固件,传输协议大多都采用Y-Modem协议。
|
||||
|
||||
- 接收之后的新固件存放到哪里?
|
||||
|
||||
固件大小一般都有几十KB或者上百KB,应用程序接收到新的固件之后,如果是以数组的形式暂存在RAM空间中,不仅会浪费RAM空间,而且容易发生固件数据丢失,所以直接存储到空闲的Flash空间中是最好的方式。
|
||||
eg. 官方开发板使用的芯片是STM32L496VGTx,Flash空间有1024KB,如果应用程序的大小只有100KB,那么接收进来的新固件就可以存放在剩余的156KB空间中。
|
||||
同时会人为的对Flash划分分区,也就是对某一段地址空间起个名字,如下图:
|
||||

|
||||
|
||||
- 如何将老固件替换为为新固件?
|
||||
上电之后CPU会从Flash的起始地址处读取数据开始执行,这点无法改变,正在运行的应用程序如果进行自己擦除自己的操作,设备直接变砖。
|
||||
bootloader可以完美的解决这一问题,即写一小段应用程序,放在Flash的起始位置处,使得每次上电之后最先运行bootloader,完成两个功能:
|
||||
① 检查升级标志,是否有新的固件被下载到IAP分区中;
|
||||
② 如果无升级标志,则跳转到ActiveAPP分区,开始执行应用程序;
|
||||
③ 如果有升级标志,则先将IAP分区中的固件拷贝到ActiveAPP分区中,然后跳转到ActiveAPP分区,开始执行新的应用程序;
|
||||
加入bootloader之后,整个Flash的分区情况如下:
|
||||

|
||||
|
||||
#### 1.1.2 OTA设计思想
|
||||
在IAP的这种设计思想之上,因为当前的物联网设备都已经具备基本的网络通信功能,所以无需通过串口传输新的固件,直接通过网络传输新的固件即可,称之为OTA IAP(Over The Air In Application Programming),也就是平常所说的空中升级,简称OTA。
|
||||
|
||||
### 1.2 OTA组件概述、特性及优势
|
||||
TencentOS-tiny中提供的OTA组件完全开源免费,相较于其他的OTA功能,TencentOS-tiny OTA组件提供更小的差分升级包,耗用更少的传输流量,占用更小的内存空间,提供更可靠的升级服务。
|
||||
TencentOS-tiny OTA组件有以下的特性:
|
||||
传输差分升级包,而不是整个固件
|
||||
灵活的分区表功能
|
||||
支持原地升级
|
||||
支持乒乓升级,可以在升级中断的情况下进行版本回滚
|
||||
支持通过HTTP从自建服务器拉取固件
|
||||
支持从腾讯云平台进行统一的固件拉取和管理
|
||||
|
||||
### 1.3 OTA组件开发调试推荐流程
|
||||
OTA的整个流程调试较复杂,如果分步来做会比较容易:
|
||||
(1)调试bootloader是否可以正常读取分区表信息;
|
||||
(2)调试bootloader是否可以正常跳转到Active APP;
|
||||
(3)调试bootloader是否直接可以根据patch包进行升级;
|
||||
(4)调试Active APP是否可以通过网络拉取patch升级包并下载到 OTA 分区;
|
||||
(5)综合调试。
|
||||
|
||||
## 2. 分区规划及分区表的生成、烧录
|
||||
### 2.1 分区规划
|
||||
TencentOS-tiny支持两种升级方式,两种升级方式对应有不同的分区表
|
||||
原地升级方式中,bootloader直接根据旧固件+patch升级包生成新的固件,一旦开始升级,无论升级成功与否都无法回滚到上一个版本,主要有五个分区:
|
||||
Bootloader分区:执行引导、分区升级功能;
|
||||
Active APP分区:当前正在运行的固件存放分区;
|
||||
OTA分区:新固件存放分区;
|
||||
KV分区:记录系统升级中的一些环境变量;
|
||||
分区表:存放分区表(固定大小32B,一般放在Flash的最后一个扇区中)
|
||||
|
||||
乒乓升级方式中,bootloader在升级之前会将原来的固件拷贝一份,一旦开始升级,无论新固件升级成功与否,都可以回滚到上一个版本,主要有六个分区:
|
||||
Bootloader分区:执行引导、分区升级功能;
|
||||
Active APP分区:当前正在运行的固件存放分区;
|
||||
Backup分区:备份当前正在运行的固件;
|
||||
OTA分区:新固件存放分区;
|
||||
KV分区:记录系统升级中的一些环境变量;
|
||||
分区表:存放分区表(固定大小32B,一般放在Flash的最后一个扇区中)
|
||||
|
||||
在实际应用中,两种方式的选择要根据设备需求,设备Flash空间大小,设备Flash扇区大小综合考虑。
|
||||
本文接下来如无特殊说明,都是以第一种方式(原地升级)为例,官方板的Flash大小为1024KB,可以如下分区:
|
||||

|
||||
|
||||
### 2.2 分区表工具的使用方法
|
||||
TencentOS-tiny 源码中提供了一个生成分区表的命令行工具,需要先使用gcc编译,没有gcc环境可以安装MinGW。
|
||||
#### 2.2.1 编译
|
||||
进入\components\ota\tools\partition_table目录,执行make命令开始编译,编译之后进入到当前目录下的out\target即可看到工具 ptbl.exe:
|
||||
cd out/target/
|
||||
该工具有如下参数:
|
||||
|
||||
1. h:打印帮助信息
|
||||
2. p <ip/pp>:选择升级方式,ip或者pp
|
||||
3. a <start,end>:Active APP分区的起始和结束地址
|
||||
4. b <start,end>:Backup 分区的起始和结束地址,选了pp方式才需要
|
||||
5. o <start,end>:OTA分区的起始和结束地址
|
||||
6. k <start,end>:KV分区的起始和结束地址
|
||||
7. v <major>.<minor>:初识固件版本号
|
||||
|
||||
为官方板生成分区表文件的命令如下:
|
||||
./ptbl.exe -p ip -a 0x08007800,0x080CF800 -o 0x080CF800,0x080F9800 -k 0x080F9800,0x080FF800 -v 0.1 ptbl.bin
|
||||
运行之后即可在当前目录下看到生成的分区表文件ptbl.bin。
|
||||
|
||||
### 2.3 分区表烧录方法
|
||||
生成的分区表文件ptbl.bin可以通过STM32CubeProg直接烧录到Flash中,按照之前规划的分区,烧录位置为 0x0803F800 ,烧录方法如下:
|
||||
(1)使用下载器连接开发板到PC,打开STM32CubeProg工具,点击Connect连接到开发板:
|
||||

|
||||
(2)如果是第一次使用OTA,点击左侧的烧录按钮,点击全片擦除:
|
||||

|
||||
第一次使用的时候,KV分区中的数据不确定,可靠起见直接选择全片擦除。
|
||||
|
||||
(3)点击左侧的烧录按钮,选择刚刚生成的ptbl.bin,下载地址填写 0x080FF800,点击烧录:
|
||||

|
||||
出现烧录成功弹窗即可。
|
||||
|
||||
## 3. 测试Bootloader程序
|
||||
进入board\BDW01-STM32L496VG\KEIL\ota目录,打开官方提供的bootloader示例工程: ota_bootloader_recovery。
|
||||
bootloader其实是一个裸机程序,在 main 函数中主要有三部分,分别对应三个功能:
|
||||
读取分区表
|
||||
根据patch包进行升级
|
||||
跳转到Active APP分区开始执行
|
||||
接下来将完成 1.3 节所给出的OTA组件开发调试推荐流程前三步。
|
||||
### 3.1 测试bootloader是否可以读取分区表
|
||||
首先需要指定分区表地址:
|
||||

|
||||
如下初始化环境变量的代码,在初始化之后打印分区表的代码,最后的while(1)用于停止程序,防止进行后面的功能:
|
||||

|
||||
修改程序编译地址和大小,与Bootloader分区的划分相对应:
|
||||

|
||||
编译程序。
|
||||
编译成功之后修改下载设置,选择扇区擦除方式、设置程序烧录起始地址、设置程序烧录大小,同样与bootloader分区的划分相对应:
|
||||

|
||||
下载程序,在串口助手中观察输出:
|
||||

|
||||
|
||||
### 3.2 测试bootloader是否可以跳转到Active APP分区
|
||||
打开和bootloader在一个目录下的app工程:ota_application_download_through_http。
|
||||
目前我们只是测试bootloader是否可以跳转过来执行此程序,所以如图所示修改代码,不要触发OTA固件拉取功能:
|
||||

|
||||
另外,因为此程序被烧录到 Active APP 分区,是从Active APP分区的起始地址开始运行的,所以需要修改中断向量表的偏移地址,如图:
|
||||

|
||||
同样修改程序编译的起始地址和大小,与规划的 Active APP分区信息相对应:
|
||||

|
||||
编译程序。
|
||||
编译成功之后修改下载设置,烧录到Actice APP分区中:
|
||||

|
||||
最后再修改bootloader程序,屏蔽while(1),屏蔽OTA固件升级功能,开启跳转功能:
|
||||

|
||||
再次编译,下载bootloader,复位开发板,查看串口助手中的输出,可以看到bootloader成功跳转到Actice APP开始执行:
|
||||

|
||||
|
||||
### 3.3 差分patch包生成方法
|
||||
#### 3.3.1 准备老固件和新固件
|
||||
官方示例工程已经在MDK中配置编译后生成.bin固件,如图:
|
||||

|
||||
编译之后会在工程目录下生成TencentOS_tiny.bin文件,拷贝一份出来,重命名为:TencentOS_tiny_0_1.bin,表示这是0.1版本的固件。
|
||||
修改app工程,将打印信息中的0.1改为0.2,以验证是否升级成功:
|
||||

|
||||
重新编译,生成新固件TencentOS_tiny.bin,同样拷贝一份,重命名为:TencentOS_tiny_0_2,表示这是0.2版本的固件。
|
||||

|
||||
|
||||
#### 3.3.2 差分升级包生成工具的使用
|
||||
编译此工具同样需要gcc环境。
|
||||
进入\components\ota\tools\diff目录,执行make命令开始编译,编译之后进入到当前目录下的out\target即可看到工具 diff.exe:
|
||||
cd out/target/
|
||||
该工具有如下参数:
|
||||
1. h:打印帮助信息
|
||||
2. v:打印更多信息
|
||||
3. s:<待定...>
|
||||
4. b <n>:指定扇区大小,单位:字节Byte
|
||||
5. n <major>.<minor>:新的固件版本号
|
||||
6. o <major>.<minor>:旧的固件版本号
|
||||
|
||||
将3.3.1节准备的两个固件拷贝到当前工具所在目录下。
|
||||
根据前面准备的两个新旧固件,制作差分升级包的命令如下:
|
||||
./diff.exe -v -b 2048 -n 0.2 -o 0.1 TencentOS_tiny_0_1.bin TencentOS_tiny_0_2.bin patch.bin
|
||||
运行之后即可在当前目录下看到生成的差分升级包patch.bin。
|
||||

|
||||
|
||||
### 3.4 测试bootloader是否可以根据patch进行升级
|
||||
使用STM32CubeProg直接将差分升级包patch.bin下载到OTA分区:
|
||||

|
||||
下载成功后,因为bootloader通过检测KV分区中的环境变量new_version来判断是否有新的固件,但是环境变量在app程序拉取固件成功之后才会设置,所以我们手动在bootloader中来设置此环境变量。
|
||||
在main.c中引入KV的头文件:
|
||||
|
||||
```c
|
||||
#include "tos_kv.h"
|
||||
```
|
||||
在环境变量初始化代码之后,升级代码之前添加(打开)如下的代码:
|
||||

|
||||
添加之后编译,下载,在串口助手中查看输出:
|
||||

|
||||
可以看到bootloader成功根据patch差分包和旧的固件,还原出了新的固件并成功升级。
|
||||
|
||||
## 4. 使用HTTP方式获取固件并升级
|
||||
TencentOS-tiny OTA组件支持使用 HTTP 协议拉取差分升级patch包,并烧写到OTA分区中。
|
||||
### 4.1 准备HTTP服务器
|
||||
HTTP服务器的选择非常多,常用选择有:
|
||||
在Windows上使用类似MyWebServer的小工具开启HTTP服务
|
||||
1)优点:简单方便,用于测试
|
||||
2)缺点:需要在路由端做一个端口映射,可以通过外网进行访问
|
||||

|
||||
在云服务器上安装类似Nginx的工具,开启HTTP访问
|
||||
1)优点:性能强劲、有公网ip、支持高并发(大量设备同时开机拉取固件)
|
||||
2)缺点:安装过程较复杂
|
||||
除了这两种方式外,还有很多的方式可供选择,只需要开启HTTP服务即可,本文中我使用第一种方式。
|
||||
开启之后将第3步中生成的差分升级固件 patch.bin 上传/复制到HTTP服务目录中,然后使用浏览器访问http://<已经开启HTTP服务PC的ip,外网ip>:<HTTP服务端口>/patch.bin,测试正常获取之后方可进行后续操作。
|
||||
开启HTTP服务之后记得关闭各种防火墙,比如Win10网络防火墙,云服务器安全组等。
|
||||
### 4.2 HTTP获取固件并升级
|
||||
(1)使用STM32CubeMX Prog全片擦除,烧写分区表到0x080ff800;
|
||||
(2)修改bootloader程序,去除手动设置new_version环境变量代码,编译,下载,**不要复位**:
|
||||

|
||||
|
||||

|
||||
(3)修改Actice APP工程(ota_application_download_through_http),开启HTTP固件拉取和升级功能:
|
||||

|
||||
打开串口可接收M5313的数据:
|
||||

|
||||
修改分区表地址,根据自己的外网ip配置:
|
||||

|
||||
修改之后编译,下载,**不要复位**。
|
||||
特别注意,此时0.1版本的程序已经被我们修改,所以之前生成的patch包无法完成升级,重新在0.1版本的基础上修改处0.2版本的程序,并制作patch包。
|
||||
重复一遍之前的制作流程即可:
|
||||
① 将当前固件拷贝出来,重命名为TencentOS_tiny_0_1.bin;
|
||||
② 修改打印提示,表示这是0.2版本的程序:
|
||||
printf("do sth(v0.2)...\n");
|
||||
③ 将新固件拷贝出来命名为TencentOS_tiny_0_2.bin;
|
||||
④ 使用diff命令行工具或者可视化工具制作差分升级包patch.bin;
|
||||
⑤ 将制作出的差分升级包拷贝/上传到HTTP服务器目录;
|
||||
此时,一切准备就绪,复位设备,即可在串口助手中看到OTA的升级状况:
|
||||
上电启动
|
||||

|
||||
等待连接,请求,下载,后
|
||||

|
||||
|
||||
|
BIN
board/BDW01-STM32L496VG/doc/image/board.png
Normal file
After Width: | Height: | Size: 820 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ch340ins01.png
Normal file
After Width: | Height: | Size: 9.9 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ch340ins02.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ch340ins03.png
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec01.png
Normal file
After Width: | Height: | Size: 8.7 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec02.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec03.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec04.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec05.png
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec06.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec07.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec08.png
Normal file
After Width: | Height: | Size: 79 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec09.png
Normal file
After Width: | Height: | Size: 7.2 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec10.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec11.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec12.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec13.png
Normal file
After Width: | Height: | Size: 9.5 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec14.png
Normal file
After Width: | Height: | Size: 8.7 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec15.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec16.png
Normal file
After Width: | Height: | Size: 64 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec17.png
Normal file
After Width: | Height: | Size: 67 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec18.png
Normal file
After Width: | Height: | Size: 35 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec19.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec20.png
Normal file
After Width: | Height: | Size: 134 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec21.png
Normal file
After Width: | Height: | Size: 105 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec22.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec23.png
Normal file
After Width: | Height: | Size: 156 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec24.png
Normal file
After Width: | Height: | Size: 62 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec25.png
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec26.png
Normal file
After Width: | Height: | Size: 53 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec27.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec28.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/elec29.png
Normal file
After Width: | Height: | Size: 83 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/helloword00.png
Normal file
After Width: | Height: | Size: 85 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/helloword01.png
Normal file
After Width: | Height: | Size: 89 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/helloword02.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/helloword03.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iot01.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iot02.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iot03.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iot04.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iot05.png
Normal file
After Width: | Height: | Size: 88 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iot06.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iot07.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iot08.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iot09.png
Normal file
After Width: | Height: | Size: 88 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iot10.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iot11.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iot12.png
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iot13.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iot14.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iot15.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iot16.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iot17.png
Normal file
After Width: | Height: | Size: 64 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iot18.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iot19.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iot20.png
Normal file
After Width: | Height: | Size: 134 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iot21.png
Normal file
After Width: | Height: | Size: 105 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iot22.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iot23.png
Normal file
After Width: | Height: | Size: 137 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/iotpl.png
Normal file
After Width: | Height: | Size: 63 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/logusb.png
Normal file
After Width: | Height: | Size: 875 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/mtkdl01.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/mtkdl02.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/mtkdl03.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/mtkdl04.png
Normal file
After Width: | Height: | Size: 9.4 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/mtkdl05.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/mtkins01.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/mtkins02.png
Normal file
After Width: | Height: | Size: 77 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http01.png
Normal file
After Width: | Height: | Size: 74 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http02.png
Normal file
After Width: | Height: | Size: 133 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http03.png
Normal file
After Width: | Height: | Size: 6.8 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http04.png
Normal file
After Width: | Height: | Size: 119 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http05.png
Normal file
After Width: | Height: | Size: 145 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http06.png
Normal file
After Width: | Height: | Size: 150 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http07.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http08.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http09.png
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http10.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http11.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http12.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http13.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http14.png
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http15.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http16.png
Normal file
After Width: | Height: | Size: 64 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http17.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http18.png
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http19.png
Normal file
After Width: | Height: | Size: 8.6 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http20.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http21.png
Normal file
After Width: | Height: | Size: 150 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http22.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http23.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http24.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http25.png
Normal file
After Width: | Height: | Size: 51 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/ota-http26.png
Normal file
After Width: | Height: | Size: 32 KiB |