redhunt 发表于 2010-1-11 11:17:41

NRF24L01丢包过高的问题,请教

我用MSP430联的NRF24L01,通信距离只有1M,丢包率几乎80%,y有人说是程序的原因,哪位大哥能帮我看看啊


接收:
#include "msp430x14x.h"
#include"api.h"
#define TX_ADR_WIDTH    5   // 5 bytes TX(RX) 地址长度
#define RX_ADR_WIDTH    5   // 5 bytes TX(RX) 地址长度
#define TX_PLOAD_WIDTH5// 20 bytes TX 有效载荷
#define RX_PLOAD_WIDTH5// 20 bytes TX 有效载荷
//********延时段***************
#define CPU_F ((double)6000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
//**********************************数据的定义*********************************************
typedef unsigned char uchar; //数据类型
typedef unsigned intuint;
ucharTX_ADDRESS= {0x34,0x43,0x10,0x10,0x01}; // Define a static TX address
ucharRX_ADDRESS= {0x34,0x43,0x10,0x10,0x01};
ucharTEST;
uchar rx_buf; //接收缓存数组
uchar tx_buf={0x01,0x02,0x03,0x04,0x05};//发送缓存数组
uchar flag;//
char sta;//状态寄存器
uchar cfcs=0;
uchar faci=0;
uchar jscs=0;
uchar receive;
uchar data={0x01,0x02,0x02,0x01,0x01};
//********************************按键定义*************************
#define CSN_HIGH P1OUT|=BIT2//P1.2控制SPI使能
#define CSN_LOW P1OUT&=~BIT2
#define CE_HIGH P1OUT|=BIT1//P1.1控制芯片发射使能
#define CE_LOW P1OUT&=~BIT1
#define IRQ P1IN&BIT0//读取P1.0的值*/
//*****************************声明子函数**************************************************
void int_clk();//初始化时钟
void int_spi0();//初始化SPI接口
void init_io();//初始化IO
//uchar delay_us(uint i);//延时
uchar SPI_RW(uchar byte);//通过SPI往nRF24L01写一个字节数据,接收nRF24L01的状态寄存器的值
uchar SPI_RW_Reg(uchar reg,uchar value);//通过SPI往nRF24L01将一个字节数据”value“写到寄存器”reg“里
uchar SPI_Read(uchar reg);//读nRF24L01 中寄存器”reg“里的值
uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar bytes);//从寄存器”reg“读取“bytes”个字节数据存放在数组pBuf里
uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes);//将存放在数组pBuf里“bytes”个字节数据写到寄存器”reg“中
uchar nRF24L01_RxPacket(uchar *rx_buf);//初始化nRF24L01为接收模式
ucharnRF24L01_TxPacket(uchar *tx_buf);//初始化nRF24L01为发送模式
void SetRX_Mode();
void nRF24L01_Config();//nRF24L01配置
//*********************************主函数**********************************************
int main( void )
{
WDTCTL=WDTPW+WDTHOLD;
delay_us(10);
int_clk();
init_io();
int_spi0();
nRF24L01_Config();
   _EINT();

while(1)
{
   SetRX_Mode();
   while(1)
   {
while(P1IN&BIT0)
{
    flag=SPI_Read(STATUS);
cfcs=SPI_Read(CD);
delay_ms(10);
}
SPI_RW_Reg(WRITE_REG+STATUS,0X7E);
   }
//while(1);
/*while(1)
{
    SPI_RW_Reg(WRITE_REG+STATUS,0x0E);
while(sta&0x10);
delay_us(10000);
}*/
}
}

/***********************************延时********************************************
uchar delay_us(uint i)
{
while(i--)
    _NOP();
}*/

