资源简介
包含nrf24l01头文件跟.c文件,可以在头文件设置是使用硬件spi还是软件模拟spi,接法完全一样。用的msp430f5438a的UCB3,实测完全通过,需要一对进行收发,单个发送或接受不会成功

代码片段和文件信息
#include “NRF24L01.h“
extern u8 TX_ADDRESS[TX_ADR_WIDTH]={0x340x430x100x100x01}; //发送地址
extern u8 RX_ADDRESS[RX_ADR_WIDTH]={0x340x430x100x100x01}; //发送地址
void SPI3_Init()
{
#if USE_HW_SPI
P10SEL|=BIT1+BIT2+BIT3; //设置P10.1~P10.3外设功能
P10SEL&=~(BIT0+BIT4+BIT5);
P10DIR|=BIT0+BIT1+BIT3+BIT4; //设置CSMOSICLKCE为输出方向
P10DIR&=~(BIT2+BIT5); //设置MISO为输入方向
P10DS|=BIT0+BIT1+BIT3+BIT4;
P10REN|=BIT2+BIT5; //设置MISO上拉
P10OUT|=BIT1+BIT2+BIT5;
P10OUT&=~BIT0+BIT3;
UCB3CTL1|=UCSWRST;
UCB3CTL0 =UCCKPH+UCMSB+UCMST+UCMODE_0+UCSYNC; //3线SPI主机模式,时钟极性低,先发送MSB
UCB3CTL0&=~(UCCKPL);
UCB3CTL1|=UCSSEL_2; ///选择SMCLK
UCB3BR0=5; //25M/5=5M <10M
UCB3BR1=0;
UCB3CTL1&=~UCSWRST;
UCB3IE &= ~(UCRXIE+UCTXIE); //不开中断
// UCB3IFG&=~UCRXIFG;
#elif !USE_HW_SPI
P10DIR|=BIT0+BIT1+BIT3+BIT4;
P10DIR&=~(BIT2+BIT5);
P10DS|=BIT0+BIT1+BIT3+BIT4;
P10REN|=BIT2+BIT5;
P10OUT|=BIT2+BIT5;
P10OUT&=~BIT3;
#endif
}
//连接方式
//P10.0->CSN P10.1->MOSI
//P10.2->MISO P10.3->CLK
//P10.4->CE P10.5->IRQ
u8 SPI3_SendReceiveByte(u8 byte)
{
u8 val;
#if USE_HW_SPI
while (!(UCB3IFG&UCTXIFG)); //等待TXBUF为空
UCB3TXBUF=byte;
while((UCB3STAT&UCBUSY)&&(!(UCB3IFG&UCRXIFG))); //等待发送跟接收完成
val=UCB3RXBUF;
#elif !USE_HW_SPI
u8 i;
for(i=0;i<8;i++)
{
if(byte&0x80)
NRFMOSI_1;
else
NRFMOSI_0;
byte<<=1;
NRFCLK_1;
if(NRFMISO)
byte|=0x01;
delay_us(1);
NRFCLK_0;
}
val=byte;
#endif
return val;
}
u8 NRF_WriteReg(u8 regu8 val)
{
u8 temp;
NRF24L01_CSN_0;
temp=SPI3_SendReceiveByte(reg);
SPI3_SendReceiveByte(val);
NRF24L01_CSN_1;
return temp;
}
u8 NRF_ReadReg(u8 reg)
{
u8 val;
NRF24L01_CSN_0;
SPI3_SendReceiveByte(reg);
val=SPI3_SendReceiveByte(0xff);
NRF24L01_CSN_1;
return val;
}
u8 NRF_ReadBuf(u8 regu8 *buffu8 num)
{
u8 ival;
NRF24L01_CSN_0;
val=SPI3_SendReceiveByte(reg);
for(i=0;i buff[i]=SPI3_SendReceiveByte(0);
NRF24L01_CSN_1;
return val;
}
u8 NRF_WriteBuf(u8 regu8 *buffu8 num)
{
u8 vali;
NRF24L01_CSN_0;
val=SPI3_SendReceiveByte(reg);
for(i=0;i SPI3_SendReceiveByte(*buff++);
NRF24L01_CSN_1;
return val;
}
u8 NRF_SendPacket(u8 *TxBuf)
{
u8 val;
NRF24L01_CE_0;
NRF_WriteBuf(WR_TX_PLOADTxBufTX_PLOAD_WIDTH);
NRF24L01_CE_1;
NRF_WriteReg(WRITE_REG+STATUS0xff);
// Tx_Mode(TxBuf);
// delay_ms(5);
while(NRF24L01_IRQ!=0);
val=NRF_ReadReg(STATUS);
NRF_WriteReg(WRITE_REG+STATUS0xff);
NRF_WriteReg(WRITE_REGval);
if(val&MAX_TX)
{
NRF_WriteReg(FLUSH_TX0xff);
return MAX_TX;
}
if(val&TX_OK)
return TX_OK;
return 0xff;
}
u8 NRF_ReceivePacket(u8 *RxBuf)
{
u8 val;
val=NRF_ReadReg(STATUS);
NRF_WriteReg(WRITE_REG+STATU
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4817 2015-04-01 18:34 nrf24l01\NRF24L01.h
文件 4619 2015-04-01 13:20 nrf24l01\NRF24L01.c
目录 0 2015-04-06 21:51 nrf24l01
----------- --------- ---------- ----- ----
9436 3
- 上一篇:淘宝宝贝评价、商品属性提取采集器
- 下一篇:AS转TS代码转换工具第三版更新
相关资源
- Spire API文档
- IAR for MSP430 v7.10.1 注册机
- The direction of synaptic plasticity mediated
- 基于MSP430G2553的蓝牙控制小车
- 飞思卡尔单片机MC9S12XS12G128驱动(硬件
- 利用DS1302和msp430进行闹钟和万年历的
- msp430F149操作红外接收模块源码
- 51模拟SPI读写SD卡(包括Fat和Fat32文件
- NRF24L01实现51与STM32双向通讯
- [免费]msp430f149控制PS2键盘并用1602显示
- 28335写的用spi读取传感器数据并用CA
- STM32F103 CC2500完整驱动(模拟SPI)
- MSP430f149读sd FAT txt
- 手机短信api接口(源代码)
- cs5530的SPI程序
- 9s12单片机SPI功能代码
- stm32 用SPI 方式读写 SDHC
- SPI Master 的Verilog源代码
- nRF24L01无线模块在单片机与FPGA上的应
- STM32F103C8T6+NRF24l01无线通信
- EESkill NRF24L01 无线模块用户手册
- 基于nRF24L01的射频收发电路原理图
- nRF24L01无线模块原理图和与5V单片机的
- 基于AVR的NRF24L01跳频通信程序
- Spire.Doc 破解版
- Spin-1目标的广义parton分布的多项式和
- 介子和S波氘核的四极矩以及对spin-1系
- 基于SPCE061A和PTR8000的模拟SPI总线通信
- 用8位spi实现16位spi
- linux SPI设备注册和驱动小结
评论
共有 条评论