自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 NRF51822蓝牙服务(5)——FLASH存储数据

前言 有时候我们希望能够把蓝牙接收的数据保存下来,为以后调用和处理提供方便。所以这里我们可以尝试把数据存放在内部FLASH里面,因为FLASH掉电不易失,是一个很好的存储方式。 实验分析 NRF51822官方BLE协议栈实际上是提供了FLASH存储库函数,采用这些库函数,可以很方便的在工程里...

2019-12-07 23:15:19

阅读数 2

评论数 0

原创 NRF51822蓝牙服务(4)——串口透传

前言 这一次我们尝试创建一个串口服务来实现手机与开发板的数据透传,其实无非就跟学习创建LED读写服务的时候一样创建一个私有服务而已。废话少说,我们直接开始实验。 实验分析 首先,我们要知道NRF51822的串口通信引脚:RX:P0.11,TX:P0.9,RTS:P0.10,CTS:P0.8。...

2019-12-05 21:22:46

阅读数 26

评论数 0

原创 NRF51822蓝牙服务(3)——电池电量采集

前言 由于蓝牙BLE就是为低功耗手持设备存在的,那电池电量的监测服务就不可或缺了。由于电量服务是蓝牙兴趣小组指定的服务,不需要用户去创建私有服务,所以这个实验我们直接使用官方提供的驱动文件即可。 实验分析 由于我的开发板没有提供AD口检测电量,所以实验直接使用一个全局变量代表电量值,每隔一秒...

2019-12-04 13:20:12

阅读数 11

评论数 0

原创 NRF51822蓝牙服务(2)——按键通知

前言 上篇已经通过一个LED读写实验,学习了如何添加一个私有服务。现在,我们就在LED读写实验的基础上再增加一个按键通知的功能。 实验分析 首先,我们先看看开发板的硬件连接: 从这里可以看出,button0和button1分别对应P0.16~P0.17引脚,当按下按键的时候引脚电平会被...

2019-12-03 23:41:40

阅读数 11

评论数 1

原创 NRF51822蓝牙服务(1)——LED读写

前言 上篇已经简单分析了一下BLE协议栈的基本知识,今天就废话少说,直接先从最基础的点灯开始BLE蓝牙服务的开发。 实例分析 本文直接采用官方SDK的led例程修改,所以首先我们先来看看开发板的硬件连接: 从这里可以看出P0.18~P0.20分别对应LED0~LED2,当芯片输出高电平...

2019-12-03 14:09:14

阅读数 11

评论数 1

原创 浅析BLE协议栈

前言 学习使用蓝牙芯片进行项目开发,就得先对协议栈的框架结构进行分析,需要对BLE协议栈的框架结构有清晰的理解,因此我尝试简单分析一下BLE协议栈。 协议栈框架 首先,协议栈的意思就是对协议的代码实现,协议栈的框架分层大概可以用下图表示: 控制层可以分为:主控制器(HCI)、链路层(...

2019-12-02 11:23:19

阅读数 99

评论数 1

原创 Git基础

前言 在学习工作,需要对项目进行版本管理,所以需要使用到Git,这里总结一下我自己平时使用Git的技巧,供大家参考,有不对的地方请各位大佬指出。 示例 1、配置user信息 Tips: --local :只对某个仓库有效; --global :对当前用户所有仓库有效; --sy...

2019-11-12 23:43:04

阅读数 7

评论数 0

原创 C/C++的一些骚操作,持续更新......

前言 在学习C/C++过程中,总会遇到很多令人眼前一亮的骚操作,这里我总结一下自己遇到过的一些写法,供大家学习。 实例 1、求最大公约数 int gcd(int x, int y){ return y?gcd(y, x%y):x; } 2、数值置换 a ^= b ^= a ...

2019-09-25 10:12:45

阅读数 28

评论数 0

原创 PWM控制LED亮度线性变化的单片机实现

一、概述 玩过单片机的基本都做过用LED灯实现呼吸灯的功能,但是只要认真观察,会发现LED的亮度变化在低占空比的时候,变化很明显,而在高占空比的时候反而变化很小,导致呼吸灯表现呼吸不均匀的现象呢?带着这个问题,我将为大家介绍如何使用PWM控制,来实现LED亮度的线性变化。 二、原理分析 首先...

2019-07-15 09:32:05

阅读数 180

评论数 0

原创 STM32F1时钟系统简单分析

一、概述   时钟系统是CPU的脉搏,所以说要想深入理解STM32的外设,学习时钟系统是非常有必要的。首先,让我们看看网上找到的STM32F1时钟框图:   在STM32中,有5个时钟源,为HSI、HSE、LSI、LSE和PLL。从时钟频率来分可以分为高速时钟源和低速时钟源,在这5个中HIS、H...

2019-06-17 22:53:09

阅读数 186

评论数 0

原创 STM32F1定时器基础知识

一、概述 STM32F1系列的定时器可以分为3类: 1)高级定时器(TIM1,TIM8):16 位向上、向下、向上/向下自动装载计数器,可以产生DMA请求,有4组捕获/比较通道输出互补PWM信号; 2)通用定时器(TIM2~TIM5):16 位向上、向下、向上/向下自动装载计数器,可以产...

