HCM010S&HCM511S系列 Open(SDK)快速开发指导
简介
移远通信 HCM010S、HCM010S-E、HCM511S 和 HCM511S-E 模块支持 Open 开发方案,可简化 IoT 应用的软件设计和开发过程。有关所述 Open 开发方案的详细信息,请参考 https://github.com/SiliconLabs/gecko_sdk。
本文档适用于 SDK 构建环境的 Open 方案,主要介绍 HCM010S、HCM010S-E、HCM511S 和 HCM511S-E 模块的编译环境搭建、应用程序开发和编译流程、固件烧录、程序调试、OTA 升级和移远通信 MAC 地址使用等内容。
搭建编译环境
硬件环境
| 硬件名称 | 数量 |
|---|---|
| HCM010S-TE-B 开发板、HCM010S-E-TE-B 开发板、HCM511S-E-TE-B 开发板或 HCM511S-TE-B 开发板 | 1 |
| HCM010S、HCM010S-E、HCM511S 或 HCM511S-E 模块 | 1 |
| J-Link 仿真器或 SI-DBG1015A Simplicity Link 调试器 | 1 |
| USB 线(连接模块开发板与 PC) | 1 |
| 转接线(用于 J-Link 仿真器或 SI-DBG1015A Simplicity Link 调试器连接至模块开发板) | 1 |
| PC | 1 |
| 手机 | 1 |
备注:
- 本文档以 J-Link 仿真器为例,介绍模块的应用程序开发、固件烧录以及程序调试等内容。有关 J-Link 仿真器与开发板的连接步骤以及跳线帽配置 JTAG 接口的详情,请参考相关文档。
- 若使用 SI-DBG1015A Simplicity Link 调试器,请参考相关文档中模块与 SI-DBG1015A Simplicity Link 调试器的连接方法。




软件环境
| 类型 | 说明 |
|---|---|
| 工具 | - EFR Connect APP - Simplicity Studio 开发工具 |
| SDK | gecko_sdk-gsdk_4.2 |
备注:
- 有关 EFR Connect APP 的详情,请参考 https://www.silabs.com/documents/public/software/android-efr-connect.apk。
- 有关 Simplicity Studio 的使用方法,请参考 https://docs.silabs.com/simplicity-studio-5-users-guide/5.9.1/ss-5-users-guide-getting-started。
- 本文档以 gecko_sdk-gsdk_4.2 为例,用户可根据需求从 https://github.com/SiliconLabs/gecko_sdk 下载对应的 SDK 版本。
- 更多例程资源,详见 https://github.com/SiliconLabs。
安装 Simplicity Studio
从 https://www.silabs.com/developers/simplicity-studio 下载 Simplicity Studio 工具包。

下载的Simplicity Studio工具包如下图所示:

解压 SimplicityStudio-5.iso 工具包后,双击工具包中 setup.exe 进行安装。

安装开发包。
- 打开 Simplicity Studio,等待 "Progress Information" 界面加载完毕。

- 弹出 "Install Required Package(s)" 界面,点击 "Yes"。

- 在 "Installation Manager" 界面,点击 "Update All" 开始安装。

安装界面如下图所示

- 安装完成后,点击 "Restart" 重启工具。

- Simplicity Studio工具重启后弹出如下“Installation Manager”界面,点击左下角的“Cancel”关闭该界面。

更新 Simplicity Studio 软件包
在 Simplicity Studio 工具主界面的 "Debug Adapters" 区域找到当前使用的 J-Link 仿真器,右键单击该 J-Link 仿真器,选择 "Device configuration"。

在弹出的配置界面的 "Target part" 文本框中,输入并选择模块对应的芯片型号,然后点击 "OK"。

点击工具界面的 "Install",弹出 "Installation Manager" 界面,选择 "Install by connecting device(s)"。

选择 J-Link 仿真器,点击 "Next"。

在 "Package Installation Options" 下方选择 "Auto",然后点击 "Next"。

勾选 "Accept all agreements" 和 "Accept this agreement",然后点击 "Next"。

等待安装完成,完成后点击 "OK" 重启 Simplicity Studio。

安装完成后,弹出如下界面提示重启Simplicity Studio,点击“OK”进行重启。

下载添加 SDK
执行
git clone https://github.com/SiliconLabs/gecko_sdk.git下载 gecko_sdk-gsdk_4.2,下载后解压(解压后的路径不能包含中文字符)。选中 Simplicity Studio 工具主界面左侧 "Debug Adapters" 区域的 J-Link 仿真器,工具右侧会显示设备信息,选择 "OVERVIEW",然后点击 "Manage SDKs" 进入 "SDKs" 页面。

点击 "Add SDK..." → 点击 "Browse..." → 选择 gecko_sdk-gsdk_4.2 → 点击 "选择文件夹" → 点击 "OK" → 点击 "Apply and Close"。

开发应用程序
HCM010S/HCM010S-E 应用程序开发示例
本章基于 HCM010S-TE-B 介绍应用程序 SoC Blinky、Sleeptimer Bare-metal 和 Soc Empty 的开发流程。
| HCM010S 模块引脚号 | HCM010S-E 模块引脚号 | 引脚名 | 芯片引脚名 |
|---|---|---|---|
| - | 1 | GND | GND |
| - | 2 | ANT_BT | RF2G4 |
| 1 | 3 | GND | GND |
| 2 | 4 | USART_TXD | PA05 |
| 3 | 5 | USART_RXD | PA06 |
| 4 | 6 | SWDIO | PA02 |
| 5 | 7 | SWCLK | PA01 |
| 6 | 8 | GPIO4 | PB01 |
| 7 | 9 | GPIO5 | PB00 |
| 8 | 10 | GPIO1 | PA00 |
| 9 | 11 | GPIO6 | PC02 |
| 10 | 12 | GPIO7 | PC01 |
| 11 | 13 | GPIO8 | PC00 |
| 12 | 14 | GPIO9 | PC03 |
| 13 | 15 | GND | GND |
| 14 | 16 | RESET_N | RESET_N |
| 15 | - | GPIO12 | PD01 |
| - | 17 | RESERVED | PD01 |
| 16 | 18 | VBAT | VBAT |
| 17 | 19 | GND | GND |
| 18 | 20 | GPIO13 | PD04 |
| 19 | 21 | GPIO14 | PD03 |
| 20 | 22 | GPIO15 | PD02 |
| 21 | 23 | GPIO10 | PC04 |
| 22 | 24 | GPIO11 | PC05 |
| 23 | - | GPIO16 | PD00 |
| - | 25 | RESERVED | PD00 |
| 24 | 26 | GPIO2 | PA03 |
| 25 | 27 | GPIO3 | PA04 |
备注: 有关引脚详细信息,请参考相关硬件设计手册。
Bluetooth - SoC Blinky
本章节以开发名为 "bt_soc_blinky_010s" 的 SoC Blinky 应用程序为例,详细介绍应用程序的开发流程。此应用程序通过蓝牙连接实现对 HCM010S-TE-B 上 LED1 灯亮灭的控制。
工程创建
在 Simplicity Studio 工具主界面的 "Debug Adapters" 区域找到当前使用的 J-Link 仿真器,右键单击该 J-Link 仿真器,选择 "Device configuration..."。

