- 博客(45)
- 资源 (8)
- 收藏
- 关注
原创 广和通l610二次开发|广和通l610 CAT.1模组opencpu开发《三》阿里云物联网平台mqtt动态注册
阿里云基于MQTT通道的设备动态注册
2022-08-21 16:38:26
3337
1
原创 广和通l610二次开发|广和通l610 CAT.1模组opencpu开发《二》cola_os移植
为了代码的统一且方便后期驱动的开发,现在将cola os系统适配到l610模组上,简化后期开发难度。
2022-07-24 16:36:23
1328
原创 广和通l610二次开发|广和通l610 CAT.1模组opencpu开发《一》资源介绍
L610是基于LTEcat1开发的一款模组,芯片具备LTE(CAT1)/GSM双模通信能力,支持TDD/FDD(理论DL10Mbps、UL5Mbps)数据通信能力,支持volte、CSFB、SMS、TCP、UDP、FTP、CoAP、LWM2M、MQTT、HTTP、HTTPS、DNS、PING、IPV4V6等协议,满足终端通信设备客户需求。......
2022-07-24 16:11:24
2796
原创 cola_os|cola_os(v1.2.0)版本发布增加国产单片机SWM181例程
300行代码实现操作系统cola_os v1.2.0版本发布
2022-03-28 21:35:04
16799
3
原创 CAT1|mqtt对接onenet平台-token计算(c语言)
token的计算是使用纯C语言实现,可以移植到任何平台。工程采用CodeBlocks编译前言onenet平台已经做了进一步的完善,各个功能都很齐全。现在使用mqtt进行对接对接信息1.服务器地址连接协议 证书 地址 端口 说明 MQTT 证书下载 studio-mqtt.heclouds.com 1883 非加密端口接入 MQTTS 证书下载 studio-mqtts.heclouds.com .
2022-03-27 11:03:06
19068
2
原创 嵌入式开发|阿里云物联网平台在线升级OTA
前言 OTA功能是产品的必备功能,但是如果又不想自己搭建平台,可以选择了阿里云的平台,基于阿里云对自己的设备进行版本管理。硬件准备1.广和通L610模组(opencpu,二次开发)代码实现1.升级流程图2.设备上报版本信息,如果有新版本会下发升级信息设备端通过MQTT协议推送当前设备OTA模块版本号到Topic:/ota/device/inform/${YourProductKey}/${YourDeviceName}。消息格式如下:{ "id": "...
2021-10-07 13:40:51
19807
原创 嵌入式开发|基于STM32模拟uart串口通信
记得点赞,有问题请留言前言 在嵌入式的开发中,经常要用到通过串口打印调试信息。有时为了节省成本,而没有多余的串口可用。因此打印调试信息可以采用:方式1:工程中添加SEGGER_RTT调试打印方式2:模拟串口UART工作原理 UART即通用异步收发器,是一种串行通信方式。数据在传输过程中是通过一位一位地进行传输来实现通信的,串行通信方式具有传输线少,成本底等优点,缺点是速度慢。串行通信分为两种类型:同步通信方式和异步通信方式。但一般多用异步通信方式,主要因为接受和发送的时钟是可以独立的这样.
2021-03-30 16:50:33
5188
3
原创 嵌入式开发|基于STM32+GPRS(AT指令模组实现)实现MQTT通信
前言mqtt属于上层协议,与http属于同一层。建立在TCP之上的,因此所有的可以建立TCP通信的模组都可以实现mqttMQTT / HTTP————————————TLS————————————TCP————————————IP————————————数据链路层————————————物理层————————————硬件准备MCU:STM32F103RCGPRS模组:有人GM5工具:keil_MDKmqtt源代码:https://github.com/eclipse/pa
2021-02-25 16:30:28
5339
6
原创 嵌入式开发|嵌入式软件框架《二》前后台任务框架-cola os系统
系列文章目录嵌入式开发|嵌入式软件框架《一》常用的软件框架介绍与选择文章目录系列文章目录前言一、cola os程序框架1.cola_init2.cola_device3.cola_os task任务创建4.cola_os stime定时器创建前言在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。软件架构对于系统整体的稳定性和可靠性是非常重要的,一个合适的软件架构不仅结构清晰,并且便于开发。在嵌入式软件开发中,程序架构主要分为三种。本教程中使用的框架为前后台和时间
2021-01-21 20:18:12
22814
3
转载 嵌入式开发|嵌入式软件框架《一》常用的软件框架介绍与选择
1、前言在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。软件架构对于系统整体的稳定性和可靠性是非常重要的,一个合适的软件架构不仅结构清晰,并且便于开发。我相信在嵌入式或单片机软件开发的初期大多数开发者采用的都是简单的前后台顺序执行架构在嵌入式软件开发中,程序架构主要分为三种,本篇文章将对这三种程序架构做出详解。2、软件架构存在的意义可以说一个好的程序架构,是一个有经验的工程师和一个初学者的分水岭。软件架构对于开发人员是友好的,你希望先执行什么任务后执行什么任务,
2021-01-21 16:44:45
4845
2
转载 linux的initcall机制(针对编译进内核的驱动)
linux的initcall机制(针对编译进内核的驱动)文章转自:https://www.cnblogs.com/downey-blog/p/10486653.htmlinitcall机制的由来我们都知道,linux对驱动程序提供静态编译进内核和动态加载两种方式,当我们试图将一个驱动程序编译进内核时,开发者通常提供一个xxx_init()函数接口以启动这个驱动程序同时提供某些服务。那么,根据常识来说,这个xxx_init()函数肯定是要在系统启动的某个时候被调用,才能启动这个驱动程序。最简单直观
2021-01-04 10:42:10
3143
原创 嵌入式开发|STM32工程中添加Bootloader实现串口程序下载
前言在产品开发中都会预留各种各样的程序升级的接口,为了防止程序出问题以后可以及时的更新程序,如果设备没有在线升级怎么办,无法远程升级程序。当然可以发程序下载器,让用户自己进行程序升级,如果这样又担心程序泄漏,而且一个STM32的程序下载器最少也需要30块。通过串口下载应该是最好的方式。实现方式通过外部按键或者串口指令让程序进入bootloader就可以进行程序下载了,bootloader一直存在,即使升级出问题可以再次升级。目前已经实现STM32F030C8T6的bootloader,使用Ymode进
2020-11-25 17:02:08
5405
5
原创 嵌入式开发|STM32工程中添加SEGGER_RTT调试打印
文章目录介绍代码添加说明打印调用log查看介绍RTT( Real Time Terminal)是 SEGGER 公司新出的可以在嵌入式应用中与用户进行交互的实时终端。J-Link 驱动 4.90 之后的版本都有这个软件哦。用 RTT 可以从目标 MCU 上输出信息的同时也可以非常高速的向应用程序发送信息,并且不影响 MCU 的实时性。其实现原理就是 J-link 与 MCU 共享内存,具体实现细节感兴趣的读者可以自己去查阅下资料,本文以应用为主。RTT 的工作框图如图 1 所示。MCU 通过 J-li
2020-10-31 20:20:50
1253
原创 设计难题|设计难题《一》单火取电开关---“鬼火”
一、前言文章原理来源于网络。单火线取电开关至今无法攻克的难题,即电子开关在关闭后节能灯或LED灯还会闪烁,出现“关不死”的现象(俗称“鬼火”)。单线电子开关的研究和推广好像到了“山重水复疑无路”的境地,有不少电子技术人员陷入了迷茫。目前在做BLE MESH版本的单火线取电开关也遇到了这个问题,现在来分析下灯闪出现的原因。二、灯闪原因分析灯闪烁基本出现在LED灯和节能灯上,这与节能灯或LED灯以及电子开关的自身构造都有关系:一方面是单线电子开关在关闭时自身电路仍需要一定的维持电流,另一方面
2020-09-03 16:31:30
3919
原创 C语言开发常见错误|C语言开发常见错误《一》a-b>0还是a-b<0
一、前言 在程序编写的时候我们经常遇到类似语句 if((a-b) > 0) { ......... } else { ......... }但是a-b一定就是我们的预期值吗,当定义uint8_t a = 876;uint8_t b = 879;两个无符号的整数相减,结果是正数还是负数,今天我们测试一下二、测试测试MCU,32位MCU,其他的8位或者16位未测试(1)定义uin8_tin...
2020-08-24 15:37:23
1424
2
原创 加密解密算法|使用C语言实现加密解密算法XTEA
一、前言 数据通信时我们经常用到加密,尤其在单片机开发中计算能力有限,因此找到一个适合单片机加密的方式格外的重要,今天介绍一下XTEA加密算法。 在数据的加解密领域,算法分为对称密钥与非对称密钥两种。对称密钥与非对称密钥由于各自的特点,所应用的领域是不尽相同的。对称密钥加密算法由于其速度快,一般用于整体数据的加密,而非对称密钥加密算法的安全性能佳,在数字签名领域得到广泛的应用。 TEA算法是由剑桥大学计算机实验室的David Wheeler和Roger Needham于1994...
2020-08-10 15:07:40
3216
原创 Telink BLE MESH开发|ble mesh开发教程《四》telink_sig_mesh休眠与唤醒
一、前言 单火线对接天猫精灵中的BLE需要用到休眠,因为单火线为低功耗设备不能一直运行,天猫对单火线有了定义:精灵低功耗(GLP)如果模组要应用于下行数据接收的低延时低功耗设备(例如单火开关,电池供电的窗帘电机)时,可以采用精灵低功耗(Genie Low Power)方案,在开放平台上创建产品时在属性里选择精灵低功耗,这样精灵在给这个设备发送数据的时候,会在1.2s的时间内持续不断地发送数据。所以设备只需要每1.2s醒来60ms,可以在低功耗的情况下能及时接收到精灵下发的数据。设备需要..
2020-07-31 10:42:15
2333
2
原创 Telink BLE MESH开发|ble mesh开发教程《三》telink_sig_mesh串口收发数据
一、前言 官网资料介绍建议采用DMA传输,串口数据的接收是放到了fifo中,但是串口发送也是采用的DMA,问题在于串口发送并没有建立缓冲器,而是判断当前DMA是否忙,如果忙数据直接丢弃,这样做显然不合理。如果发送时DMA忙应该将数据放到缓冲器中,等DMA不忙时再进行发送。 二、代码修改(1)启用串口 app_config_8258.h中 (app_config_8258.h一定要对应相应的工程不要调试mesh的工程而修改了spirit lpn的工程中的app...
2020-06-24 09:08:42
3509
1
原创 Telink BLE MESH开发|ble mesh开发教程《二》telink_sig_mesh增加调试信息打印
一、前言 首先吐槽下泰凌的SDK吧,写的很乱呀,一堆的宏定义,关键是文档资料和代码注释少的可怜,没有原厂支持确实很难读懂。第三方支持是有条件的,但是公司并不打算进行商务谈判,因此只能自己啃了。我觉得这也是国产芯片为什么大家不愿意用的一个原因吧。二、增加log打印在工程目录 ```app/app_config_8258.h```文件中,有如下与日志打印相关的宏定义:#define HCI_LOG_FW_EN 1#if HCI_LOG_FW_EN#define ...
2020-06-15 13:43:47
3954
5
原创 Telink BLE MESH开发|ble mesh开发教程《一》ble mesh基础知识
一、Mesh组成 蓝牙Mesh,我们能够创建大型网络并支持成千上万的设备之间进行安全、可靠的通信。蓝牙Mesh网络包括节点(Node)、元素(Element)、模型(Model)和状态(State),本篇SKYLAB君将为大家详细介绍蓝牙Mesh的节点,节点(Node)是已经启动配置(Provision)并成为Mesh网络中一员的设备。 蓝牙Mesh规范详细描述了四种“节点”,...
2020-05-26 15:56:02
5400
原创 NB-IOT开发|nbiot开发教程《五》nbiot(移远BC26)电信物联网平台实现MCU固件在线升级(STM32L051+BC26)
嵌入式开发中我们要时刻保持代码的高效与整洁 看之前,先点赞好习惯,要养成一、前言 嵌入式开发中我们要时刻保持代码的高效与整洁。为什么要有在线升级和为什么要进行在线升级,在这不多说,产品的开发中,在线升级时非常重要的。我们先看下实际效果。...
2020-04-21 07:58:11
7164
5
原创 NB-IOT开发|nbiot开发教程《四》移远BC26低功耗调试PSM功耗3.6uA
PWRKEY一直被拉低也不能进入Idle.AT+QNBIOTEVENT=1,1 设置进入PSM消息提示。+QNBIOTEVENT: "ENTER PSM"+QNBIOTEVENT: "EXIT PSM"
2020-03-31 09:33:11
4124
9
原创 NB-IOT开发|nbiot开发教程《三》AT指令类模组驱动-STM32实现AT指令状态机
嵌入式开发中我们要时刻保持代码的高效与整洁看之前,先点赞好习惯,要养成一、前言嵌入式开发中我们要时刻保持代码的高效与整洁。在第一节中“NB-IOT开发|nbiot开发教程《一》AT指令类模组驱动解析”我们说到AT指令模组最好的驱动-状态机。本节我们就开始编写状态机。 ...
2020-02-08 12:08:42
13835
90
原创 NB-IOT开发|nbiot开发教程《二》AT指令类模组驱动-STM32串口实现接收不定长度数据
嵌入式开发中我们要时刻保持代码的高效与整洁一、前言 嵌入式开发中我们要时刻保持代码的高效与整洁。上一节中AT指令模组状态机的实现需要串口实现接收不定长度数据,本文就是说明具体实现方式。二、原理 串口实现接收不定长度数据原理:串口接收中断接收数据,每次中断时启动数据超时定时器(软件定时器),每次接收到数据更新定时器时间并将数据压到环形缓冲区中,时间可以为...
2020-02-06 19:51:17
5575
1
原创 NB-IOT开发|nbiot开发教程《一》AT指令类模组驱动解析
嵌入式开发中我们要时刻保持代码的高效与整洁看之前,先点赞好习惯,要养成一、前言嵌入式开发中我们要时刻保持代码的高效与整洁。NBIOT的出现带动了物联网行业的火爆,物联网行业似乎总是离不开NBIOT。但是,我将NBIOT归为AT指令模组一类,这一类模组没有什么高深之处,也没有深度可言。但是想要很好的使用AT指令模组却是一件不简单的事情。想要很灵活的使用AT指令的模组需...
2020-02-06 13:34:41
4740
原创 LoRa开发|LoRaWAN节点(node)代码解析(STM32L051+SX1276/8)安信可RHF76-052
一、前言嵌入式开发中我们要时刻保持代码的高效与整洁。目前LoRaWAN规范有两个版本V1.0.2和V1.0.3,相应的SDK也有两个:LoRaMac-node v4.0.0和LoRaMac-node v4.4.2。LoRaMac-node v4.4.2增加了classB的通信方式,但是LoRaMac-node v4.4.2的内存占用要比v4.0.0大一些,不过目前市面上买的Lo...
2020-02-04 23:13:59
7697
4
原创 LoRa开发|LoRa(SX1276/8)串口透传代码-将LoRa封装成单独的驱动(STM32)
一、前言嵌入式开发中我们要时刻保持代码的高效与整洁。2020年,开年注定不平凡,新型冠状肺炎的出现哪里也去不了,在家无聊写点东西吧。最近和一友人聊天,友人一直在抱怨学习lora没有前途,一直在纠结要不要学习,我只是默默的听着,然后笑一下当做什么都没听见。LoRa是一种通信技术不是一种职业,学不学他都在那里,而且LoRa本身也不难,spi接口,手册还是中文的。目前国内无线通信产品...
2020-01-31 13:54:14
25839
6
原创 嵌入式开发|高效缓冲器设计(C语言)
一、前言 嵌入式开发中我们要时刻保持代码的高效与整洁。在嵌入式的开发中缓冲器是非常常用的,比如串口的数据,MCU处理数据的时候,只能先处理先来的,那么处理完后呢,就会把数据释放掉,再处理下一个。已经处理的数据的内存就会被浪费掉。因为后来的数据只能往后排队,如果要将剩余的数据都往前移动一次,那么效率就会低下了,肯定不现实,所以,环形队列就出现了。 ...
2020-01-17 09:48:10
4456
原创 nRF52805-低价格的蓝牙BLE5.0
一、前言 近期在开发BLE的时候拿到了一款nordic的BLE:nRF52805,通过官网几乎找不到任何资料,因为这个款蓝牙芯片是特供的,但是通过SoftDevice确实能发现一下nRF52805的蛛丝马迹,说明确实有nRF52805的存在,nRF52805其实是nRF52810的阉割版,不过通过手册看只是IO口稍微少一些,nRF52805和nRF52810一样都支持BLE5.0...
2019-12-16 13:26:45
3342
2
原创 LoRa开发--lora cad模式下待机功耗计算
一、CAD功耗计算计算只是LoRa设备不包括MCU的功耗500ms间隔CAD待机功耗 电流/mA 时间/mS 小时换算为mS 消耗能量/mAh CAD 10 10 3600000 2.77778E-05 休眠 0.001 500 3600000 1.38889E-07 ...
2019-10-16 15:33:03
3587
3
原创 STM32L例程03--串口输出usart及其printf重定向(基于cola_os)
一、实验目的1.实现串口信息打印。2.每1s钟打印一次信息。3.串口接收到数据,然后打印出来一、实验步骤1.CubeMax配置配置PA9,PA10为串口输出,导出工程。2.usart驱动创建串口驱动实现原理:中断接收到数据后通过事件通知应用层。stm32_usart.c#include "config.h"#include "stm32l0xx_...
2019-10-16 13:51:57
1842
原创 STM32L例程02--GPIO输出控制LED状态切换(基于cola_os)
一、实验目的1.实现GPIO口的输出。2.控制LED状态切换,500ms闪烁一次。一、实验步骤1.CubeMax配置配置PB1为输出,修改Lable为LED,导出工程。2.LED驱动创建stm32_led.c#include "config.h"#include "stm32l0xx_hal.h"#include "stm32_led.h"#includ...
2019-10-15 14:51:41
1114
原创 STM32L例程01--环境搭建Keil安装及CubeMax安装
一、工具下载百度云盘链接:链接:https://pan.baidu.com/s/1LALaBdwyq6MHxNbjJdp0uA提取码:ctzsCubeMax官网下载链接https://www.st.com/stm32cubemxSTM32L0没有标准库,只有HAL库,使用HAL库简单的方式是使用CubeMax进行开发。Keil官网下载链接http://www.ke...
2019-10-15 14:29:58
1053
原创 STM32--实测STM32L0低功耗停机(stop)模式-1.5uA(RTC开启+外部中断唤醒)
一、知识普及 STM32L0休眠模式:(3.0V供电)低速运行190uA/MHz 6μA低功耗运行模式,32kHz运行频率 3.2 μA低功耗睡眠模式,一个计时器工作 0.8 μA 停机模式:实时时钟(RTC)运行,保存上下文,保留RAM内容 0.3 μA 停机模式:无实时时钟运行,保存上下文,保留RAM内容 270nA待机模式:无实时时钟运行,保存后备寄存器...
2019-10-12 16:13:54
7294
2
原创 STM32--实测STM32F030F4P6待机(standby)功耗-3.7uA(RTC开启)
一、知识普及 STM32F030休眠模式: 1.休眠模式。 2.停机模式。 3.待机模式。官网文档:英文版官网文档:中文版休眠与唤醒方面文档写的很清楚了,在这不在详述。我们最关心的是休眠功耗,我们看下休眠功耗。官网文档:英文版实际功耗应该是两个表格中相应的电流相加,可见待机时如果开启RTC和看门狗,功...
2019-10-10 14:29:33
8179
5
原创 嵌入式开发--STM32上实现驱动注册initcall机制(类linux)
一、前言 上一节我们实现了代码应用层和硬件层的分离管理,但是代码中还存在一个问题,每个硬件如LED控制,GPIO口需要初始化,初始化函数bsp_led_init();这个函数需要在主函数中调用初始化,类似这样:void bsp_init(void){ bsp_rcc_init(); bsp_tick_init(); bsp_led_init();...
2019-10-10 13:21:06
1797
4
原创 嵌入式开发-C语言实现localtime()和mktime()
一、前言 在嵌入式的开发中很多时候会用到时间戳,会用到time.h中的localtime()和mktime(),这两个函数像STM32这种MCU中运行效率并不高,不使用标准库的情况下可以自己实现。二、代码utc_time.h#ifndef TIME_H#define TIME_H#ifdef __cplusplusextern "C"{#endif#...
2019-09-30 13:55:38
2634
1
原创 嵌入式开发--实现应用层和硬件层分层管理
一、前言 以STM32为例,打开网络上下载的例程或者是购买开发板自带的例程,都会发现应用层中会有stm32f10x.h或者stm32f10x_gpio.h,这些文件严格来时属于硬件层的,如果软件层出现这些文件会显得很乱。使用过Linux的童鞋们肯定知道linux系统无法直接操作硬件层,打开linux或者rt_thread代码会发现代码中都会有device的源文件,没错,这就是驱动...
2019-09-29 09:57:15
24030
6
stm32f030ct6_bootloader.hex
2020-11-25
cola_os_lora.zip
2020-02-01
嵌入式操作系统-应用层和硬件层分层管理分层cola_os.zip
2019-09-29
cola_os.zip
2019-09-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人