首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

NRF51822之2.4G无线通信

NRF51822之2.4G无线通信

本笔记是可穿戴芯片nRF51822 2.4G无线通信测试程序。

一、大概了解
1
通信速率设定,与平常我们使用的24L01一样,可设为三种不同的速率——250ksps,1Msps ,2Msps


2)发送端输出功率可编程,从+4dB-20dBm , 一次以4dB的步进。省电模式:-30dBm
接收器集成了最大接收灵敏度的通道滤波器。动态负载长度。

38位,16位,24位可编程CRC校验

4)集成了DMA 功能,有利于复杂数据的管理和传输。



二、程序编写

1、初始化
1
使用16MHz
晶振,并关闭低频晶振。等待起振。


NRF_CLOCK->EVENTS_HFCLKSTARTED = 0;

  NRF_CLOCK->TASKS_HFCLKSTART = 1;

while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0);

2)设置按键为上拉输入。
nrf_gpio_range_cfg_input(BUTTON_START, BUTTON_STOP, NRF_GPIO_PIN_PULLUP);


2
配置RADIO

发送功率——有8种可选的功率——



这里选择0dBm,

NRF_RADIO->TXPOWER = (RADIO_TXPOWER_TXPOWER_0dBm << RADIO_TXPOWER_TXPOWER_Pos);

说明 RADIO_TXPOWER_TXPOWER_Pos
这里宏定义为0x00, 其实如上图可知,这个TXPOWER寄存器有32位,但并不是全部都用上,只用上了后8位,所以起始位为0x00 , 假如用上了8~15位,这里

RADIO_TXPOWER_TXPOWER_Pos
就应该宏定义为0x08 了。


3、具体配置程序
/*
*  2.4 无线通信配置程序
*/

#include "radio_config.h"
#include "nrf_delay.h"

#define PACKET0_S1_SIZE                  (0UL)  // 无符号长整型 0
#define PACKET0_S0_SIZE                  (0UL)  //
#define PACKET0_PAYLOAD_SIZE             (0UL)  //包0负载大小
#define PACKET1_BASE_ADDRESS_LENGTH      (4UL)  //基地址长度
#define PACKET1_STATIC_LENGTH            (1UL)  //静态存储长度
#define PACKET1_PAYLOAD_SIZE             (1UL)  //包1负载大小

void radio_configure()
{
  // Radio config
//(Pos 是有效位,每一个寄存器都是32位,但是用到的只有几个,其余都是保留位,所以要移位)
  /*发送功率
RADIO_TXPOWER_TXPOWER_Pos4dBm
RADIO_TXPOWER_TXPOWER_0dBm
RADIO_TXPOWER_TXPOWER_Neg4dBm
RADIO_TXPOWER_TXPOWER_Neg8dBm
RADIO_TXPOWER_TXPOWER_Neg12dBm
RADIO_TXPOWER_TXPOWER_Neg16dBm
RADIO_TXPOWER_TXPOWER_Neg20dBm
RADIO_TXPOWER_TXPOWER_Neg30dBm
*/
NRF_RADIO->TXPOWER = (RADIO_TXPOWER_TXPOWER_0dBm << RADIO_TXPOWER_TXPOWER_Pos);
//RF 频率 = 2400+ A(MHz) ,A最大83,因为ISM 给的频率最大就是2.4835GHz
  NRF_RADIO->FREQUENCY = 7UL;                // Frequency bin 7, 2407MHz
/*
* 发送速率设定,有四种
*RADIO_MODE_MODE_Nrf_1Mbit
RADIO_MODE_MODE_Nrf_2Mbit
RADIO_MODE_MODE_Nrf_250Kbit
RADIO_MODE_MODE_Ble_1Mbit
*/
  NRF_RADIO->MODE = (RADIO_MODE_MODE_Nrf_2Mbit << RADIO_MODE_MODE_Pos);

  // R
  // 数据包配置
  NRF_RADIO->PCNF0 = (PACKET0_S1_SIZE << RADIO_PCNF0_S1LEN_Pos) |
                     (PACKET0_S0_SIZE << RADIO_PCNF0_S0LEN_Pos) |
                     (PACKET0_PAYLOAD_SIZE << RADIO_PCNF0_LFLEN_Pos);
  // 数据包配置
/*
* 不对信号美白
  最大有效位在前
静态长度为1,比设定而多发送标签:   it

rf

in

ad

博客大赛

a



返回列表