【免费下载链接】TobudOS
TobudOS 是面向物联网领域开发的实时操作系统,早期版本基于腾讯自研的物联网操作系统TencentOS Tiny,2020年由腾讯捐赠到开放原子开源基金会进行孵化,2023年正式更名为TobudOS,TobudOS具有低功耗,低资源占用,模块化,安全可靠等特点,可有效提升物联网终端产品开发效率,提供精简的 RTOS 内核,内核组件可裁剪可配置,可快速移植到多种主流 MCU (如 STM32 全系列) 及模组芯片上。而且,基于 RTOS 内核提供了丰富的物联网组件,内部集成主流物联网协议栈(如 CoAP/MQTT/TLS/DTLS/LoRaWAN/NB-IoT 等),可助力物联网终端设备及业务快速接入物联网云平台。
本篇指南以 ST P-NUCLEO-LRWAN3 开发套件为载体,完整讲解如何在 TobudOS(原 TencentOS tiny)上搭建 LoRaWAN 节点与网关的开发环境、运行基础内核实验,并通过 AT 框架驱动 RHF76 LoRaWAN 模组,将一台 LoRa 温湿度传感器接入腾讯云物联网开发平台(IoT Explorer)。读完本文,你将掌握 LoRaWAN 节点/网关的硬件构成、MDK 开发环境搭建、设备数据解析脚本的编写与模拟测试,以及设备在线调试的完整闭环操作。
1. ST P-NUCLEO-LRWAN3 套件简介
P-NUCLEO-LRWAN3 是一套完整的 LoRaWAN 评估套件,同时包含网关和节点,用于评估 LoRaWAN 网络。使用该套件,用户可以轻松搭建 LPWAN 网络,学习 LoRaWAN 技术,并了解如何在自有应用程序中使用 LoRaWAN。
- LoRa 网关套件:由 ST Nucleo-F746ZG 底板和瑞兴恒方基于 Semtech SX1301 的 LRWAN_GS 模块组成。
- ST Nucleo LoRa 节点套件:由 LRWAN_NS1 扩展板和 ST Nucleo-L073 底板组成。LRWAN_NS1 扩展板集成瑞兴恒方的 RHF0M003 LoRaWAN 模组,并集成了4 个 I2C 传感器件:
- 温湿度传感器 HTS221;
- 气压传感器 LPS22HB;
- 3 轴磁力传感器 LIS3MDL;
- 6 轴姿态传感器 LSM6DS3。
说明:当前仓库中,LoRaWAN 例程所驱动的模组为瑞兴恒方RHF76(见 devices/rhf76_lora/RHF76.h),它属于同一 RHF0M 系列 LoRaWAN 模组,通过串口 AT 指令与 MCU 交互。文档中节点所用 RHF0M003 与例程所用 RHF76 的 AT 指令集一致,均可直接套用下文 4.4 节的节点例程。
2. LoRaWAN 节点硬件详解
2.1 NUCLEO-L073RZ:基于 Cortex-M0+ 的评估板
NUCLEO-L073RZ 基于 NUCLEO 64 公版 PCB 设计,可以方便地更换 ST 的其它 64 PIN MCU。主要特性:
- LQFP64 封装的 STM32-L073RZT6 MCU;
- 20KB SRAM、192KB Flash、6KB data EEPROM;
- 两种扩展接口:Arduino UNO 扩展接口、STM32 MORPHO 扩展接口;
- 板载 ST-LINK/V2-1 调试/编程器;
- 灵活的供电方式选择;
- 板载 3 个 LED:LD1、LD3 指示工作状态,LD2 为用户可编程 LED;
- 两个按键:复位键与用户可编程按键;
- USB 重枚举能力,支持 VCP、MSD、DEBUG 功能;
- 支持大量 IDE 开发环境。
对应 Cortex-M0+ 内核的 TobudOS 移植代码位于 arch/arm/arm-v6m 与 arch/arm/arm-v7m/cortex-m0+,说明该内核系列在 TobudOS 中被完整支持。
2.2 LRWAN_NS1 扩展板硬件
1)扩展板接口兼容 Arduino UNO 接口。
2)扩展板同一个 I2C 端口上挂载了 4 个 I2C 传感器(HTS221、LPS22HB、LIS3MDL、LSM6DS3),原理图分别见 nucleo_extend_hts221.png、nucleo_extend_lps22hb.png、nucleo_extend_lis3mdl.png、nucleo_extend_lsm6ds3.png。
3)LoRaWAN 通信模组电路原理图见 nucleo_extend_lora_module.png,模组通过 UART 与 MCU 通信,由 MCU 侧 AT 框架统一管理。
3. LoRaWAN 节点软件开发环境准备
3.1 MDK 软件介绍与安装
MDK(RealView MDK / MDK-ARM)是 ARM 公司基于 uVision 界面推出的嵌入式软件开发工具,面向 ARM7、ARM9、Cortex-M 系列处理器。MDK 包含工业标准的 Keil C 编译器、宏汇编器、调试器、实时内核等组件,支持所有基于 ARM 的设备。
安装要点:
- 从 Keil 官网下载 MDK 软件,版本最好是 5.24 及以上(教程以 5.24 版本为例);
- 双击安装文件,一路 Next,勾选
I agree同意安装协议; - 选择安装路径(默认或自建目录均可);
- 填写用户信息后继续 Next,等待安装完成,点击 Finish;
- 特别提示:必须输入正版 License 激活 MDK 软件(进入 License Management 导入 License)。
3.2 Pack 安装
安装完 MDK 后,需要安装开发套件中单片机型号对应的 Pack(本例为 STM32L0 系列,对应Keil.STM32L0xx_DFP.2.0.0.pack)。两种方式:
- 方式一(离线):从官网 Pack 下载页面下载对应
.pack文件后直接安装; - 方式二(在线):打开 MDK 的 Pack Installer 界面,选择
STM32L0xxPack,点击 Install 在线安装。
安装完成后重启 MDK 即可使用。
3.3 ST-Link 驱动安装
开发板选用 ST 公司的 ST-Link V2 仿真器进行程序烧写与仿真:
- 从 ST 官网下载 ST-Link 驱动(
stsw-link009),驱动分两种:32 位系统安装dpinst_x86,64 位系统安装dpinst_amd64; - 运行对应驱动安装,安装路径尽量保持默认;
- 将 ST-Link 通过 USB 连接电脑,打开"设备管理器",看到对应设备即表示驱动安装成功。
两点提醒:
- 不同 Windows 版本的设备名称和所在设备管理器栏目可能不一样(例如 WIN10 下显示为
STM32 STLINK); - 若设备名称旁显示黄色感叹号,请右键设备名称,选择"更新驱动程序"。
3.4 MDK 工程配置(仿真器设置)
驱动安装成功后,在 MDK 中配置程序烧写与仿真环境:
- 点击工程配置按钮进入工程配置界面;
- 选择Debug选项,进入仿真器设置界面;
- 下拉仿真器列表,选择ST-Link Debugger并勾选右侧Use,点击Settings进入 ST-Link V2 配置界面;
- 开发板程序烧录方式为 SW,因此Unit 选择 ST-Link/V2、Port 选择 SW,并确认右侧框内检测出 SW 设备,点击"确认"保存配置。
3.5 串口调试助手的使用
串口调试助手(如 sscom5.13.1)为免安装软件,解压即可使用。操作步骤:
- 打开电脑设备管理器,在端口列表查看 PC 与开发板连接的端口号(示例中为 COM6);
- 在串口工具中选择对应端口;
- 开发板程序波特率设置为115200,因此串口工具中选择 115200 波特率。
4. TobudOS 基础内核实验:HelloWorld
4.1 打开与编译工程
TobudOS(原 TencentOS tiny)官方开源仓库源码根目录为TobudOS/。当前仓库中,hello_world 示例源码位于 examples/hello_world/hello_world.c,对应的板级 KEIL 工程可参考 board/BearPi_STM32L431RC/KEIL/hello_world 等目录。
该示例创建了两个 TencentOS tiny 任务,交替运行打印消息:
void task1_entry(void *arg) { while (1) { printf("###I am task1\r\n"); tos_task_delay(2000); } } void task2_entry(void *arg) { while (1) { printf("***I am task2\r\n"); tos_task_delay(1000); } } void application_entry(void *arg) { tos_task_create(&task1, "task1", task1_entry, NULL, 3, task1_stk, TASK1_STK_SIZE, 0); tos_task_create(&task2, "task2", task2_entry, NULL, 3, task2_stk, TASK2_STK_SIZE, 0); }打开工程后,展开工程导航中的 examples 目录即可看到源码。点击 MDK 工具栏编译按钮(Rebuild All)编译整个工程。
4.2 下载与运行
- 先配置下载环境:进入 Debug 设置,选择 ST-Link Debugger,并将 Flash Download 配置为对应的 STM32L0 器件算法;
- 编译完成后点击工具栏LOAD按钮下载程序;
- 连接好串口,在 PC 串口助手中即可看到两个任务交替运行、打印消息并完成计数,输出形式类似:
###I am task1 ***I am task2 ***I am task2 ###I am task1 ...(task1 每 2 秒打印一次,task2 每 1 秒打印一次,符合tos_task_delay的延时设定。)
更多 TobudOS 基础内核的使用可参考内核开发指南:doc/04.Development_Manual.md 与 SDK 文档:doc/05.SDK_Manual.md。
5. 使用 AT 框架驱动 LoRaWAN 节点对接腾讯云 IoT Explorer
本节实验场景:一台 LoRa 温湿度传感器接入物联网开发平台,通过平台远程查看传感器的温度、湿度,并可远程配置传感器的上报周期。整体链路为:
LoRa 节点(RHF76 模组) ⇄ LoRa 网关(LRWAN_GS) ⇄ 腾讯云物联网开发平台 (AT 框架驱动) (UDP 透传) (控制台/数据解析)5.1 控制台操作:LoRa 节点
创建项目和产品
- 登录物联网开发平台控制台,选择【新建项目】;
- 填写项目基本信息后保存:项目名称输入"LoRa 温湿度传感器演示"(或其他名称),项目描述按实际需求填写;
- 项目新建成功后,即可新建产品。
新建产品
- 进入项目产品列表页,单击【新建产品】;
- 填写产品基本信息:
- 产品名称:输入"温湿度传感器"或其他名称;
- 产品类型:选择"温湿度传感器";
- 认证方式:选择"密钥认证";
- 通信方式:选择LoRaWAN;
- 产品新建成功后,可在产品列表页查看该产品。
创建数据模板
单击产品名称进入产品配置页,在【自定义功能】下单击【新建功能】,自定义产品功能。本示例需要 3 个属性,与 examples/LoRaWAN/lora_demo.c 头部注释中的数据模板一一对应:
| 类型 | 名称 | 标识符(Token) | 数据类型 | 读写 | 属性 |
|---|---|---|---|---|---|
| property | temperature | temperature | integer | 只读 | range: [-100, 155],unit: centigrade |
| property | humidity | humidity | integer | 只读 | range: [0, 100],unit: % |
| property | report_period | period | integer | 读写 | range: [0, 3600],unit: second |
配置 LoRaWAN 参数
在设备开发页面中按需调整 LoRaWAN 参数配置,本示例使用默认的OTAA入网配置。
设备数据解析
LoRa 类资源受限设备不适合直接传输 JSON 格式数据,因此平台提供"设备数据解析"能力,将设备原始数据(字节流)转化为产品 JSON 数据。
设备数据协议:
- 设备上行数据共 4 字节:第 1 字节为温度,第 2 字节为相对湿度,第 3、4 字节为上报周期(单位秒);
- 设备下行数据为 2 字节:上报周期(单位秒)。
上行数据解析脚本:主函数为RawToProtocol,入参为fPort(设备上报的 LoRaWAN 协议数据的 FPort 字段)和bytes(FRMPayload 字段),出参为产品数据模板协议格式的对象:
function RawToProtocol(fPort, bytes) { var data = { method: "report", clientToken: new Date(), params: {}, }; data.params.temperature = bytes[0]; data.params.humidity = bytes[1]; data.params.period = bytes[2] | (bytes[3] << 8); return data; }这段脚本与节点端 examples/LoRaWAN/lora_demo.c 中dev_data_t的打包顺序完全对应——节点将temperature、humidity各占 1 字节、period占 2 字节(小端)序列化后经tos_lora_module_send上报。
下行数据解析脚本:主函数为ProtocolToRaw,入参为产品数据模板协议格式的对象,出参为至少 3 个字节的数组:
- 第 1 字节:下发给设备的 LoRaWAN 协议数据的 FPort 字段;
- 第 2 字节:MType(0 表示 Unconfirmed Data Down,1 表示 Confirmed Data Down);
- 第 3 字节起:FRMPayload 字段。
function ProtocolToRaw(obj) { var data = new Array(); data[0] = 5; // fport=5 data[1] = 0; // unconfirmed mode data[2] = obj.params.period & 0x00ff; data[3] = (obj.params.period >> 8) & 0x00ff; return data; }脚本模拟测试:在数据解析页面下方的模拟调试工具中验证脚本。
- 上行消息:设备原始数据
0x113DB80B转为数组为[17, 69, 30, 0](对应温度 17、湿度 69、周期 30 秒,bytes[2] | (bytes[3] << 8) = 30),填入上行数据编辑框后单击【运行】,右侧即可查看解析结果; - 下行消息:填入
{"params": {"period": 15}},验证下行解析输出为 4 字节数组[5, 0, 15, 0](fport=5、非确认模式、period 小端两字节)。
数据解析脚本配置界面如下图所示:
创建测试设备
在设备调试页面单击【新建设备】,设备名设为dev001。DevEUI 等信息可从 LoRa 节点开发板背面贴纸上获取。
5.2 控制台操作:LoRa 网关
- 登录物联网开发平台控制台,选择上文对应的项目;
- 在左侧工具列表中选择【服务中心】>【LoRa 网关管理】;
- 进入 LoRa 网关管理页面,选择【添加网关】;
- 填写网关基本信息:
- 网关名称:本示例填写 GW1;
- GwEUI:网关唯一 ID。本例根据 ST NUCLEO LoRa GW 背部的 MAC 地址,将 6 字节 MAC 地址的中间补足
0xffff得到; - 是否公开:选择"是",表示社区开发者可在社区网络查看该网关,并可通过该网关进行 LoRa 节点接入;选择"否",则仅用户自己能查看该网关;
- 网关新建成功后,可在网关列表页查看 GW1。
5.3 LoRa 网关实物操作
硬件连接
整个系统由 LRWAN_GS_LF1 网关(网关模组 + STM32F746 Nucleo 核心板)、5V 适配器和电脑组成:
- 使用 5V 适配器通过 USB 线连接到网关模组的 Micro USB 接口,为整个网关供电;
- Nucleo 核心板上的 Micro USB 口(非以太网口一侧)通过 USB 线连接 PC,实现虚拟串口功能;
- 网关开发板通过网线连接上一级路由器的 LAN 口,通过 DHCP 方式连接以太网。
串口准备
- 硬件连接成功后,打开 PC 设备管理器查看网关对应串口(请确保已安装 ST-Link 驱动);
- 打开串口工具并配置:端口号(示例为 COM5)、波特率 115200,然后打开串口。
配置修改
- 按上图完成硬件连接和系统搭建;
- 配置服务器地址:本示例设置为腾讯云物联网开发平台的 LoRa 服务器地址(接入域名
loragw.things.qcloud.com,接入端口 1700):
AT+PKTFWD=loragw.things.qcloud.com,1700,1700- 配置频率计划:调整频点信息到 486.3MHz ~ 487.7MHz,指令需要逐条发送:
AT+CH=0,486.3,A AT+CH=1,486.5,A AT+CH=2,486.7,A AT+CH=3,486.9,A AT+CH=4,487.1,B AT+CH=5,487.3,B AT+CH=6,487.5,B AT+CH=7,487.7,B AT+CH=8,OFF AT+CH=9,OFF- 其他指令:
AT+log=on:打开网关日志;AT+EUI:查询网关 ID。
运行
通过AT+Reset复位网关,开始服务器连接。从串口日志查看:
LORAWAN SERVER: loragw.things.qcloud.com表明服务器地址修改成功。
Ethernet started DHCP IP: 192.168.3.249 Downlink UDP Connected Uplink UDP Connected表明网关 DHCP 入网成功,网络连接正常。
5.4 LoRa 节点实物操作
Step 1:下载 LoRaWAN 例程
当前仓库中,LoRaWAN 示例源码位于 examples/LoRaWAN/lora_demo.c 与 examples/LoRaWAN/lora_demo.h,对应板级 KEIL 工程可参考 board/TencentOS_tiny_EVB_MX_Plus/KEIL/lorawan 等目录。示例工程包含 STM32L073 外设驱动、TobudOS 内核、AT 框架、RHF76 LoRaWAN 模组驱动与 LoRaWAN 示例案例。
Step 2:代码修改
1)修改 examples/LoRaWAN/lora_demo.c 中的入网参数,填入节点对应的DevEUI 和 AppKEY(可从 LoRa 节点开发板背面贴纸获取):
tos_lora_module_join_otaa("8cf957200000f806", "8cf957200000f8061b39aaaaad204a72");2)修改 devices/rhf76_lora/RHF76.h 中的信道设置宏。文档示例原计划使用 80~87 信道:
#define RHF76_ATCMD_SET_CHANNEL "at+ch=num,80-87\r\n"(注意:当前仓库的 RHF76.h 中该宏默认已是at+ch=num,80-87\r\n,如你的模组需要其它信道区间,按需调整即可。)
Step 3:编译
单击 MDK 工具栏【Rebuild All】编译整个工程。
Step 4:下载
单击 MDK 工具栏【Download】下载编译好的固件。
查看运行结果
- 节点下载好固件后会自动重启运行,从串口即可查看设备运行日志;
- 看到如下日志,即说明 LoRa 节点已经通过网关成功入网:
--->+JOIN: Network joined --->+JOIN: NetID 000035 DevAddr 6B:CC:9B:5D从源码角度看,这段入网流程由 devices/rhf76_lora/RHF76.c 中的rhf76_join_otaa()完成:依次执行设置 LWOTAA 模式(AT+MODE=LWOTAA)、写入 DevEUI(AT+ID="deveui","...")、写入 AppKey(AT+KEY="appkey",...),等待 2 秒后发送AT+join并期望回显+JOIN: Network joined。
5.5 查看设备状态
- 保持 LoRa 节点和 LoRa 网关为运行状态;
- 进入【控制台】>【产品开发】>【设备调试】,可查看到设备
dev001; - 单击【调试】进入设备详情页;
- 单击【设备属性】,可查询设备上报到开发平台的最新数据及历史数据:
- 设备属性的最新值:显示设备上报的最新数据;
- 设备属性的更新时间:显示数据的更新时间;
- 单击【查看】,可查看某个属性的历史上报数据。
5.6 查看设备通信日志
单击【设备日志】,可查询该设备某段时间范围内的所有上下行数据:
- 上行:设备端上报到开发平台的数据;
- 下行:从开发平台下发到设备的数据。
5.7 在线调试(远程修改上报周期)
- LoRa 节点成功连接平台后,在控制台【设备调试】列表单击【调试】进入在线调试;
- 将"上报周期"设置为 15 秒,单击【发送】;
- 查看 LoRa 节点串口日志,可看到已成功接收下发的数据。
注意:本示例的 LoRa 节点是LoRaWAN Class A 类设备,这类设备不会立即收到下行数据,需要在节点有数据上行后,服务器才会向该设备下发数据。因此,在 LoRa 节点上报数据之后,才能看到下发的周期调整命令。
节点串口会显示如下日志,表示下发指令已成功到达设备端:
rhf76_incoming_data_process 4: 0F00 len: 2 data[0]: 15 data[1]: 0 report_period: 156. 从源码理解 AT 框架与 LoRaWAN 模组驱动
6.1 模组驱动统一抽象:lora_module_t
TobudOS 通过 net/lora_module_wrapper/lora_module_wrapper.h 定义了 LoRa 模组驱动的统一接口lora_module_t,屏蔽不同 LoRa 模组的差异:
typedef struct lora_module_st { int (*init)(void); int (*join_otaa)(const char *deveui, const char *appkey); int (*join_abp)(const char *deveui, const char *devaddr, const char *nwkskey, const char *appskey); int (*send)(const void *buf, size_t len); int (*send_unconfirmed)(const void *buf, size_t len); int (*close)(void); lora_recv_callback_t recv_callback; } lora_module_t;devices/rhf76_lora/RHF76.c 中,RHF76 模组通过lora_module_rhf76这个结构体实例接入该框架;rhf76_lora_init()完成三件事:
int rhf76_lora_init(hal_uart_port_t uart_port) { tos_at_init(uart_port, rhf76_at_event, sizeof(rhf76_at_event) / sizeof(rhf76_at_event[0])); tos_stopwatch_delay_ms(1000); tos_lora_module_register(&lora_module_rhf76); tos_lora_module_init(); }tos_at_init():初始化 AT 框架并注册事件表;tos_lora_module_register():注册 RHF76 模组驱动;tos_lora_module_init():调用rhf76_init(),依次执行退出低功耗、复位、设置 Class A、设置 CN470 频段、设置信道、关闭 ADR、设置非确认消息重发次数等初始化序列(对应 RHF76.c 中的rhf76_init())。
6.2 应用层调用链
在 examples/LoRaWAN/lora_demo.c 的application_entry()中,应用只需 4 行代码即可完成整个 LoRaWAN 业务:
rhf76_lora_init(HAL_UART_PORT_1); tos_lora_module_recvcb_register(recv_callback); tos_lora_module_join_otaa("8cf957200000fa57", "8cf957233333fa572059eeeeed204a72"); while (1) { /* 采集并打包温度、湿度、周期 */ dev_data_wrapper.u.dev_data.temperature = temperature / 10; dev_data_wrapper.u.dev_data.humidity = humidity / 10; dev_data_wrapper.u.dev_data.period = report_period; tos_lora_module_send(dev_data_wrapper.u.serialize, sizeof(dev_data_t)); tos_task_delay(report_period * 1000); }tos_lora_module_recvcb_register()注册下行数据回调recv_callback,其解析逻辑与 5.1 节的下行协议一致:单字节则report_period = data[0],两字节则report_period = data[0] | (data[1] << 8);tos_lora_module_send()内部调用rhf76_send(),将 4 字节业务数据转为十六进制 ASCII 字符串,通过AT+CMSGHEX="..."发送并等待+CMSGHEX: ACK Received回显确认;- 节点按
report_period秒周期循环上报,实现"平台远程修改上报周期"的闭环。
6.3 AT 事件驱动:下行数据的接收
AT 框架(见 net/at/include/tos_at.h)维护一个事件表,模组主动上报的 URC 消息会触发对应回调。RHF76 的接收事件注册为:
at_event_t rhf76_at_event[] = { { "+CMSGHEX: PORT:", rhf76_incoming_data_process }, { "+MSGHEX: PORT:", rhf76_incoming_data_process } };rhf76_incoming_data_process()从串口读取"引号包裹的十六进制数据,转换为字节流后回调到recv_callback,最终落到report_period的更新上。这也是 5.7 节在线调试中rhf76_incoming_data_process 4: 0F00日志的来源(0F00即 period=15 的小端两字节)。
6.4 更多 LoRaWAN 工程参考
仓库中还提供了多种基于 RHF76/RHF0M 模组的 LoRaWAN 工程变体,可作进一步参考:
- board/TencentOS_tiny_EVB_MX_Plus/BSP/LoRaWAN/lora_demo.c:在 LoRaWAN 上报基础上叠加了 shell 交互与消息队列,发送失败连续超过 10 次会触发系统复位重连;
- board/TencentOS_tiny_EVB_LX/BSP/LoRaWAN/lora_demo.c:RISC-V 平台(EVB_LX)的对应版本;
- board/TencentOS_Tiny_EVB_STM32WL/KEIL/lorawan:基于 STM32WLE5(单芯片集成 Cortex-M4 与 SX126x IP)的 LoRaWANOpenCPU方案,即 MCU 与射频集成在同一芯片内,其快速入门文档见 doc/26.TencentOS_tiny_EVB_WL_Quick_Start.md。
7. 常见问题排查
- 节点始终无法入网(未出现
+JOIN: Network joined):检查 DevEUI/AppKey 是否与节点背面贴纸一致、控制台设备是否为 OTAA 入网方式、网关是否已入网且服务器地址配置正确、节点信道(at+ch=num,80-87)是否与网关频点(486.3MHz ~ 487.7MHz)匹配。 - 控制台下发后节点收不到数据:LoRaWAN Class A 设备只能在上行后的接收窗口收下行数据,请先确认节点有数据上报(串口可见
+CMSGHEX: ACK Received),再在控制台发送下行指令。 - 串口无输出:确认串口工具端口号与波特率(115200)正确,ST-Link 驱动已安装,且设备管理器无黄色感叹号。
- 编译报器件型号错误:确认已安装对应 MCU 的 Pack(STM32L0 系列对应
Keil.STM32L0xx_DFP),并在 MDK Options for Target 中正确选择 Device。
【免费下载链接】TobudOS
TobudOS 是面向物联网领域开发的实时操作系统,早期版本基于腾讯自研的物联网操作系统TencentOS Tiny,2020年由腾讯捐赠到开放原子开源基金会进行孵化,2023年正式更名为TobudOS,TobudOS具有低功耗,低资源占用,模块化,安全可靠等特点,可有效提升物联网终端产品开发效率,提供精简的 RTOS 内核,内核组件可裁剪可配置,可快速移植到多种主流 MCU (如 STM32 全系列) 及模组芯片上。而且,基于 RTOS 内核提供了丰富的物联网组件,内部集成主流物联网协议栈(如 CoAP/MQTT/TLS/DTLS/LoRaWAN/NB-IoT 等),可助力物联网终端设备及业务快速接入物联网云平台。
相关推荐
TobudOS(TencentOS Tiny)CH32V307 RISC-V 开发板入门与腾讯云 IoT Explorer 对接实战指南
TobudOS(TencentOS Tiny)CH32V307 RISC V 开发板入门与腾讯云 IoT Explorer 对接实战指南 本文是 CH32V_E
基于 STM32G0 与 TencentOS Tiny 的物联网智能灯实战:腾讯云 IoT Explorer 全流程接入指南
基于 STM32G0 与 TencentOS Tiny 的物联网智能灯实战:腾讯云 IoT Explorer 全流程接入指南 本篇技术指南围绕 TobudOS
OfficeCLI 股票图实战:用 `chartType=stock` 在 PowerPoint 中生成 HLC 与 OHLC 图表
OfficeCLI 股票图实战:用 chartType=stock 在 PowerPoint 中生成 HLC 与 OHLC 图表 本文以 OfficeCLI 仓
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考