//***********************************初始化时钟********************************************
void int_clk()//MCLK=6MHZ,SMCLK=3MHZ,//ACLK=32768HZ,
{
uchar i;
//P5SEL=0X70;
BCSCTL1&=~XT2OFF;//开高晶振
BCSCTL2|=SELM1+SELS+DIVS0;
do
{
    IFG1&=~OFIFG;
    for(i=0xFF;i>0;i--);
}
while((IFG1&OFIFG)!=0);
IFG1&=~OFIFG;
}
//*************************初始化io端口******************************************
void init_io()
{
P1SEL=0X00;
P1DIR|=BIT1+BIT2;//单片机对nRF24L01的控制管脚P1.0(IRQ)P1.1(CE)P1.2(CSN)
   P1OUT&=~BIT1;//CE低
   P1OUT|=BIT2;//CSN高
   P1IE|=BIT0;
   P1IES|=BIT0;
   P1IE|=BIT0;
//P5SEL=0X70;//时钟信号检测口
}
//********************************初始化SPI0***********************************************
void int_spi0()//6;1;N;9600
{
P3SEL|=0X0E;
P3DIR|=BIT1+BIT3;
U0CTL|=SWRST;
U0CTL|=CHAR+SYNC+MM;
U0TCTL|=SSEL1+STC;
U0TCTL|=CKPH;
U0TCTL&=~CKPL;
U0BR0 = 0X38;
U0BR1 = 0X01;
U0MCTL = 0X40;
ME1|=USPIE0;
U0CTL&=~SWRST;
IE1&=~UTXIE0;
IE1&=~URXIE0;//禁止中断

}
//***********使用命令字*****************************
uchar SPI_WORD(uchar word)
{
P1OUT&=~BIT2;
      U0TXBUF=word;
    while(IFG1&URXIFG0);
while((IFG1&UTXIFG0)==0);
   IFG1&=~UTXIFG0;
   delay_ms(1);
   P1OUT|=BIT2;
   return(U0RXBUF);   
}


//*******************************SPI发送一个字节数据,**************************************************
uchar SPI_RW(uchar byte)      //
{
    U0TXBUF=byte;
// 输出 'byte',从高位到低位
    while(IFG1&URXIFG0);
while((IFG1&UTXIFG0)==0);
   IFG1&=~UTXIFG0;
    delay_us(1000);
   return(U0RXBUF);       // 返回接收的状态字节
}
//*************************往寄存器reg中写值'value',返回状态寄存器值*******************************************************
uchar SPI_RW_Reg(uchar reg,uchar value)
{
        uchar status;

        P1OUT&=~BIT2;                   // CSN 低, 初始化SPI通信
        status = SPI_RW(reg);      // 选择寄存器
        SPI_RW(value);             // 写值.
        P1OUT|=BIT2; // CSN 高
      delay_us(1);
        return(status);            // 返回nRF24L01状态值
}
//*****************************读寄存器的值****************************************************
uchar SPI_Read(uchar reg)
{
        char reg_val;
      
        P1OUT&=~BIT2;               //CSN 低, 初始化SPI通信
        SPI_RW(reg);            // 选择寄存器
        reg_val=SPI_RW(0x00);    // 写寄存器
        P1OUT|=BIT2;                // CSN 高, 停止通信
      delay_us(1);
        return(reg_val);      // 返回寄存器值
}
//********************************读出byte字节数据*************************************************
uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar bytes)
{
        uchar status,byte_ctr;

        P1OUT&=~BIT2;               // P1.2 CSN 低, 初始化SPI通信
        status = SPI_RW(reg);               // 选择寄存器去读,并且读状态寄存器的值

        for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)
            pBuf = SPI_RW(0x00);    // 从 nRF24L01读字节

        P1OUT|=BIT2;                // CSN 高, 停止通信
         delay_us(1);
        return(status);                  // 返回NRF24L01的状态值
}
//*******************************写入BYTE字节数**************************************************
uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes)
{
        uchar status,byte_ctr;

        P1OUT&=~BIT2;         // P1.2 CSN 低, 初始化SPI通信
        status = SPI_RW(reg);    // 选择寄存器去写,并且读状态寄存器的值
        for(byte_ctr=0; byte_ctr<bytes; byte_ctr++) // 将字几个节写到 buffer(*pBuf)
            SPI_RW(*pBuf++);
        P1OUT|=BIT2;// CSN 高, 停止通信
      delay_us(1);
        return(status);          // 返回NRF24L01的状态值
}
/****************************************************************************************************/
/*函数:void SetRX_Mode(void)
/*功能:数据接收配置
/****************************************************************************************************/
void SetRX_Mode()
{
delay_ms(1.5);
P1OUT&=~BIT1;
SPI_RW_Reg(WRITE_REG+CONFIG, 0x0F);
SPI_RW_Reg(WRITE_REG+STATUS,0X7E);
SPI_WORD(FLUSH_RX);//清空RXFIFRO
//SPI_WORD(FLUSH_TX);
   SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);
    //给发送寄存器写入地址,宽度为TX_ADR_WIDTH
SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);
// flag=SPI_Read(CD);
P1OUT|=BIT1;
delay_us(500);
}
//*********************************************************************************
//接收函数,接收返回1表示有数据收到
uchar nRF24L01_RxPacket(uchar *rx_buf)
{
delay_ms(1.5);
//P1OUT&=~BIT1; //CE_LOW进入闲置模式
uchar revale=0;
//SPI_WORD(FLUSH_RX);
//SPI_WORD(FLUSH_TX);
sta=SPI_Read(STATUS);
if(sta&0x40)
{
    SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);//读数据
    revale =1;       
    jscs++;//读取数据完成标志
        //SPI_RW_Reg(WRITE_REG+STATUS,0x1E);//接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志
}
        return revale;
}
//************************发送函数******************************
ucharnRF24L01_TxPacket(uchar *tx_buf)
{
//stand by 模式
delay_ms(1.5);
P1OUT&=~BIT1;//CE置低
    SPI_RW_Reg(WRITE_REG+CONFIG,0X0F);
//给发送寄存器写入地址,宽度为TX_ADR_WIDTH
SPI_WORD(FLUSH_TX);
    SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);
    //给发送寄存器写入地址,宽度为TX_ADR_WIDTH
SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);
//给接收寄存器写入地址,宽度也为TX_ADR_WIDTH
//SPI_Read_Buf(RX_ADDR_P0,rx_buf,TX_ADR_WIDTH);
SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);
//向发送寄存器写入TX_PLOAD_WIDTH宽度的数据,
//SPI_RW_Reg(WRITE_REG+CONFIG,0X0E);
//SPI_Read(CONFIG);
//配置为PWR_UP位,使能CRC,16位校验,发送模式
P1OUT|=BIT1;   // CE 管脚置高
delay_ms(1.5);
//P1OUT&=~BIT1;//CE置低
}
//***********nRF24L01的配置函数*************************
void nRF24L01_Config()
{
P1OUT&=~BIT1;//CE为低,待机
P1OUT|=BIT2;//CSN置高,SPI复位
delay_ms(1.5);
SPI_RW_Reg(WRITE_REG+STATUS,0X7E);
SPI_RW_Reg(WRITE_REG+CONFIG,0X0F);
SPI_Read(CONFIG);
//数据通道0自动应答
SPI_RW_Reg(WRITE_REG+EN_AA,0X01);
//数据通道0自动应答
SPI_RW_Reg(WRITE_REG+EN_RXADDR,0X01);
//通道0允许
SPI_RW_Reg(WRITE_REG+SETUP_AW,0X03);
//设置地址宽度为5字节
SPI_RW_Reg(WRITE_REG+SETUP_RETR,0X0A);
//建立自动重发,500+86us,10次重发
SPI_RW_Reg(WRITE_REG+RF_CH,0x02);
//设置工作通道频率
SPI_RW_Reg(WRITE_REG+RF_SETUP,0X07);
//设置工作通道传输速率为1Mbps,发射功率为0dBm
SPI_RW_Reg(WRITE_REG+RX_PW_P0,TX_PLOAD_WIDTH);
//SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);   
// 写本地地址       
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS,TX_ADR_WIDTH);
SPI_Write_Buf(WRITE_REG + RX_ADDR_P1, TX_ADDRESS,TX_ADR_WIDTH);
// 写接收端地址
}
//***********中断***************
#pragma vector=PORT1_VECTOR
__interrupt voidPORT1_ISR(void)
{
   //P1OUT&=~BIT1;//CE为低,待机
    sta=SPI_Read(STATUS);
int i;
    if(sta&0x40)
    {
      nRF24L01_RxPacket(rx_buf);
      for(i=0;i<5;i++)
      {
      receive=rx_buf;
    }
    }
    if (sta&0x10)
    {
      while(1);
      cfcs++;
    }
    if (sta&0x20)
    {
    }
    //while(1);
    P1IFG&=~BIT0;   
}


