发 帖  
[问答]

如何在一块战舰板上进行两个NRF24L01的通信实验?

1635 nRF24L01 无线通信
2020-4-23 04:36:06   评论 分享淘帖 邀请回答
7个回答


NRF24L01 中为配合中断方式,做了些调整,代码如下


       
[C] 纯文本查看 复制代码
static bool WIRELESS1_IsIrqHandled;static bool WIRELESS2_IsIrqHandled;...void WIRELESS_IrqHandled(u8 aWhichWireless){  switch(aWhichWireless)  {    case WIRELESS1: WIRELESS1_IsIrqHandled = TRUE; break;    case WIRELESS2: WIRELESS2_IsIrqHandled = TRUE; break;  }}void WIRELESS_SendPacket(u8 aWhichWireless, u8 *aBuffer){  switch(aWhichWireless)  {    case WIRELESS1: WIRELESS1_CE = 0; WIRELESS1_IsIrqHandled = FALSE; break;    case WIRELESS2: WIRELESS2_CE = 0; WIRELESS2_IsIrqHandled = FALSE; break;  }  WIRELESS_WriteBuffer(aWhichWireless, NFR_WRITE_TX_PAYLOAD, aBuffer, WIRELESS_TX_PAYLOAD_WIDTH);  switch(aWhichWireless)  {    case WIRELESS1: WIRELESS1_CE = 1; do { Wait_us(10);} while(WIRELESS1_IsIrqHandled == FALSE); break;    case WIRELESS2: WIRELESS2_CE = 1; do { Wait_us(10);} while(WIRELESS2_IsIrqHandled == FALSE); break;  }  return;   }
       

       


                中断处理代码如下:
       


               
[C] 纯文本查看 复制代码
void EXTI9_5_IRQHandler(void){  // WIRELESS1 触发的中断  if(EXTI_GetITStatus(EXTI_Line8) == SET)  {    u8 lStatus = WIRELESS_ReadReg(WIRELESS1, NRF_READ_REG + NFR_STATUS);  // 读取状态寄存器的值    oDebug("RF1 => ");    if(lStatus & NFR_MAX_TX)                                 // 达到最大重发次数    {      WIRELESS_WriteReg(WIRELESS1, NFR_FLUSH_TX, 0xFF);      // 清除TX FIFO寄存器      oDebug("MAX_TXrn");    }        if(lStatus & NFR_TX_OK)                                  // 发送完成    {      oDebug("TX_OKrn");    }      if(lStatus & NFR_RX_OK)                                  // 接收完成    {      oDebug("RX_OKrn");    }        // 清除 RX_DS,TX_DS 或 MAX_RT 中断标志    WIRELESS_WriteReg(WIRELESS1, NRF_WRITE_REG + NFR_STATUS, lStatus);    WIRELESS_IrqHandled(WIRELESS1);    EXTI_ClearITPendingBit(EXTI_Line8);  }    if(EXTI_GetITStatus(EXTI_Line9) == SET)  {    u8 lStatus = WIRELESS_ReadReg(WIRELESS2, NRF_READ_REG + NFR_STATUS);  // 读取状态寄存器的值    oDebug("RF2 => ");    if(lStatus & NFR_MAX_TX)                                 // 达到最大重发次数    {      WIRELESS_WriteReg(WIRELESS2, NFR_FLUSH_TX, 0xFF);      // 清除TX FIFO寄存器      oDebug("MAX_TXrn");    }        if(lStatus & NFR_TX_OK)                                  // 发送完成    {      oDebug("TX_OKrn");    }      if(lStatus & NFR_RX_OK)                                  // 接收完成    {      u8 lRxBuffer[33];      oDebug("RX_OK");      WIRELESS_ReadBuffer(WIRELESS2, NFR_READ_RX_PAYLOAD, lRxBuffer, WIRELESS_RX_PAYLOAD_WIDTH); // 读取数据      WIRELESS_WriteReg(WIRELESS2, NFR_FLUSH_RX, 0xFF);      // 清除RX FIFO寄存器            lRxBuffer[32] = 0;      oDebug("[%s]rn", lRxBuffer);    }    // 清除 RX_DS,TX_DS 或 MAX_RT 中断标志    WIRELESS_WriteReg(WIRELESS2, NRF_WRITE_REG + NFR_STATUS, lStatus);    WIRELESS_IrqHandled(WIRELESS2);        EXTI_ClearITPendingBit(EXTI_Line9);  }}
               

               


                       

               

2020-4-23 07:29:12 评论

举报

2020-4-23 07:43:00 评论

举报

2020-4-23 07:49:58 评论

举报

2020-4-23 08:07:51 评论

举报

2020-4-23 08:24:43 评论

举报

2020-4-23 08:36:35 评论

举报

2020-4-23 08:55:08 评论

举报

只有小组成员才能发言,加入小组>>

427个成员聚集在这个小组

加入小组

创建小组步骤

快速回复 返回顶部 返回列表
关注微信公众号

电子发烧友网

电子发烧友论坛

社区合作
刘勇
联系电话:15994832713
邮箱地址:liuyong@huaqiu.com
社区管理
elecfans短短
微信:elecfans_666
邮箱:users@hauqiu.com
关闭

站长推荐 上一条 /6 下一条

快速回复 返回顶部 返回列表