一起学nRF51xx 10 -  rng

前言

      随机数产生器(RNG)的结构:

一起学nRF51xx 10 -  rng

      随机数发生器(RNG)根据内部热产生真实的非确定性随机数噪音。RNG通过触发START任务启动,并通过触发STOP任务停止。当随机数已经生成,它会产生一个VALRDY事件,同时把随机数存入VALUE寄存器。用户通过读取VALUE寄存器,获取这个随机数。有一点需要注意,随机数生成的时间不是固定不变的,时间有长有断,特别是使能了数字校验算法以后,时间更无法预测。不过有一点,当VALRDY事件产生的时候我们再去读取VALUE的值,这个是可靠的。RNG模块被触发START任务以后,会一直不断的产生随机数,每产生出一个随机数,会置位一次事件,只有触发STOP任务才能停止RNG模块。

      本教程实现把产生的随机数通过串口打印出来, 具体硬件连接请参考开发板电路图

 

示例详解

基于硬件平台:nrf51822ek_tm开发板。

 

一起学nRF51xx 10 -  rng

本示例所用的最小系统板原理图:

一起学nRF51xx 10 -  rng

一起学nRF51xx 10 -  rng

 

    1. 工程创建:
      1. 打开KEIL,新建一个空工程:Project->NewuVisionProject

一起学nRF51xx 10 -  rng

工程名为nrfxx-rng确认后按下图选择芯片为nrf51822_xxAA->ok

一起学nRF51xx 10 -  rng

在弹出的对话框中勾选CMSIS中的CORE;Device中的Startup(后面有nrf51Series字样的);在nrf_device中勾选nrf_gpio, nrf_uart, nrf_delay,nrf_rng,nrf_err并在nrf_Libraries中勾选app_error,nrf_assert模块。

 

一起学nRF51xx 10 -  rng

一起学nRF51xx 10 -  rngOK之后工程自动生成如下代码:

一起学nRF51xx 10 -  rng

新建一个空白文档,保存为main.c,并加入工程中:

一起学nRF51xx 10 -  rng

一起学nRF51xx 10 -  rng

一起学nRF51xx 10 -  rng

一起学nRF51xx 10 -  rng

配置工程,选择使用MicroLIB库,可以减小程序体积:

一起学nRF51xx 10 -  rng

加入NRF51定义,并选择化等级3,可以减小程序体积,但仿真运行时可能会出现与代码顺序不一致现象:

 

一起学nRF51xx 10 -  rng

调试工具选择J-LINK,并将接口设置为SW口勾选下载程序后自动复位及运行:

 

一起学nRF51xx 10 -  rng

一起学nRF51xx 10 -  rng

一起学nRF51xx 10 -  rng

 

    1. 工程代码
      1. OK之后在man.c中加入如下代码:

一起学nRF51xx 10 -  rng

一起学nRF51xx 10 -  rng

一起学nRF51xx 10 -  rng

      本实验中大部分代码来自于《一起学nRF51xx 6 -  uart》章节内容,主函数依次执行gpio,uart初始化操作然后就是死循环,在死循环中实现对rng模块和led的操作,每操作一次等500ms把程序编译,下载到开发板上可以看到开发板上的蓝灯实现了呼吸灯效果。对应的PWM变化如下图所示:

一起学nRF51xx 10 -  rng

关于nrf51xx及rng的更详细介绍可以参看《nRF51822_PS_v3.3.pdf》或https://infocenter.nordicsemi.com/index.jsp

 

OK,本期实验完成!下期见!同时如果大家有什么疑问或是有想了解的其它内容,也欢迎大家留言!!最后喜欢这个公众号的同学们记得加关注了,会有不定期技术干货推出!!

文中源码资料下载,在公众号里给十三发消息:

下载|一起学nRF51xx 10

一起学nRF51xx 10 -  rng

 

关注十三公众号

一起学nRF51xx 10 -  rng

 

上一篇:nRF Sniffer 环境搭建


下一篇:nRF52832-Bluefruit52学习之MicroPython开发(2)-- 板载LED