发送
#include "msp430x14x.h"
#include"api.h"
#define TX_ADR_WIDTH    5   // 5 bytes TX(RX) 地址长度
#define TX_PLOAD_WIDTH5// 20 bytes TX 有效载荷
//********延时段***************
#define CPU_F ((double)6000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
//**********************************数据的定义*********************************************
typedef unsigned char uchar; //数据类型
typedef unsigned intuint;
ucharTX_ADDRESS= {0x34,0x43,0x10,0x10,0x01}; // Define a static TX address
ucharTEST;
uchar rx_buf; //接收缓存数组
uchar tx_buf={0x01,0x02,0x03,0x04,0x05};//发送缓存数组
uchar flag;//
uchar sta;//状态寄存器
uchar cfcs=0;
uchar faci=0;
uchar receive;
uchar data={0x01,0x02,0x02,0x01,0x01};
//********************************按键定义*************************
#define CSN_HIGH P1OUT|=BIT2//P1.2控制SPI使能
#define CSN_LOW P1OUT&=~BIT2
#define CE_HIGH P1OUT|=BIT1//P1.1控制芯片发射使能
#define CE_LOW P1OUT&=~BIT1
#define IRQ P1IN&BIT0//读取P1.0的值*/
//*****************************声明子函数**************************************************
void int_clk();//初始化时钟
void int_spi0();//初始化SPI接口
void init_io();//初始化IO
//uchar delay_us(uint i);//延时
uchar SPI_RW(uchar byte);//通过SPI往nRF24L01写一个字节数据,接收nRF24L01的状态寄存器的值
uchar SPI_RW_Reg(uchar reg,uchar value);//通过SPI往nRF24L01将一个字节数据”value“写到寄存器”reg“里
uchar SPI_Read(uchar reg);//读nRF24L01 中寄存器”reg“里的值
uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar bytes);//从寄存器”reg“读取“bytes”个字节数据存放在数组pBuf里
uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes);//将存放在数组pBuf里“bytes”个字节数据写到寄存器”reg“中
uchar nRF24L01_RxPacket(uchar *rx_buf);//初始化nRF24L01为接收模式
ucharnRF24L01_TxPacket(uchar *tx_buf);//初始化nRF24L01为发送模式
void nRF24L01_Config();//nRF24L01配置
//*********************************主函数**********************************************
int main( void )
{
WDTCTL=WDTPW+WDTHOLD;
delay_us(10);
int_clk();
init_io();
int_spi0();
nRF24L01_Config();
_EINT();
while(1)
{
SPI_RW_Reg(WRITE_REG+STATUS,0X1E);
nRF24L01_TxPacket(data);
//sta=SPI_Read(STATUS);
while(P1IN&BIT0)
{flag=SPI_Read(CONFIG);
//cfcs=SPI_Read(OBSERVE_TX);
delay_ms(10);
}
//while(1);
/*while(1)
{
    SPI_RW_Reg(WRITE_REG+STATUS,0x0E);
while(sta&0x10);
delay_us(10000);
}*/
}
}