在弹出的配置界面的 "Target part" 文本框中,输入并选择模块对应的芯片型号,然后点击 "OK"。

在 Simplicity Studio 工具界面选中设备 → 选择 Gecko SDK Suite v4.2.3 → 点击 "Create New Project" → 在弹出的 "New Project Wizard" 中,按照提示操作进入 "Example Project Selection" 界面,勾选左下角的 "Bluetooth" → 选择 "Bluetooth-Soc Blinky" → 点击 "NEXT",进入 "Project Configuration" 界面。

在 "Project Configuration" 界面,设置工程名称为 "bt_soc_blinky_010s",选中 "Link sdk and copy project sources" 后,点击 "FINISH"。

创建的bt_soc_blinky_010s工程如下图所示:

创建工程后,会弹出bt_soc_blinky_010s工程的readme文件,如下图所示:

创建 bootloader 工程。根据 readme 文件的内容,bt_soc_blinky_010s 工程需要一个 bootloader。所需的 bootloader 类型为 Bluetooth Apploader OTA DFU type bootloader。

- 点击工具界面右上方的“Launcher”可切换至初始界面(点击“Simplicity IDE”则返回至开发环境)。

- 选中设备 -> 选择Gecko SDK Suite v4.2.3 -> 点击“Create New Project” -> 在“Example Project Selection”界面左侧“Filter on keywords”搜索框中输入“Bootloader”进行搜索 -> 在搜索结果中选择“Bootloader-Soc Bluetooth AppLoader OTA DFU” -> 点击“Next”。

- 在“Project Configuration”界面,设置工程名称为“bootloader-apploader_010s”(工程路径不可浏览,后续更改工程名称时,其路径会随着变化),选中“Link sdk and copy project sources”后,点击“FINISH”。

创建的bootloader-apploader_010s工程如下图所示,有关bootloader的详细信息,请参考https://www.silabs.com/documents/public/user-guides/ug489-gecko-bootloader-user-guide-gsdk-4.pdf。

工程配置
查找并安装所需组件。
- 在 bt_soc_blinky_010s 工程中找到 bt_soc_blinky_010s.slcp。双击该文件,进入 "bt_soc_blinky_010s" 页面。选择 "SOFTWARE COMPONENTS" 页签,在上方搜索框输入 "SWO" 进行搜索,在搜索结果中选中 "SWO Debug",点击 "Install" 安装 SWO Debug 组件。

对未配置的组件进行配置。
- 双击bt_soc_blinky_010s.slcp,进入“bt_soc_blinky_010s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“io stream”进行搜索,在搜索结果中选中“IO Stream: USART”,点击“Configure”进入IO Stream: USART组件配置界面。
- 搜索 "led" 并配置 Simple LED (led1) 组件,选择 PD02 作为 LED1。

按照下图红框1配置IO Stream: USART组件,然后点击“</> View Source”。
弹出如下图所示的sl_iostream_usart_vcom_config.h文件,配置IO Stream: USART组件后会生成下图红框内容:

2) 双击bt_soc_blinky_010s.slcp,进入“bt_soc_blinky_010s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“led”进行搜索,在搜索结果中选中“led1”(不同版本的SDK,LED名字可能不同,但功能相同),点击“Configure”进入配置Simple LED (led1)组件界面。

按照下图的红框1配置Simple LED (led1)组件,选择PD02作为LED1,然后点击“</> View Source”。
弹出如下图所示的sl_simple_led_led1_config.h文件,配置Simple LED (led1)组件后会生成下图红框内容:

HCM010S-TE-B上只有一个复位按钮,没有其他按钮,需将btn0去除。具体如下:
- 双击bt_soc_blinky_010s.slcp,进入“bt_soc_blinky_010s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“button”进行搜索,在搜索结果中选中“Simple Button”,点击“Uninstall”。

2) 点击上图的“Uninstall”后,弹出下图所示界面,选中“btn0”,然后点击“Done”。
- 在bt_soc_blinky_010s工程中找到app.c文件并双击打开,删除文件中的update_report_button_characteristic()。

4) 删除如下图所示的app.c文件中的sl_button_on_change()。

5) 参照下图在app.c文件中Toggle LED的上方添加红框中的内容。

6) 删除app.c文件中下图红框中所示内容。



其他配置。
打开GATT配置文件gatt_configuration.btconf,可查看具体配置,也可根据实际需求进行修改:展开目标工程 -> 展开config -> 展开btconf -> 双击gatt_configuration.btconf。

程序释义


