原创 NRF51822之2.4G无线通信

2014-6-30 00:55 9627 22 22 分类: MCU/ 嵌入式 文集: C

 本笔记是可穿戴芯片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种可选的功率——

1107.jpg

            这里选择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);

 

  // Radio address config

  NRF_RADIO->PREFIX0 = 0xC4C3C2E7UL;  // Prefix byte of addresses 3 to 0

  NRF_RADIO->PREFIX1 = 0xC5C6C7C8UL;  // Prefix byte of addresses 7 to 4

  NRF_RADIO->BASE0   = 0xE7E7E7E7UL;  // Base address for prefix 0

  NRF_RADIO->BASE1   = 0x00C2C2C2UL;  // Base address for prefix 1-7

  NRF_RADIO->TXADDRESS = 0x00UL;      // Set device address 0 to use when transmitting

  NRF_RADIO->RXADDRESSES = 0x01UL;    // Enable device address 0 to use which receiving

 

  // 数据包配置

  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,比设定而多发送或者接受的字节存储空间

包长为1

*/

   NRF_RADIO->PCNF1 = (RADIO_PCNF1_WHITEEN_Disabled << RADIO_PCNF1_WHITEEN_Pos)    |

                      (RADIO_PCNF1_ENDIAN_Big << RADIO_PCNF1_ENDIAN_Pos)           |

                      (PACKET1_BASE_ADDRESS_LENGTH << RADIO_PCNF1_BALEN_Pos)       |

                      (PACKET1_STATIC_LENGTH << RADIO_PCNF1_STATLEN_Pos)           |

                      (PACKET1_PAYLOAD_SIZE << RADIO_PCNF1_MAXLEN_Pos); //lint !e845 "The right argument to operator '|' is certain to be 0"

 

  // CRC Config

/*

 CRC检验字节数,2个

*/

  NRF_RADIO->CRCCNF = (RADIO_CRCCNF_LEN_Two << RADIO_CRCCNF_LEN_Pos); // Number of checksum bits

  if ((NRF_RADIO->CRCCNF & RADIO_CRCCNF_LEN_Msk) == (RADIO_CRCCNF_LEN_Two << RADIO_CRCCNF_LEN_Pos))

  {

    NRF_RADIO->CRCINIT = 0xFFFFUL;      // Initial value     

    NRF_RADIO->CRCPOLY = 0x11021UL;     // CRC poly: x^16+x^12^x^5+1

  }

  else if ((NRF_RADIO->CRCCNF & RADIO_CRCCNF_LEN_Msk) == (RADIO_CRCCNF_LEN_One << RADIO_CRCCNF_LEN_Pos))

  {

    NRF_RADIO->CRCINIT = 0xFFUL;        // Initial value

    NRF_RADIO->CRCPOLY = 0x107UL;       // CRC poly: x^8+x^2^x^1+1

  }

 

  nrf_delay_ms(3);

}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
22
关闭 站长推荐上一条 /3 下一条