自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 资源 (7)
  • 论坛 (1)
  • 收藏
  • 关注

原创 嵌入式开发|STM32工程中添加Bootloader实现串口程序下载

前言在产品开发中都会预留各种各样的程序升级的接口,为了防止程序出问题以后可以及时的更新程序,如果设备没有在线升级怎么办,无法远程升级程序。当然可以发程序下载器,让用户自己进行程序升级,如果这样又担心程序泄漏,而且一个STM32的程序下载器最少也需要30块。通过串口下载应该是最好的方式。实现方式通过外部按键或者串口指令让程序进入bootloader就可以进行程序下载了,bootloader一直存在,即使升级出问题可以再次升级。目前已经实现STM32F030C8T6的bootloader,使用Ymode进

2020-11-25 17:02:08 49

原创 嵌入式开发|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 32

原创 设计难题|设计难题《一》单火取电开关---“鬼火”

一、前言文章原理来源于网络。单火线取电开关至今无法攻克的难题,即电子开关在关闭后节能灯或LED灯还会闪烁,出现“关不死”的现象(俗称“鬼火”)。单线电子开关的研究和推广好像到了“山重水复疑无路”的境地,有不少电子技术人员陷入了迷茫。目前在做BLE MESH版本的单火线取电开关也遇到了这个问题,现在来分析下灯闪出现的原因。二、灯闪原因分析灯闪烁基本出现在LED灯和节能灯上,这与节能灯或LED灯以及电子开关的自身构造都有关系:一方面是单线电子开关在关闭时自身电路仍需要一定的维持电流,另一方面

2020-09-03 16:31:30 196

原创 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 106

原创 加密解密算法|使用C语言实现加密解密算法XTEA

一、前言 数据通信时我们经常用到加密,尤其在单片机开发中计算能力有限,因此找到一个适合单片机加密的方式格外的重要,今天介绍一下XTEA加密算法。 在数据的加解密领域,算法分为对称密钥与非对称密钥两种。对称密钥与非对称密钥由于各自的特点,所应用的领域是不尽相同的。对称密钥加密算法由于其速度快,一般用于整体数据的加密,而非对称密钥加密算法的安全性能佳,在数字签名领域得到广泛的应用。 TEA算法是由剑桥大学计算机实验室的David Wheeler和Roger Needham于1994...

2020-08-10 15:07:40 230

原创 Telink BLE MESH开发|ble mesh开发教程《四》telink_sig_mesh休眠与唤醒

一、前言 单火线对接天猫精灵中的BLE需要用到休眠,因为单火线为低功耗设备不能一直运行,天猫对单火线有了定义:精灵低功耗(GLP)如果模组要应用于下行数据接收的低延时低功耗设备(例如单火开关,电池供电的窗帘电机)时,可以采用精灵低功耗(Genie Low Power)方案,在开放平台上创建产品时在属性里选择精灵低功耗,这样精灵在给这个设备发送数据的时候,会在1.2s的时间内持续不断地发送数据。所以设备只需要每1.2s醒来60ms,可以在低功耗的情况下能及时接收到精灵下发的数据。设备需要..

2020-07-31 10:42:15 396

原创 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 891

原创 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 1065 1

原创 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 1720

原创 NB-IOT开发|nbiot开发教程《五》nbiot(移远BC26)电信物联网平台实现MCU固件在线升级(STM32L051+BC26)

嵌入式开发中我们要时刻保持代码的高效与整洁 看之前,先点赞好习惯,要养成一、前言 嵌入式开发中我们要时刻保持代码的高效与整洁。为什么要有在线升级和为什么要进行在线升级,在这不多说,产品的开发中,在线升级时非常重要的。我们先看下实际效果。...

2020-04-21 07:58:11 1376 3

原创 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 1158 7

原创 NB-IOT开发|nbiot开发教程《三》AT指令类模组驱动-STM32实现AT指令状态机

嵌入式开发中我们要时刻保持代码的高效与整洁看之前,先点赞好习惯,要养成一、前言嵌入式开发中我们要时刻保持代码的高效与整洁。在第一节中“NB-IOT开发|nbiot开发教程《一》AT指令类模组驱动解析”我们说到AT指令模组最好的驱动-状态机。本节我们就开始编写状态机。 ...

2020-02-08 12:08:42 2585 41