Platform - Sleeptimer Bare-metal
本章以裸机环境下的定时器应用开发为例,通过示例程序 "sleeptimer_baremetal_010s" 详解应用程序开发流程。该示例创建了两个周期性定时器和一个单次定时器:单次定时器和一个周期定时器用于控制两个 LED 灯的状态(亮/灭),另一个周期定时器则用于打印前两个定时器的剩余时间。相关日志信息可在串口工具的调试窗口中查看。
工程创建
参考前述步骤配置设备。
在 Simplicity Studio 工具界面选中设备 → 选择 Gecko SDK Suite v4.2.3 → 点击 "Create New Project" → 在弹出的 "New Project Wizard" 中,按照提示操作进入 "Example Project Selection" 界面,在左侧 "Filter on keywords" 搜索框中输入 "timer" 进行搜索 → 选择 "Platform - Sleeptimer Bare-metal" → 点击 "NEXT",进入 "Project Configuration" 界面。

在 "Project Configuration" 界面,设置工程名称为 "sleeptimer_baremetal_010s",选中 "Link sdk and copy project sources" 后,点击 "FINISH"。

创建的sleeptimer_baremetal_010s工程如下图所示。工程目录结构详细信息。

工程配置
查找并安装所需组件。
- 在sleeptimer_baremetal_010s工程中找到sleeptimer_baremetal_010s.slcp。双击sleeptimer_baremetal_010s.slcp,进入“sleeptimer_baremetal_010s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“usart”进行搜索,在搜索结果中选中“IO Stream: USART”,点击“Install”安装IO Stream: USART组件。

- 点击上图的“install”后弹出下图所示界面,在“INSTANCE NAME”下方文本框中将示例重命名为“vcom”,然后点击“Done”。

3) 双击sleeptimer_baremetal_010s.slcp,进入“sleeptimer_baremetal_010s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“SWO”进行搜索,在搜索结果中选中“SWO Debug”,点击“Install”安装SWO Debug组件。

对未配置的组件进行配置。
- 双击sleeptimer_baremetal_010s.slcp,进入“sleeptimer_baremetal_010s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“io stream”进行搜索,在搜索结果中选中“IO Stream: USART”,点击“Configure”进入IO Stream: USART组件配置界面。

按照下图的红框1配置IO Stream: USART组件,然后点击“</> View Source”。

弹出如下图所示的sl_iostream_usart_vcom_config.h文件,配置IO Stream: USART组件后会生成下图红框内容:

2) 双击sleeptimer_baremetal_010s.slcp,进入“sleeptimer_baremetal_010s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“led”进行搜索,在搜索结果中选中“led0”,点击“Configure”进入配置Simple LED (led0)组件界面。

按照下图的红框1配置Simple LED (led0)组件,选择PD02作为LED0,然后点击“</> View Source”:

会弹出如下图所示的sl_simple_led_led1_config.h文件,配置Simple LED (led1)组件后会生成下图红框内容:

3) 双击sleeptimer_baremetal_010s.slcp,进入“sleeptimer_baremetal_010s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“led”进行搜索,在搜索结果中选中“led1”,点击“Configure”进入配置Simple LED (led1)组件界面。HCM010S-TE-B上只有一个复位按钮,没有其他按钮,需将btn0和btn1去除。具体操作如下:
按照下图的红框1配置Simple LED (led1)组件,选择PD03作为LED1,然后点击“</> View Source”。- 双击sleeptimer_baremetal_010s.slcp,进入“sleeptimer_baremetal_010s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“button”进行搜索,在搜索结果中选中“Simple Button”,点击“Uninstall”。

2) 点击上图的“Uninstall”后,弹出下图所示界面,选中“btn0”和“btn1”,然后点击“Done”。
3) 在sleeptimer_baremetal_010s工程中找到sleeptimer_app.c文件并双击打开,删除文件中的sl_button_on_change()。

4) 删除sleeptimer_app.c文件中下图红框中所示内容:


程序释义
- 应用程序启动

- 通过 app_init() 进行初始化

- app_process_action() 被不断循环执行

- sleeptimer_app_init() 执行 Log 打印等操作

- sleepertimer_app_process_action() 每秒打印定时器的剩余时间

Bluetooth - Soc Empty
Soc Empty 是一款面向蓝牙应用开发的极简项目框架,专为自定义蓝牙应用程序提供标准化起点。相较前述提供完整功能的示例工程,Soc Empty 仅提供基础通信架构,可作为独立蓝牙应用的开发模板:设备启动后自动进入广播模式,并在断开连接后立即恢复广播,开发者需基于此框架自行添加相应的功能代码并集成所需组件。
本章以构建支持 GPIO 外设控制的蓝牙应用(项目命名 "bt_soc_empty_hcm010s_led")为例,介绍基于 Soc Empty 框架的应用程序开发流程。
外设示例可参考如下 git 代码资源:https://github.com/SiliconLabs/peripheral_examples/tree/master/series2。
示例导入
- 复制外设 git 代码资源链接至浏览器中打开。

- 点击 "<> Code" → "Code" → "Download ZIP" 下载代码资源。

- 将下载的peripheral_examples-master.zip解压后,导入解压后的资源包中需参考的外 设示例。以导入GPIO外设示例为例,具体操作如下:
- 点击Simplicity Studio工具界面的“File” -> “Import…”,进入“Import Project”界面。

2) 点击“Browse…”选择解压后的GPIO外设示例的路径,选中红框②工程,然后点击“Next>”。

参照下图,继续点击“Next>”。

3) 参照下图设置工程名称,然后点击“Finish”完成示例导入。

可参考所导入工程的源文件等内容配置用户自己的工程。

工程创建
参考前述步骤配置设备。
在 Simplicity Studio 工具界面选中设备 → 选择 Gecko SDK Suite v4.2.3 → 点击 "Create New Project" → 在弹出的 "New Project Wizard" 中,按照提示操作进入 "Example Project Selection" 界面,勾选左下角的 "Bluetooth" → 选择 "Bluetooth - Soc Empty" → 点击 "NEXT",进入 "Project Configuration" 界面。

在 "Project Configuration" 界面,设置工程名称为 "bt_soc_empty_hcm010s_led",选中 "Link sdk and copy project sources" 后,点击 "FINISH"。

创建的bt_soc_empty_hcm010s_led工程如下图所示。工程目录结构详细信息。

创建工程后,会弹出bt_soc_empty_hcm010s_led工程的readme文件,如下图所示:

创建 bootloader 工程。根据 readme 文件的内容,bt_soc_empty_hcm010s_led 工程需要一个 bootloader。所需的 bootloader 类型为 Bluetooth Apploader OTA DFU type bootloader。如果已经创建了一个bootloader工程,则不需要再次创建。

工程配置
查找并安装所需组件。
- 在bt_soc_empty_hcm010s_led工程中找到bt_soc_empty_hcm010s_led.slcp。双击bt_soc_empty_hcm010s_led.slcp,进入“bt_soc_empty_hcm010s_led”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“delay”进行搜索,在搜索结果中选中“Microsecond Delay”,点击“Install”安装Microsecond Delay组件。

2) 双击bt_soc_empty_hcm010s_led.slcp,进入“bt_soc_empty_hcm010s_led”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“ios”进行搜索,在搜索结果中选中“IO Stream: USART”,点击“Install”安装IO Stream: USART组件。

3) 点击上图的“Install”后弹出下图所示界面,在“INSTANCE NAME”下方将示例重命名为“vcom”,然后点击“Done”。

4) 双击bt_soc_empty_hcm010s_led.slcp,进入“bt_soc_empty_hcm010s_led”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“log”进行搜索,在搜索结果中选中“Log”,点击“Install”安装Log组件。

对未配置的组件进行配置。
双击bt_soc_empty_hcm010s_led.slcp,进入“bt_soc_empty_hcm010s_led”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“io stream”进行搜索,在搜索结果中选中“IO Stream: USART”,点击“Configure”进入配置IO Stream: USART组件界面。

按照下图的红框1配置IO Stream: USART组件,然后点击“</> view source”。

弹出如下图所示的sl_iostream_usart_vcom_config.h文件,配置IO Stream: USART组件后会生成下图红框内容:

在工程中找到main.c文件并双击打开,添加下图红框2和红框3中内容。

在main.c的while(1)部分添加如下内容:

程序释义

HCM511S/HCM511S-E 应用程序开发示例
本章节基于 HCM511S-TE-B 介绍应用程序 SoC Blinky、Sleeptimer Bare-metal 和 Soc Empty 的开发流程。
| HCM511S 模块引脚号 | HCM511S-E 模块引脚号 | 引脚名 | 芯片引脚名 |
|---|---|---|---|
| - | 1 | GND | GND |
| - | 2 | ANT_BT | RF2G4 |
| 1 | 3 | GND | GND |
| 2 | 4 | VBAT | VBAT |
| 3 | 5 | SWCLK | PA01 |
| 4 | 6 | SWDIO | PA02 |
| 5 | 7 | RESET_N | RESET_N |
| 6 | 8 | GPIO2 | PA03 |
| 7 | 9 | GPIO3 | PA04 |
| 8 | 10 | GND | GND |
| 9 | 11 | GND | GND |
| 10 | 12 | GPIO1 | PA00 |
| 11 | 13 | GPIO6 | PB00 |
| 12 | 14 | GPIO7 | PB01 |
| 13 | 15 | GPIO8 | PB02 |
| 14 | 16 | GPIO14 | PD01 |
| 15 | 17 | GPIO13 | PD00 |
| 16 | 18 | GPIO9 | PC02 |
| 17 | 19 | GPIO10 | PC03 |
| 18 | 20 | GPIO11 | PC04 |
| 19 | 21 | GPIO12 | PC05 |
| 20 | 22 | GPIO4 | PA05 |
| 21 | 23 | GPIO5 | PA06 |
| 22 | 24 | USART_TXD | PC00 |
| 23 | 25 | USART_RXD | PC01 |
| 24 | 26 | RESERVED | RESERVED |
备注: 有关引脚详细信息,请参考相关硬件设计手册。
Bluetooth - SoC Blinky
本章节以开发名为 "bt_soc_blinky_511s" 的 SoC Blinky 应用程序为例,详细介绍应用程序的开发流程。此应用程序通过蓝牙连接实现对 HCM511S-TE-B 上 LED 灯亮灭的控制。需注意,HCM511S-TE-B 并无 LED 灯亮灭状态提示,是通过 LED 灯对应 GPIO 引脚的电平来体现的:低电平表示 LED 灯灭,高电平表示 LED 灯亮。
工程创建
在 Simplicity Studio 工具主界面的 "Debug Adapters" 区域找到当前使用的 J-Link 仿真器,右键单击 J-Link 仿真器,选择 "Device configuration"。

在弹出的配置界面的 "Target part" 文本框中,输入并选择模块对应的芯片型号,然后点击 "OK"。

在 Simplicity Studio 工具界面选中设备 → 选择 Gecko SDK Suite v4.2.3 → 点击 "Create New Project" → 在弹出的 "New Project Wizard" 中,按照提示操作进入 "Example Project Selection" 界面,勾选左下角的 "Bluetooth" → 选择 "Bluetooth-Soc Blinky" → 点击 "NEXT",进入 "Project Configuration" 界面。

在 "Project Configuration" 界面,设置工程名称为 "bt_soc_blinky_511s",选中 "Link sdk and copy project sources" 后,点击 "FINISH"。

创建的bt_soc_blinky_511s工程如下图所示。工程目录结构详细信息。

创建工程后,会弹出bt_soc_blinky_511s工程的readme文件,如下图所示:

创建 bootloader 工程。根据 readme 文件的内容,bt_soc_blinky_511s 工程需要一个 bootloader。所需的 bootloader 类型为 Bluetooth Apploader OTA DFU type bootloader。

- 点击工具界面右上方的“Launcher”可以切换至初始界面(点击“Simplicity IDE”则返回至开发环境)。

- 选中设备 -> 选择Gecko SDK Suite v4.2.3 -> 点击“Create New Project” -> 在“Example Project Selection”界面左侧“Filter on keywords”搜索框中输入“Bootloader”进行搜索 -> 选择“Bootloader-Soc Bluetooth AppLoader OTA DFU” -> 点击“Next”。