/***********************************延时********************************************
uchar delay_us(uint i)
{
while(i--)
    _NOP();
}*/
//***********************************初始化时钟********************************************
void int_clk()//MCLK=6MHZ,SMCLK=3MHZ,//ACLK=32768HZ,
{
uchar i;
//P5SEL=0X70;
BCSCTL1&=~XT2OFF;//开高晶振
BCSCTL2|=SELM1+SELS+DIVS0;
do
{
    IFG1&=~OFIFG;
    for(i=0xFF;i>0;i--);
}
while((IFG1&OFIFG)!=0);
IFG1&=~OFIFG;
}
//*************************初始化io端口******************************************
void init_io()
{
P1SEL=0X00;
P1DIR|=BIT1+BIT2;//单片机对nRF24L01的控制管脚P1.0(IRQ)P1.1(CE)P1.2(CSN)
   P1OUT&=~BIT1;//CE低
   P1OUT|=BIT2;//CSN高
   P1IE|=BIT0;
   P1IES|=BIT0;
// P1IE|=BIT0;
//P5SEL=0X70;//时钟信号检测口
}
//********************************初始化SPI0***********************************************
void int_spi0()//6;1;N;9600
{
P3SEL|=0X0E;
P3DIR|=BIT1+BIT3;
U0CTL|=SWRST;
U0CTL|=CHAR+SYNC+MM;
U0TCTL|=SSEL1+STC;
U0TCTL|=CKPH;
U0TCTL&=~CKPL;
U0BR0 = 0X38;
U0BR1 = 0X01;
U0MCTL = 0X40;
ME1|=USPIE0;
U0CTL&=~SWRST;
IE1&=~UTXIE0;
IE1&=~URXIE0;//禁止中断

}
//***********使用命令字*****************************
uchar SPI_WORD(uchar word)
{
P1OUT&=~BIT2;
      U0TXBUF=word;
    while(IFG1&URXIFG0);
while((IFG1&UTXIFG0)==0);
   IFG1&=~UTXIFG0;
   delay_us(1500);
   return(U0RXBUF);
P1OUT|=BIT2;
}