原创 NB-IOT开发|nbiot开发教程《二》AT指令类模组驱动-STM32串口实现接收不定长度数据

嵌入式开发中我们要时刻保持代码的高效与整洁一、前言 嵌入式开发中我们要时刻保持代码的高效与整洁。上一节中AT指令模组状态机的实现需要串口实现接收不定长度数据,本文就是说明具体实现方式。二、原理 串口实现接收不定长度数据原理:串口接收中断接收数据,每次中断时启动数据超时定时器(软件定时器),每次接收到数据更新定时器时间并将数据压到环形缓冲区中,时间可以为...

2020-02-06 19:51:17 1517

原创 NB-IOT开发|nbiot开发教程《一》AT指令类模组驱动解析

嵌入式开发中我们要时刻保持代码的高效与整洁看之前,先点赞好习惯,要养成一、前言嵌入式开发中我们要时刻保持代码的高效与整洁。NBIOT的出现带动了物联网行业的火爆,物联网行业似乎总是离不开NBIOT。但是,我将NBIOT归为AT指令模组一类,这一类模组没有什么高深之处,也没有深度可言。但是想要很好的使用AT指令模组却是一件不简单的事情。想要很灵活的使用AT指令的模组需...

2020-02-06 13:34:41 1781

原创 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 1911 1

原创 LoRa开发|LoRa(SX1276/8)串口透传代码-将LoRa封装成单独的驱动(STM32)

一、前言嵌入式开发中我们要时刻保持代码的高效与整洁。2020年,开年注定不平凡,新型冠状肺炎的出现哪里也去不了,在家无聊写点东西吧。最近和一友人聊天,友人一直在抱怨学习lora没有前途,一直在纠结要不要学习,我只是默默的听着,然后笑一下当做什么都没听见。LoRa是一种通信技术不是一种职业,学不学他都在那里,而且LoRa本身也不难,spi接口,手册还是中文的。目前国内无线通信产品...

2020-01-31 13:54:14 3542 3

原创 嵌入式开发|高效缓冲器设计(C语言)

一、前言 嵌入式开发中我们要时刻保持代码的高效与整洁。在嵌入式的开发中缓冲器是非常常用的,比如串口的数据,MCU处理数据的时候,只能先处理先来的,那么处理完后呢,就会把数据释放掉,再处理下一个。已经处理的数据的内存就会被浪费掉。因为后来的数据只能往后排队,如果要将剩余的数据都往前移动一次,那么效率就会低下了,肯定不现实,所以,环形队列就出现了。 ...

2020-01-17 09:48:10 402

原创 nRF52805-低价格的蓝牙BLE5.0

一、前言 近期在开发BLE的时候拿到了一款nordic的BLE:nRF52805,通过官网几乎找不到任何资料,因为这个款蓝牙芯片是特供的,但是通过SoftDevice确实能发现一下nRF52805的蛛丝马迹,说明确实有nRF52805的存在,nRF52805其实是nRF52810的阉割版,不过通过手册看只是IO口稍微少一些,nRF52805和nRF52810一样都支持BLE5.0...

2019-12-16 13:26:45 1668

原创 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 1241

原创 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 408

原创 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 354

原创 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 397

原创 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 2282 2

原创 STM32--实测STM32F030F4P6待机(standby)功耗-3.7uA(RTC开启)

一、知识普及 STM32F030休眠模式: 1.休眠模式。 2.停机模式。 3.待机模式。官网文档:英文版官网文档:中文版休眠与唤醒方面文档写的很清楚了,在这不在详述。我们最关心的是休眠功耗,我们看下休眠功耗。官网文档:英文版实际功耗应该是两个表格中相应的电流相加,可见待机时如果开启RTC和看门狗,功...

2019-10-10 14:29:33 1767 2

原创 嵌入式开发--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 387

原创 嵌入式开发-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 622

原创 嵌入式开发--实现应用层和硬件层分层管理

一、前言 以STM32为例,打开网络上下载的例程或者是购买开发板自带的例程,都会发现应用层中会有stm32f10x.h或者stm32f10x_gpio.h,这些文件严格来时属于硬件层的,如果软件层出现这些文件会显得很乱。使用过Linux的童鞋们肯定知道linux系统无法直接操作硬件层,打开linux或者rt_thread代码会发现代码中都会有device的源文件,没错,这就是驱动...

2019-09-29 09:57:15 1534 1

