NORDIC nRF5
changeyourmind
从事物联网工作
展开
-
NORDIC官方SDK里的例程不使用"..\" .\"文件的包含的疑惑
NORDIC官方SDK里的例程不使用"..\" .\"文件的包含的疑惑,上图!原来猫腻在这里,上图!原来在预处理做了包含,这样在使用时,包含文件就省事了!看来以后这是个趋势呀,以后开发者只需要关注自己要重点开发的部分就可以了,没必要在一些琐碎的细节上浪费宝贵的时间!原创 2017-01-02 00:40:46 · 1140 阅读 · 0 评论 -
nrf51822裸机教程-硬件timer
该讲介绍51822的Timer/Counter模块工作在timer模式下(定时器模式,还可以工作为计数器模式) 如何操作51822的Timer/Counter结构如下图所示Timer模块从PCLK16M/PCLK1M 处获得时钟源,然后经分频后得到的时钟作为timer模块的时钟 ( 上图Ftimer)。当timer模块选择为timer模式时,Counter会在Ftimer的转载 2017-01-04 14:44:42 · 3528 阅读 · 3 评论 -
nRF51822调试时遇到的各种“奇葩”问题
前言:本人之前话说是做嵌入式开发的,但主要工作是做C++开发的,因为我们的嵌入式的复杂逻辑都是用C++写的,C++代码在PC端跑,嵌入式板的代码调试都是盲调或者通过串口输出进行调试,嵌入式的代码从没进行过断点的调试,因为整个公司的不用,不用的原因很简单,因为基本的部分已经写好并且蛮成熟的了。因此本人对嵌入式的断点调试经验空白可想而知。现切入到另外一款单片机进行开发,调试时遇到的一些“奇葩”问题,本原创 2016-12-28 14:34:33 · 6321 阅读 · 0 评论 -
nRF51822 power on reset fail! amazing!
前言:用jlink调试代码观察现象与拔掉jlink,对系统重新上电观察到的现象理论是一样的才对,然而重新上电后,感觉单片机根本就不在运行(也就是单片机根本就没复位),于是就去验证单片机有没有运行(在mian函数入口处点亮一盏灯来观察有没有复位).今天遇到了一个奇葩的问题,单片机nRF51822上电复位失败!首先想到的是是不是工程设置的问题?一看,没错,有设置。但为什么灯就是没被点亮呢?原创 2017-01-05 18:02:11 · 3129 阅读 · 0 评论 -
nRF51822外设时钟之串口时钟
在使用串口配置的时候吗,发现前辈们并没有像STM32那样配置GPIO引脚的速度,甚是奇怪,找到参考手册关于时钟管理的,发现并没有关于串口时钟的配置要求,然后就翻到数据手册,OMG,终于真身现形了,原来串口外设要使用HFCLK,即高频时钟,即外接的高频晶振时钟,而51822的外接高频晶振时钟只能是16M或者32M,这里本人使用16M,那么显然UART使用的16M的时钟源!在 nRF51_原创 2016-12-28 16:39:45 · 3231 阅读 · 1 评论 -
nrf51822裸机教程-PPI
Programmable Peripheral Interconnect即可编程外设互联 系统,该模块是51822 提供的一个特性。 目的是为了让51822 的外围模块可以不通过处理器而自动相互作用。 工作原理很简单。 可以将PPI看做是一通道。 该通道有两个端点,一个叫event end-point,另一个为task end-point. 通过将具体的 event寄存器和 task寄存器 分别赋转载 2017-01-04 14:25:05 · 3294 阅读 · 1 评论 -
nrf51822裸机教程-UART
Uart硬件模块通常都有内置的硬件接收buff,比如51822的硬件uart模块图如下因为通常接收到uart数据时都会做一些处理。比如保存到数据,或者对数据做一些判断之类的。如果uart的波特率设置的很快,mcu的处理速度又不是很快或者是处理的过程比较耗时,那么当uart串口连续过来很多数据时,你在处理第一个数据时,后续的数据就可能丢失。所以通常uart模块都会内置一个很小的硬件接转载 2017-01-04 13:59:44 · 7844 阅读 · 1 评论 -
ARM 指令 CORTEX-M0
http://blog.csdn.net/qq1987924/article/details/35316955处理器使用的是ARMv6-M Thumb指令集,包括大量的32位的使用Thumb-2技术的指令。表7-22列出了Cortex-M0指令和它们的周期数。周期计数以零等待状态的系统为基准。表7-22 Cortex-M0指令和它们的周期数操作描转载 2017-02-09 23:48:05 · 6940 阅读 · 0 评论 -
nrf51822裸机教程-GPIOTE
GPIO通常都会具有中断功能,上一讲的GPIO中并没有涉及到中断的相关寄存器。51822将GPIO的中断相关做成了一个单独的模块GPIOTE,这个模块不仅提供了GPIO的中断功能,同时提供了 通过task和event的方式来访问GPIO的功能。其实中断功能也是通过 event来使能的,即中断是通过设置寄存器中相关位来决定 当event发生时是否发生中断 来设置中断功能的,具体下面介绍转载 2017-01-04 14:42:16 · 8575 阅读 · 3 评论 -
nrf51822裸机教程-GPIO
首先看看一下相关的寄存器说明 Out寄存器 输出设置寄存器每个比特按顺序对应每个引脚,bit0对应的就是 引脚0该寄存器用来设置 引脚作为输出的时候的 输出电平为高还是低。与输出设置相关的 还有另外两个寄存器OUTSET和OUTCLROUTSET用来设置某个引脚的输出为高电平OUTCLR用来设置某个引脚的输出为低电平这两个寄存器同OUT寄存器一样 每个位转载 2017-01-04 14:43:21 · 6204 阅读 · 0 评论 -
nrf51822裸机教程-IIC
关于IIC总线的核心有以下几点::时钟线高电平期间必须保持数据线不变。:时钟线低电平期间可以改变数据。:时钟线和数据线上都要接上拉电阻,以使总线不工作时,两根线的电平都处于高电平状态。:每个传输的字节后面需要由对方回送一个应答信号。 由上面可知,在时钟线为高电平的时候如果数据线改变,那么就是”不合法” 的。于是就刚好利用这种”不合法的”的跳变来作为数据 起始信号和停止信号。转载 2017-01-04 14:21:31 · 3888 阅读 · 0 评论 -
BLE-NRF51822教程3-sdk程序框架剖析
本讲为框架介绍,不会牵涉到太多代码细节。 51822的官方SDK其实是没有框架依耐性的。什么叫框架,比如TI的BLE SDK中就有一个操作系统抽象层(OSAL)他是一个轮训的调度。你需要按照他的方式去创建任务等等。而51822的SDK本质上只是提供了各种调用接口,比如开启初始化协议栈,初始化一些硬件功能模块,开始广播,发起链接等等。这些接口怎么用完全取决于自己。不过一般固件开发都是一些转载 2017-01-04 12:36:21 · 6725 阅读 · 1 评论 -
BLE-NRF51822教程4-串口BLE解析
本讲逐行代码解析官方串口BLE例程demoPS: 基于SDK5.1 主要分一下几个部分:1 :Main函数的整体注释2 :函数单独解析。3 :接收串口数据并发送给对端设备4 :接收手机数据并通过串口打印 Ps :第一和第二部分我在教程工程初始化流程中已经详细说明这里直接复制过来,做了一些修改以及添加了关于添加服务和添加特征值的讲解,如果之前看过可以直接看下 2函转载 2017-01-04 12:38:45 · 2942 阅读 · 0 评论 -
BLE-NRF51822教程5-静态密码设置
这一讲介绍配对的一些相关理论知识,并且介绍如何实现”静态密码”的设定程序是基于sdk9.0 下的 uart demo另外 测试使用的手机app是 IOS下的lightblue。这里准确的说法应该是叫配对码,而不是密码。输入这个这个配对码是配对过程中可选的一部分介绍如何设置静态密码前先介绍一下配对的相关知识(后面都直接叫密码,而不是配对码)转载 2017-01-04 12:39:57 · 853 阅读 · 0 评论 -
BLE-NRF51822教程6-创建一个自己的服务
该教程基于 sdk9.0首先打开 sdk 下的工程模板 在以下路径中XXXX \Keil_v5 \ARM \Pack \NordicSemiconductor \nRF_Examples \9.0.0 \ble_peri pheral \ble_app_template \pca10028 \s110 \arm5打开工程后,可以发现该模板的框架和 一般工程例子基本是一样的。区别 就是有转载 2017-01-04 12:40:48 · 1256 阅读 · 0 评论 -
BLE-NRF51822教程7-带协议栈工程中使用flash
本教程说明 如何在带协议栈的BLE工程中使用flash操作。教程基于sdk9.0的 uart工程xxx\NordicSemiconductor\nRF_Examples\9.0.0\ble_peripheral\ble_app_uartNordic的SDK将flash操作封装成了一个pstorage模块。 模块提供了很好用的flash操作接口。使用flash前需要调用 ps转载 2017-01-04 12:42:12 · 1597 阅读 · 0 评论 -
BLE-NRF51822教程8-软件定时器的使用
本讲教程还是会基于 9.0 sdk中的uart例子。 在该例子上使用 sdk中自带的软件定时器来实现一些功能Uart例子在sdk 中如下目录XXX\Keil_v5\ARM\Pack\NordicSemiconductor\nRF_Examples\9.0.0\ble_peripheral\ble_app_uart 首先 了解一下相关API转载 2017-01-04 12:43:26 · 2337 阅读 · 0 评论 -
BLE-NRF51822教程8-动态广播
本讲接收如何实现动态广播。教程基于 9.0 sdk中的 Uart例子。实现动态广播的方法是 广播->停止广播->修改参数->重启广播所以我们通过一个定时器来周期性的 关闭广播然后再修改广播数据之后再开启广播。Sdk 9.0中的广播搞了好几个模式,做的有点麻烦,所以我对他做了比较大的改动。首先 在main.c中 中的advertising_init函数转载 2017-01-04 12:44:35 · 3133 阅读 · 1 评论 -
BLE-NRF51822教程9—动态密码(配对码)
本讲教程也是在 sdk中的的uart例子 的基础上修改实现动态密码(其实是配对码)的功能。Uart例子在以下目录中XXX\Keil_v5\ARM\Pack\NordicSemiconductor\nRF_Examples\9.0.0\ble_peripheral\ble_app_uart 关于配对的一些理论知识在静态密码教程中有介绍。这里就不再赘述。 因为是动态密码,板子上没有转载 2017-01-04 12:45:16 · 770 阅读 · 0 评论 -
nrf51822裸机教程-RTC
RTC0被协议栈使用了。所以在跑蓝牙程序的情况下。RTC0不能使用。RTC相关寄存器如下: EVTEN,EVTENSET,EVTENCLR. 这三个寄存器用来设置是否使能某个事件。(TICK,OVRFLW,COMPARE0-3 事件) INTEN,INTENSET,INTENCLR. 这三个寄存器用来设置某个事件发生时是否触发RTC中断。转载 2017-01-04 14:18:34 · 3867 阅读 · 2 评论 -
BLE 协议栈之RTC时钟
BLE协议栈里有已经封装好的RTC时钟,时钟源可以是外部晶体振荡时钟也可以是内部RC时钟。The32-kHzXOSC is designed to operate at 32.768kHz and provide a stable clock signal for systems requiring time accuracy.The 32-kHz RCOS runs at32.753kH转载 2017-03-03 16:25:05 · 1709 阅读 · 1 评论