3) 在“Project Configuration”界面,设置工程名称为“bootloader-apploader_511s”(工程路径不可浏览,后续更改工程名称时,其路径会随着变化),选中“Link sdk and copy project sources”后,点击“FINISH”。

创建的bootloader-apploader_511s工程如下图所示:

工程配置
查找并安装所需组件。
在bt_soc_blinky_511s工程中找到bt_soc_blinky_511s.slcp。双击bt_soc_blinky_511s.slcp,进入“bt_soc_blinky_511s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“SWO”进行搜索,在搜索结果中选中“SWO Debug”,点击“Install”安装SWO Debug组件。

对未配置的组件进行配置。
- 双击bt_soc_blinky_511s.slcp,进入“bt_soc_blinky_511s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“io stream”进行搜索,在搜索结果中选中“IO Stream: USART”,点击“Configure”进入配置IO Stream: USART组件界面。

按照下图的红框1配置IO Stream: USART组件,然后点击“</> View Source”。

弹出如下图所示的sl_iostream_usart_vcom_config.h文件,配置IO Stream: USART组件后会生成下图红框内容:

2) 双击bt_soc_blinky_511s.slcp,进入“bt_soc_blinky_511s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“led”进行搜索,在搜索结果中选中“led1”,点击“Configure”进入配置Simple LED (led1)组件界面。

按照下图的红框1配置Simple LED (led1)组件,LED1引脚可配置成任一未使用的GPIO引脚,以PB00为例。然后点击“</> View Source”。

会弹出如下图所示的sl_simple_led_led1_config.h文件,配置Simple LED (led1)组件后会生成下图红框内容:

HCM511S-TE-B上只有一个复位按钮,没有其他按钮,需将btn0去除。具体如下:
- 双击bt_soc_blinky_511s.slcp,进入“bt_soc_blinky_511s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“button”进行搜索,在搜索结果中选中“Simple Button”,点击“Uninstall”。

2) 点击上图的“Uninstall”后,弹出下图所示界面,选中“btn0”,然后点击“Done”。

3) 在bt_soc_blinky_511s工程中找到app.c文件并双击打开,删除文件中的update_report_button_characteristic()。

4) 删除如下图所示的app.c文件中的sl_button_on_change()。

5) 参照下图在app.c文件中Toggle LED的上方添加红框中的内容。

6) 删除app.c文件中下图红框中所示内容。



其他配置。
打开GATT配置文件gatt_configuration.btconf,可查看具体配置,也可根据实际需求进行修改:展开目标工程 -> 展开config -> 展开btconf -> 双击gatt_configuration.btconf。


程序释义


Platform - Sleeptimer Bare-metal
本章以裸机环境下的定时器应用开发为例,通过示例程序 "sleeptimer_baremetal_511s" 详解应用程序开发流程。该示例创建了两个周期性定时器和一个单次定时器:单次定时器和一个周期定时器用于控制两个 LED 灯的状态(亮/灭),另一个周期定时器则用于打印前两个定时器的剩余时间。相关日志信息可在串口工具的调试窗口中查看。
需注意,HCM511S-TE-B 并无 LED 灯亮灭状态提示,是通过 LED 灯对应 GPIO 引脚的电平来体现的:低电平表示 LED 灯灭,高电平表示 LED 灯亮。
工程创建
- 参考前述步骤配置设备。
- 在 Simplicity Studio 工具界面选中设备 → 选择 Gecko SDK Suite v4.2.3 → 点击 "Create New Project" → 在弹出的 "New Project Wizard" 中,按照提示操作进入 "Example Project Selection" 界面,在左侧 "Filter on keywords" 搜索框中输入 "timer" 进行搜索 → 选择 "Platform - Sleeptimer Bare-metal" → 点击 "NEXT",进入 "Project Configuration" 界面。

- 在 "Project Configuration" 界面,设置工程名称为 "sleeptimer_baremetal_511s",选中 "Link sdk and copy project sources" 后,点击 "FINISH"。

创建的sleeptimer_baremetal_511s工程如下图所示。工程目录结构详细信息。

工程配置
查找并安装所需组件。
- 在sleeptimer_baremetal_511s工程中找到sleeptimer_baremetal_511s.slcp。双击sleeptimer_baremetal_511s.slcp,进入“sleeptimer_baremetal_511s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“io stream”进行搜索,在搜索结果中选中“IO Stream: USART”,点击“Install”安装IO Stream: USART组件。

2) 点击上图的“install”后弹出下图所示界面,在“INSTANCE NAME”下方将示例重命名为“vcom”,然后点击“Done”。

3) 双击sleeptimer_baremetal_511s.slcp,进入“sleeptimer_baremetal_511s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“SWO”进行搜索,在搜索结果中选中“SWO Debug”,点击“Install”安装SWO Debug组件。

对未配置的组件进行配置。
- 双击sleeptimer_baremetal_511s.slcp,进入“sleeptimer_baremetal_511s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“io stream”进行搜索,在搜索结果中选中“IO Stream: USART”,点击“Configure”进入配置IO Stream: USART组件界面。

按照下图的红框1配置IO Stream: USART组件,然后点击“</> View Source”。

弹出如下图所示的sl_iostream_usart_vcom_config.h文件,配置IO Stream: USART组件后会生成下图红框内容:

2) 双击sleeptimer_baremetal_511s.slcp,进入“sleeptimer_baremetal_511s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“led”进行搜索,在搜索结果中选中“led0”,点击“Configure”进入配置Simple LED (led0)组件界面。

按照下图的红框1配置Simple LED (led0)组件,LED0引脚可配置成任一未使用的GPIO引脚,以PB00为例。然后点击“</> View Source”。

会弹出如下图所示的sl_simple_led_led0_config.h文件,配置Simple LED (led0)组件后会生成下图红框内容:

3) 双击sleeptimer_baremetal_511s.slcp,进入“sleeptimer_baremetal_511s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“led”进行搜索,在搜索结果中选中“led1”,点击“Configure”进入配置Simple LED (led1)组件界面。

按照下图的红框1配置Simple LED (led1)组件,LED1引脚可配置成任一未使用的GPIO引脚,以PB01为例。然后点击“</> View Source”。