原创 嵌入式开发--300行代码实现操作系统cola_os

一、前言 刚开始学习写代码时代码都会放在主循环中,通过while(1)不停的轮训。如果想做一个时间触发的任务,比如做一个100ms闪烁一次的LED,通常的写法是创建一个1ms定时器,在定时中断中变量自加,当变量加到100ms标志置位,然后在主循环中切换LED状态,本次实现的OS原理就是基于该原理实现的,准确的说这只是一个多任务链表的轮询。在很多MCU开发中,功能很简单,实时性要求...

2019-09-24 16:49:28 662

原创 ESP8266WIFI深度休眠(deep sleep)功耗测试

一、硬件1.涂鸦ESP8266模组搭建最小系统二、程序采用ESP8266_NONOS_SDK,上电进入休眠void ICACHE_FLASH_ATTR user_init(void){ uart_init(115200, 115200); os_printf("WIFI SLEEP\r\n"); system_deep_sleep(5*1000000);...

2019-09-16 16:07:39 2047

原创 STM32基于GPRS模组使用HTTP协议单片机固件在线升级(IAP)

一、前言 最近有朋友让我帮忙开发基于GPRS模组的单片机固件在线升级,这样的远程升级就两种方式: 1.自己定义协议,服务器端进行bin文件拆包,一包包下发。优点:可以每包一校验还可以断点续传,不需要考虑Flash学入占用的时间,缺点:需要服务器端和节点设备都要进行协议解析。 2.基于HTTP协议进行文件传输。优点:不需要服务器端进行过多的操作,只需要下发URL链接即可。缺点...

2019-06-11 17:05:33 2722 8

原创 ESP8266(arduino方式)快速连接阿里云物联网平台(AliYun)

一、前言 最近物联网越来越火,阿里也出了自己的物联网平台,对于物联网工程师来说,简直是天大的福音。阿里云物联网平台支持MQTT,手头上正好有ESP8266开发板,拿来练练手。对于开发ESP8266的小伙伴们来说,开发8266可以用SDK或者Arduino来开发,Arduino极大的简化了开发复杂度,所以本次开发就用Arduino。二、工具准备 1.一个ESP826...

2019-03-21 13:10:34 19374 33

原创 NB-IOT移远BC26全网通-测试篇

一、BC26介绍二、测试指令ATOKATIQuectel_LtdQuectel_BC26Revision: BC26NAR01A02OKAT+CESQ+CESQ: 61,99,255,255,34,89OKAT+COPS?+COPS: 0,0,"46011",9OKAT+CEREG=1OKAT+QGACT=1,1,ctnb,,+QGACT:1OK+IP: 10.175.108.147+QGACT:...

2018-05-25 17:47:53 6297

stm32f030ct6_bootloader.hex|stm32f030ct6_bootloader.hex

目前已经实现STM32F030C8T6的bootloader,使用Ymodem进行bin文件传输,bootloader支持shell命令行输入。flash占用8K以内,ram占用1.5K

2020-11-25

cola_os_lora.zip

LoRa开发|LoRa(SX1276/8)串口透传代码-将LoRa封装成单独的驱动,目前网络上的代码很多也很多,根本不适合学习或者是项目使用,很有有代码对程序框架有所追求。

2020-02-01

嵌入式操作系统-应用层和硬件层分层管理分层cola_os.zip

嵌入式操作系统-应用层和硬件层分层管理分层,基于STM32F030实现软硬件分层,代码中增加驱动层。基于此方式可以方便的平台移植。

2019-09-29

cola_os.zip

300行代码实现多任务管理的OS,在很多MCU开发中,功能很简单,实时性要求不强,如果使用RTOS显得太浪费,任务多了管理不当又很乱,所以才会想起做一个轮询的任务管理。简单好用!

2019-09-24

ESP8266(arduino)连接阿里云物联网平台

ESP8266(arduino)连接阿里云物联网平台,ESP8266作为主控,可上报固件版本

2019-03-21

中国电信物联网开放平台NB-IoT设备模拟器

中国电信物联网开放平台NB-IoT设备模拟器,可以用来抓取NBIOT电信平台的数据

2018-08-13

C语言算法源代码

C语言算法速查手册包含目录和源代码,可以快速集成到自己的项目中

2018-08-13

红外雷达人体存在探测

发表于 2018-11-21 最后回复 2018-12-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除