2019-06-16 23:07:15

阅读数 326

评论数 0

原创 循环队列与链队列的简单实现

一、循环队列 a、概念 为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。 通过上图可以看出,如果使用顺序表作为队列的话,当处于d状态则不能继续插入...

2019-06-11 23:03:06

阅读数 369

评论数 0

原创 嵌入式操作系统使用malloc申请内存的危险

在ANSI C中,可以使用malloc()和free()这两个函数动态分配内存和释放内存,但是,在嵌入式操作系统中,调用malloc()和free()(不可重入函数)却是很危险的(由于多任务,有可能在某个任务执行接口函数的过程中阻塞,然后新任务再调用接口函数),因为多次调用这两个函数会把原来很大的...

2019-06-11 23:02:39

阅读数 716

评论数 0

原创 STM32F1使用DMA方式驱动串口和ADC

一、概述 DMA(直接存储器访问)传输方式无需CPU直接控制传输,也没有中断处理方式需要保存现场和恢复现场,其通过硬件为RAM和I/O设备开辟一条类似队列的数据通道来直接传输数据,可以准确快速地传输数据,能大大提高CPU的效率。但是每一时刻只允许DMA的其中一条通道传输数据。下面是STMF1的D...

2019-06-11 23:00:22

阅读数 431

评论数 2

原创 STM32F1一种相对简单的使用HSI配置系统时钟为64MHz的方法

最近因为项目成本需要,必须使用片内晶振作为系统的时钟源,所以对正点原子的项目模板时钟配置做了一些修改。使时钟倍频至64MHz供系统使用。 有需要的同学可以参考一下,代码如下: #if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_V...

2019-05-29 20:15:01

阅读数 392

评论数 0

原创 STM32F1系列.map文件分析

一、概述 我们通过学习STM32F1知道,想要优化代码就必须知道工程的rom和ram的占用情况。所以,我们就要用到.map文件,通过分析.map文件,可以方便查看工程rom和ram的占用情况,包括单个源文件甚至每个函数的rom。 问:那.map到底可以分为几个部分呢? 答:通过仔细阅读.m...

2019-01-14 22:41:59

阅读数 1703

评论数 5

原创 STM32启动过程分析

一、概述 1、STM32的启动过程:硬件复位后,到执行用户main函数之前的这段时间。 MCU主要做的工作: 1.硬件设置SP和PC 2.根据BOOT引脚状态选择重映射区 3.设置系统时钟 4.转跳至__main函数执行 2、分析启动代码主要可以分为以下几个阶段 1.开辟栈空间 ...

2019-01-13 20:20:05

阅读数 225

评论数 0

原创 Win 10系统重烧JLink V8固件

最近,买了一个Jlink V8调试NRF51822,发现连接出现序列号无效的问题,导致NRF51822全片擦除失败。应该是固件有问题,导致NRFgo Stdio识别不了JLink。因此,决定将JLink V8固件重烧一遍。前期工作:JLink V8板子,sam-ba-2.12,JLink V8固件...

2018-04-16 11:10:02

阅读数 280

评论数 0

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