弹出如下图所示的sl_simple_led_led1_config.h文件,配置Simple LED(led1)组件后会生成下图红框内容:

HCM511S-TE-B上只有一个复位按钮,没有其他按钮,需将btn0和btn1去除。具体操作如下:

- 双击sleeptimer_baremetal_511s.slcp,进入“sleeptimer_baremetal_511s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“button”进行搜索,在搜索结果中选中“Simple Button”,点击“Uninstall”。

2) 点击上图的“Uninstall”后,弹出下图所示界面,选中“btn0”和“btn1”,然后点击“Done”。

3) 在sleeptimer_baremetal_511s工程中找到sleeptimer_app.c文件并双击打开,删除文件中的sl_button_on_change()。

4) 删除sleeptimer_app.c文件中下图红框中所示内容:


程序释义
- 应用程序启动

- 通过 app_init() 进行初始化

- app_process_action() 被不断循环执行

- sleeptimer_app_init() 执行 Log 打印等操作

- sleepertimer_app_process_action() 每秒打印定时器的剩余时间

Bluetooth - Soc Empty
Soc Empty 是一款面向蓝牙应用开发的极简项目框架,专为自定义蓝牙应用程序提供标准化起点。相较前述提供完整功能的示例工程,Soc Empty 仅提供基础通信架构,可作为独立蓝牙应用的开发模板:设备启动后自动进入广播模式,并在断开连接后立即恢复广播,开发者需基于此框架自行添加相应的功能代码并集成所需组件。
本章以构建支持 GPIO 外设控制的蓝牙应用(项目命名 "bt_soc_empty_hcm511s_led")为例,介绍基于 Soc Empty 框架的应用程序开发流程。
外设示例可参考如下 git 代码资源:https://github.com/SiliconLabs/peripheral_examples/tree/master/series2。
示例导入
示例导入步骤参考前述章节,用户可参考所导入的工程的源文件等内容配置用户自己的工程。
工程创建
参考前述步骤配置设备。
在 Simplicity Studio 工具界面选中设备 → 选择 Gecko SDK Suite v4.2.3 → 点击 "Create New Project" → 在弹出的 "New Project Wizard" 中,按照提示操作进入 "Example Project Selection" 界面,勾选左下角的 "Bluetooth" → 选择 "Bluetooth-Soc Empty" → 点击 "NEXT",进入 "Project Configuration" 界面。

在 "Project Configuration" 界面,设置工程名称为 "bt_soc_empty_hcm511s_led",选中 "Link sdk and copy project sources" 后,点击 "FINISH"。

创建的bt_soc_empty_hcm511s_led工程如下图所示。工程目录结构详细信息。

创建工程后,会弹出bt_soc_empty_hcm511s_led工程的readme文件,如下图所示:

创建 bootloader 工程。根据 readme 文件的内容,bt_soc_empty_hcm511s_led 工程需要一个 bootloader。所需的 bootloader 类型为 Bluetooth Apploader OTA DFU type bootloader。

工程配置
- 查找并安装所需组件。
- 在bt_soc_empty_hcm511s_led工程中找到bt_soc_empty_hcm511s_led.slcp。双击bt_soc_empty_hcm511s_led.slcp,进入“bt_soc_empty_hcm511s_led”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“delay”进行搜索,在搜索结果中选中“Microsecond Delay”,点击“Install”安装Microsecond Delay组件。

2) 双击bt_soc_empty_hcm511s_led.slcp,进入“bt_soc_empty_hcm511s_led”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“io stream”进行搜索,在搜索结果中选中“IO Stream: USART”,点击“Install”安装IO Stream: USART组件。

3) 点击上图的“Install”后弹出下图所示界面,在“INSTANCE NAME”下方将示例重命名为“vcom”,然后点击“Done”。

4) 双击bt_soc_empty_hcm511s_led.slcp,进入“bt_soc_empty_hcm511s_led”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“log”进行搜索,在搜索结果中选中“Log”,点击“Install”安装Log组件。

- 对未配置的组件进行配置。
双击bt_soc_empty_hcm511s_led.slcp,进入“bt_soc_empty_hcm511s_led”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“io stream”进行搜索,在搜索结果中选中“IO Stream: USART”,点击“Configure”进入配置IO Stream: USART组件界面。

按照下图的红框1配置IO Stream: USART组件,然后点击“</> view source”。

弹出如下图所示的sl_iostream_usart_vcom_config.h文件,配置IO Stream: USART组件后会生成下图红框内容:

- 在 main.c 文件中添加相应代码。

在main.c的while(1)部分添加如下内容:

程序释义

编译应用程序
HCM010S、HCM010S-E、HCM511S 和 HCM511S-E 模块的应用程序示例的编译步骤一致,本章节以 bt_soc_blinky_010s 工程为例展示编译步骤和编译结果。
编译说明
在 Simplicity Studio 工具界面选中目标工程,右键单击该工程并选择 "build project" 进行编译。

编译成功的界面如下图所示:

编译结果
编译过程中,将在 SimplicityStudio/v5_workspace/<project_name>/GNU ARM v10.3.1 -- Default(工程创建时所设置的工程路径)生成工程 .hex 文件,如下图所示。

烧录固件
本章节主要介绍如何烧录固件。烧录固件前,请检查 J-Link 仿真器接线是否准确,若接线无误,请先按下开发板上的复位按钮,然后再进行固件烧录。
对于 HCM010S 和 HCM010S-E 模块,在烧录前请参考前述章节配置 J-Link 仿真器;对于 HCM511S 和 HCM511S-E 模块,在烧录前请参考前述章节配置 J-Link 仿真器。
HCM010S/HCM010S-E 固件烧录
bt_soc_blinky_010s
根据 bt_soc_blinky_010s 的 readme 文件,在烧录 bt_soc_blinky_010s 的固件(.hex 文件)前,需要一个 bootloader,因此需先烧录编译 bootloader 工程(bootloader-apploader_010s)生成的固件,再烧录 bt_soc_blinky_010s 工程的固件。
- 点击 Simplicity Studio 工具界面 "Flash Programmer" 图标,打开 Flash Programmer 工具。

