예제 #1
0
 /*
 * 函数名:NRF_Tx_Dat
 * 描述  :用于向NRF的发送缓冲区中写入数据
 * 输入  :txBuf:存储了将要发送的数据的数组,外部定义	
 * 输出  :发送结果,成功返回TXDS,失败返回MAXRT或ERROR
 * 调用  :外部调用
 */ 
u8 NRF_Tx_Dat(u8 *txbuf,u32 len)
{
    u8 state;  
    u32 L;
    
    if( nrf_mode != TX_MODE)
    {
        NRF_TX_Mode();
    }
    
    L = (len+MAX_ONCE_TX_NUM-1) / MAX_ONCE_TX_NUM ; //进位取整
    
    while(L--)
    {
        state = NRF_TX_Dat_Once(txbuf);
        if( !(state & TX_DS))             //如果发送不成功,则结束
        {
            break;          //跳出while循环
        }
        txbuf += MAX_ONCE_TX_NUM;       //修正指向的位置
    }

#if IS_AUTO_RX_MODE     //自动进入接收模式
    NRF_RX_Mode();      
#endif
    
    return state;
} 
예제 #2
0
int main(void)
{
    /* 串口1初始化 */
    USART1_Config();

    /*SPI接口初始化*/
    SPI_NRF_Init();

    printf("\r\n 这是一个 NRF24L01 无线传输实验 \r\n");
    printf("\r\n 这是无线传输 从机端 的反馈信息\r\n");
    printf("\r\n   正在检测NRF与MCU是否正常连接。。。\r\n");

    /*检测NRF模块与MCU的连接*/
    status = NRF_Check();
    if(status == SUCCESS)
        printf("\r\n      NRF与MCU连接成功\r\n");
    else
        printf("\r\n   正在检测NRF与MCU是否正常连接。。。\r\n");

    while(1)
    {
        printf("\r\n 从机端 进入接收模式\r\n");
        NRF_RX_Mode();

        /*等待接收数据*/
        status = NRF_Rx_Dat(rxbuf);

        /*判断接收状态*/
        if(status == RX_DR)
        {
            for(i=0; i<4; i++)
            {
                printf("\r\n 从机端 接收到 主机端 发送的数据为:%d \r\n",rxbuf[i]);
                /*把接收的数据+1后发送给主机*/
                rxbuf[i]+=1;
                txbuf[i] = rxbuf[i];
            }
        }
        printf("\r\n 从机端 进入自应答发送模式\r\n");
        NRF_TX_Mode();

        /*不断重发,直至发送成功*/
        do
        {
            status = NRF_Tx_Dat(txbuf);
        } while(status == MAX_RT);
    }
}
예제 #3
0
 /*
 * 函数名:NRF_Tx_Dat
 * 描述  :用于向NRF的发送缓冲区中写入数据
 * 输入  :txBuf:存储了将要发送的数据的数组,外部定义	
 * 输出  :发送结果,成功返回TXDS,失败返回MAXRT或ERROR
 * 调用  :外部调用
 */ 
void NRF_ISR_Tx_Dat(u8 *txbuf,u32 len)
{
    u32 L = (len+ MAX_ONCE_TX_NUM -1)/MAX_ONCE_TX_NUM;
    
    if( nrf_mode != TX_MODE)
    {
        NRF_TX_Mode();
    }
    
    while(isr_L != 0);          //等待isr_L 为 0 ,即 发送完毕
    
    isr_addr    = txbuf;
    isr_L       = L;
    
    NRF_ISR_Tx_Dat_Once();      //激活一次发送,此后的发送由中断来调用
} 
예제 #4
0
 /**
  * @brief  主函数
  * @param  无
  * @retval 无
  */
int main(void)                  
{   
  SPI_NRF_Init();

  /* 串口1初始化 */
  USART1_Config();

  printf("\r\n 这是一个 NRF24L01 无线传输实验 \r\n");
  printf("\r\n 这是无线传输 主机端 的反馈信息\r\n");
  printf("\r\n   正在检测NRF与MCU是否正常连接。。。\r\n");

  /*检测NRF模块与MCU的连接*/
  status = NRF_Check(); 

  /*判断连接状态*/  
  if(status == SUCCESS)	   
    printf("\r\n      NRF与MCU连接成功!\r\n");  
  else	  
    printf("\r\n  NRF与MCU连接失败,请重新检查接线。\r\n");

  while(1)
  {
    printf("\r\n 主机端 进入自应答发送模式\r\n"); 
    NRF_TX_Mode();

    /*开始发送数据*/	
    status = NRF_Tx_Dat(txbuf);	  

    /*判断发送状态*/
    switch(status)
    {
      case MAX_RT:
        printf("\r\n 主机端 没接收到应答信号,发送次数超过限定值,发送失败。 \r\n");
      break;

      case ERROR:
        printf("\r\n 未知原因导致发送失败。 \r\n");
      break;

      case TX_DS:
        printf("\r\n 主机端 接收到 从机端 的应答信号,发送成功! \r\n");	 		
      break;  								
    }			   	

    printf("\r\n 主机端 进入接收模式。 \r\n");	
    NRF_RX_Mode();

    /*等待接收数据*/
    status = NRF_Rx_Dat(rxbuf);

    /*判断接收状态*/
    switch(status)
    {
      case RX_DR:
      for(i=0;i<4;i++)
      {					
        printf("\r\n 主机端 接收到 从机端 发送的数据为:%d \r\n",rxbuf[i]);
        txbuf[i] =rxbuf[i];
      }
      break;

      case ERROR:
        printf("\r\n 主机端 接收出错。   \r\n");
      break;  		
    }
  }// while(1)
}