• 大小: 3KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: 其他
  • 标签: msp430  spi  nrf24l01  

资源简介

包含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


评论

共有 条评论