- 烧录固件(.hex 文件)前,先进行擦除操作。
- 打开 Flash Programmer 工具,点击工具界面的 "Advanced Settings...",在 "Advanced Settings" 弹窗中选择 "Full Erase",点击 "OK",然后点击工具界面的 "Erase" 按钮。

- 将擦除选项修改为 "Page Erase",点击 "OK"。

- 点击 "Browse..." 按钮,在弹出的 "Select File" 页面选择 bootloader 工程(bootloader-apploader_010s)的固件(.hex 文件),点击 "打开",然后点击工具界面的 "Program" 即可烧录 bootloader 工程固件。

- 点击 "Browse..." 选择 bt_soc_blinky_010s 工程的 .hex 文件,然后点击工具界面的 "Program" 即可烧录 bt_soc_blinky_010s 工程固件。

sleeptimer_baremetal_010s
- 参考前述步骤打开 Flash Programmer 工具。
- 参考前述步骤进行擦除操作。
- 参考前述步骤烧录 sleeptimer_baremetal_010s 工程的固件。
bt_soc_empty_hcm010s_led
- 参考前述步骤打开 Flash Programmer 工具。
- 参考前述步骤进行擦除操作。
- 参考前述步骤烧录 bootloader-apploader_010s 工程的固件。
- 参考前述步骤烧录 bt_soc_empty_hcm010s_led 的固件。
HCM511S/HCM511S-E 固件烧录
bt_soc_blinky_511s
- 参考前述步骤打开 Flash Programmer 工具。
- 参考前述步骤进行擦除操作。
- 参考前述步骤烧录 bootloader-apploader_511s 工程的固件。
- 参考前述步骤烧录 bt_soc_blinky_511s 的固件。
sleeptimer_baremetal_511s
- 参考前述步骤打开 Flash Programmer 工具。
- 参考前述步骤进行擦除操作。
- 参考前述步骤烧录 sleeptimer_baremetal_511s 工程的固件。
bt_soc_empty_hcm511s_led
- 参考前述步骤打开 Flash Programmer 工具。
- 参考前述步骤进行擦除操作。
- 参考前述步骤烧录 bootloader-apploader_511s 工程的固件。
- 参考前述步骤烧录 bt_soc_empty_hcm511s_led 的固件。
调试程序
HCM010S/HCM010S-E 调试程序
SoC Blinky
- 打开手机 EFR Connect APP 开启扫描,待扫描到 Blinky Example 后,点击 "CONNECT" 进行连接。

- 连接后,先点击 "Notify" 图标使能通知功能,再点击 "Write" 图标发送数据。

- 输入 hex 数据 0x01,选择 "Write with response (write request)",然后点击 "SEND" 发送该数据。此时可发现开发板上 LED1 灯(PD02)亮。

手机端APP收到通知数据如下图所示:

若发送数据 0x00,则 LED1 灯(PD02)灭。 - 在串口工具的调试窗口中可查看 Log。

Sleeptimer Bare-metal
设置三个计时器:1 个单次定时器和 2 个周期定时器。开发板复位后,单次定时器 10 秒后切换一次 LED1(PD03)的状态(亮/灭)。一个周期定时器每 10 秒切换一次 LED0(PD02)的状态(亮/灭),另一个周期定时器实现每 1 秒打印上述两个定时器的剩余时间。可通过串口调试窗口查看 Log。

Soc Empty
复位开发板,串口调试工具输出相应 Log,开发板上的 3 个 LED 灯(PD02、PD03 和 PD04)将依次点亮,随后同步熄灭并循环此流程。

HCM511S/HCM511S-E 调试程序
SoC Blinky
打开手机 EFR Connect APP 开启扫描,待扫描到 Blinky Example 后,点击 "CONNECT" 进行连接。

连接后,先点击 "Notify" 图标使能通知功能,再点击 "Write" 图标发送数据。

输入数据 0x01,选择 "Write with response (write request)",然后点击 "SEND" 发送该数据。此时 LED0 亮,表现为开发板上 PB00 为高电平。

手机端APP收到通知数据如下图所示:

若发送数据0x00,则LED0灭,表现为开发板上PB00为低电平。
在串口工具的调试窗口中可收到下图所示Log:

用逻辑分析仪测量到的LED0对应的电平变化如下:

Sleeptimer Bare-metal
设置三个计时器:1 个单次定时器和 2 个周期定时器。开发板复位后,单次定时器在 10 秒后切换一次 LED1 的状态为亮/灭,即在 10 秒后切换一次 PB01 的电平值。一个周期定时器每 10 秒切换一次 LED0 的状态为亮/灭,即每 10 秒切换一次 PB00 的电平值。另一个周期定时器实现每 1 秒打印上述两个定时器的剩余时间。可通过串口调试窗口查看 Log。

用逻辑分析仪测量到的LED0和LED1对应的电平变化如下:

Soc Empty
复位开发板,串口调试工具输出相应 Log。LED0 亮 0.5 秒后再灭 0.5 秒,表现为开发板上的 PB00 保持 0.5 秒的高电平后再设置 0.5 秒的低电平,循环此过程。

用逻辑分析仪测量到的LED0对应的电平变化如下:

OTA 和移远通信 MAC 地址
OTA
OTA 服务
在使用 Simplicity Studio 创建蓝牙项目时一般会自动添加 OTA 服务,用户可在 config//btconf//gatt_configuration.btconf 文件中查看相关 OTA 服务,如下图所示。

通过 OTA 服务进入 Bluetooth Apploader OTA DFU type bootloader 中进行 OTA 升级,以 HCM010S 模块为例,升级流程如下图所示:

OTA 升级
本章以 SoC Blinky 工程为例,介绍 OTA 升级的步骤。
烧录SoC Blinky工程的固件和bootloader工程的固件
右击“此电脑”->“属性”->“高级系统设置”-> “环境变量(N)…”-> “新建(N)…”,然后参照下图添加环境变量。
新建用户变量PATH_GCCARM并将变量值设置为本地路径C:/SiliconLabs/SimplicityStudio/v5/developer/toolchains/gnu_arm/10.3_2021.10:

新建用户变量PATH_SCMD并将变量值设置为本地路径C:/SiliconLabs/SimplicityStudio/v5/developer/adapter_packs/commander:

在 SoC Blinky 工程所在的路径下,双击 create_bl_files.bat 文件后,自动生成 output_gbl 文件夹,拷贝其中的 application.gbl 文件至手机目标文件夹。


打开手机 EFR Connect APP,开启扫描,待扫描到 Blinky Example 后,点击 "CONNECT" 进行连接。然后点击 "OTA Firmware" 进行 OTA 升级。在弹出的 "OTA Device Firmware Update" 界面的 "Application" 文本框中选择 "application.gbl",最后点击 "Upload"。




如果出现异常情况导致升级中断,可在扫描界面选择名为 "OTA" 的设备,再点击 "CONNECT" 进行重新升级。

移远通信 MAC 地址
模块默认使用芯片厂商的 MAC 地址,用户也可以选择使用移远通信的 MAC 地址。移远通信的 MAC 地址信息存放在芯片内置 Flash 的 FLASH_USERDATA 区域,如下图所示。

执行如下步骤使用移远通信 MAC 地址。
- 在用户创建的工程的 app.c 文件中添加如下代码。
typedef struct tag_quec_mac_info{
uint8_t mac_flag[2];
bd_addr mac;
}QUEC_MAC_INFO_T;
void flash_param_read(uint8_t *buffer , uint32_t len)
{
memcpy(buffer,(void *)(USERDATA_BASE) , len);
}
int quec_get_mac(bd_addr *addr)
{
QUEC_MAC_INFO_T _mac_info;
flash_param_read((uint8_t *)&_mac_info,sizeof(QUEC_MAC_INFO_T));
if(_mac_info.mac_flag[0] != 0xAA || _mac_info.mac_flag[1] != 0xAA)
return -1;
addr->addr[0] = _mac_info.mac.addr[5];
addr->addr[1] = _mac_info.mac.addr[4];
addr->addr[2] = _mac_info.mac.addr[3];
addr->addr[3] = _mac_info.mac.addr[2];
addr->addr[4] = _mac_info.mac.addr[1];
addr->addr[5] = _mac_info.mac.addr[0];
return 0;
}
- 在 app.c 文件的 sl_bt_on_event() 里的 sl_bt_evt_system_boot_id 事件中添加如下代码。
case sl_bt_evt_system_boot_id:
{
......
uint8_t type = 0;
bd_addr get_addr;
if(!quec_get_mac(&get_addr))
{
// Using Quectel MAC address
sl_bt_system_set_identity_address(get_addr,0);//0 mean public address
}
else
{
// Using Default Silicon labs Mac address
sl_bt_system_get_identity_address(&get_addr,&type);
}
sl_bt_system_get_identity_address(&get_addr,&type);
......
}break;
- 将 bootloader 工程里 ./config/btl_apploader_config.h 文件里的宏 BTL_APPLOADER_USE_CUSTOM_ADDRESS 由 0 修改为 1。

- 在bootloader工程中修改./gecko_sdk_4.2.3/platform/bootloader/communication/ apploader/btl_apploader_common.c文件中的bootloader_apploader_get_custom_device_address(),具体修改如下所示。
#define MFG_CUSTOM_EUI_64_OFFSET 0x0000
SL_WEAK void bootloader_apploader_get_custom_device_address(sl_apploader_address_t *btAddress)
{
uint8_t *mfgToken = (uint8_t*)USERDATA_BASE + MFG_CUSTOM_EUI_64_OFFSET;
uint8_t mfgAddressType = 0;
uint8_t *mac_flag = &mfgToken[0];
uint8_t *mfgAddress = &mfgToken[2];
uint8_t mfgAddressLen = sizeof(btAddress->address);
if(mac_flag[0] == 0xAA && mac_flag[1] == 0xAA)
{
//Adjust token byte Endianness
for (uint8_t i = 0; i < mfgAddressLen; i++) {
btAddress->address[i] = mfgAddress[(mfgAddressLen - 1) - i];
}
}
if (mfgAddressType == 0) {
btAddress->type = sl_apploader_address_type_public;
} else if (mfgAddressType == 1) {
btAddress->type = sl_apploader_address_type_random;
} else {
// if invalid address type assume public
btAddress->type = sl_apploader_address_type_public;
}
}
附录 参考文档及术语缩写
参考文档
| 文档名称 |
|---|
| 1. Quectel_HCM010S-TE-B_User_Guide |
| 2. Quectel_HCM511S-TE-B_User_Guide |
| 3. Quectel_HCM010S-E-TE-B_User_Guide |
| 4. Quectel_HCM511S-E-TE-B_User_Guide |
| 5. Quectel_HCM010S_硬件设计手册 |
| 6. Quectel_HCM010S-E_硬件设计手册 |
| 7. Quectel_HCM511S_硬件设计手册 |
| 8. Quectel_HCM511S-E_硬件设计手册 |
术语缩写
| 缩写 | 英文全称 | 中文全称 |
|---|---|---|
| APP | Application | 应用程序 |
| DFU | Device Firmware Update | 设备固件升级 |
| GATT | Generic Attribute Profile | 通用属性协议 |
| GND | Ground | 地 |
| GPIO | General-Purpose Input/Output | 通用型输入/输出 |
| IDE | Integrated Development Environment | 集成开发环境 |
| LED | Light Emitting Diode | 发光二极管 |
| MAC | Medium Access Control | 媒体访问控制 |
| OTA | Over-the-air programming | 空中编程 |
| PC | Personal Computer | 个人电脑 |
| RTOS | Real-Time Operating System | 实时操作系统 |
| SDK | Software Development Kit | 软件开发工具包 |
| USART | Universal Synchronous/Asynchronous Receiver/Transmitter | 通用同步/异步串行接收/发送器 |
| USB | Universal Serial Bus | 通用串行总线 |