//*******************************SPI发送一个字节数据,**************************************************
uchar SPI_RW(uchar byte)      //
{
    U0TXBUF=byte;
// 输出 'byte',从高位到低位
    while(IFG1&URXIFG0);
while((IFG1&UTXIFG0)==0);
   IFG1&=~UTXIFG0;
    delay_us(1500);
   return(U0RXBUF);       // 返回接收的状态字节
}
//*************************往寄存器reg中写值'value',返回状态寄存器值*******************************************************
uchar SPI_RW_Reg(uchar reg,uchar value)
{
        uchar status;

        P1OUT&=~BIT2;                   // CSN 低, 初始化SPI通信
        status = SPI_RW(reg);      // 选择寄存器
        SPI_RW(value);             // 写值.
        P1OUT|=BIT2; // CSN 高
      delay_us(1);
        return(status);            // 返回nRF24L01状态值
}
//*****************************读寄存器的值****************************************************
uchar SPI_Read(uchar reg)
{
        char reg_val;
      
        P1OUT&=~BIT2;               //CSN 低, 初始化SPI通信
        SPI_RW(reg);            // 选择寄存器
        reg_val=SPI_RW(0x00);    // 写寄存器
        P1OUT|=BIT2;                // CSN 高, 停止通信
      delay_us(1);
        return(reg_val);      // 返回寄存器值
}
//********************************读出byte字节数据*************************************************
uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar bytes)
{
        uchar status,byte_ctr;

        P1OUT&=~BIT2;               // P1.2 CSN 低, 初始化SPI通信
        status = SPI_RW(reg);               // 选择寄存器去读,并且读状态寄存器的值

        for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)
            pBuf = SPI_RW(0x00);    // 从 nRF24L01读字节

        P1OUT|=BIT2;                // CSN 高, 停止通信
         delay_us(1);
        return(status);                  // 返回NRF24L01的状态值
}
//*******************************写入BYTE字节数**************************************************
uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes)
{
        uchar status,byte_ctr;

        P1OUT&=~BIT2;         // P1.2 CSN 低, 初始化SPI通信
        status = SPI_RW(reg);    // 选择寄存器去写,并且读状态寄存器的值
        for(byte_ctr=0; byte_ctr<bytes; byte_ctr++) // 将字几个节写到 buffer(*pBuf)
            SPI_RW(*pBuf++);
        P1OUT|=BIT2;// CSN 高, 停止通信
      delay_us(1);
        return(status);          // 返回NRF24L01的状态值
}
//*********************************************************************************
//接收函数,接收返回1表示有数据收到
uchar nRF24L01_RxPacket(uchar *rx_buf)
{
uchar sta;
uchar revale=0;
SPI_RW_Reg(WRITE_REG+CONFIG,0X0F);
P1OUT|=BIT1;   // CE 管脚置高去使能接收设备
delay_us(130);
sta=SPI_Read(READ_REG+STATUS);
while(sta&0x40)
{
    P1OUT&=~BIT1;
   //CE_LOW进入闲置模式
    SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);/*数据宽度未定义*/
    //RD_RX_PLOAD=指令字读RX中有效数据,完成后清空FIFO
    //完成后SPIrxbuff里是RX到得数据
//revale="0xff";//如果有数据收到,则点亮led
}
SPI_RW_Reg(WRITE_REG+STATUS,sta);
return revale;
}
//************************发送函数******************************
ucharnRF24L01_TxPacket(uchar *tx_buf)
{
P1OUT&=~BIT1;//CE置低
    SPI_RW_Reg(WRITE_REG+CONFIG,0X0E);
    SPI_WORD(FLUSH_TX);//清空TXFIFO
SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);
//给发送寄存器写入地址,宽度为TX_ADR_WIDTH
SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);
//给接收寄存器写入地址,宽度也为TX_ADR_WIDTH
SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);
//向发送寄存器写入TX_PLOAD_WIDTH宽度的数据,
//配置为PWR_UP位,使能CRC,16位校验,发送模式
P1OUT|=BIT1;   // CE 管脚置高
delay_ms(1.5);
}
//***********nRF24L01的配置函数*************************
void nRF24L01_Config()
{
P1OUT&=~BIT1;//CE为低,待机
P1OUT|=BIT2;//CSN置高,SPI复位
delay_ms(1.5);
//SPI_RW_Reg(WRITE_REG+STATUS,0X7E);
SPI_RW_Reg(WRITE_REG+CONFIG,0X0E);
SPI_RW_Reg(WRITE_REG+EN_AA,0X01);
//数据通道0自动应答
SPI_RW_Reg(WRITE_REG+EN_RXADDR,0X01);
//通道0允许
SPI_RW_Reg(WRITE_REG+SETUP_AW,0X03);
//设置地址宽度为5字节
SPI_RW_Reg(WRITE_REG+SETUP_RETR,0X1A);
//建立自动重发,500+86us,10次重发
SPI_RW_Reg(WRITE_REG+RF_CH,0x02);
//设置工作通道频率
SPI_RW_Reg(WRITE_REG+RF_SETUP,0X07);
//设置工作通道传输速率为1Mbps,发射功率为0dBm
SPI_RW_Reg(WRITE_REG+RX_PW_P0,TX_PLOAD_WIDTH);
}
//***********中断***************
#pragma vector=PORT1_VECTOR
__interrupt voidPORT1_ISR(void)
{
P1OUT&=~BIT1;//CE为低,待机
sta=SPI_Read(STATUS);
    if(sta&0x10)
    {
   cfcs++;
    }
    else if(sta&0x20)
    {
      faci++;
    }
    P1IFG&=~BIT0;
}

lank 发表于 2010-1-11 15:00:46

关注

lgymilu 发表于 2010-11-26 11:19:35

请问楼主的问题解决了么,我也在用MSP连24L01能读写寄存器,但是通信实现不了啊…………

f585885 发表于 2011-9-13 22:03:28

我也是出现丢包问题,lz解决了吗?怎么解决的?

epwwm 发表于 2011-9-14 18:02:37

有加PA吗?很有可能是硬件问题。
页: [1]
查看完整版本: NRF24L01丢包过高的问题,请教