STM32
直播中

张桂兰

7年用户 1321经验值
私信 关注
[问答]

NRF24L01加个if就发送不成功的原因?

我最近在调个NRF24L01其实早已经调试好了,之前都是一个发送一个接,我现在想改成,我发送端发送成功后,接收端能返回信息回来。我调试时发现在把发送函数放到“if”里面发送不成功.把"if"去了发送就成功.现在不知道是什么问题!

就是
int main(void)
{   
  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//内部时钟16M

  SPI_init();
  NRF24L01_Init();
  NRF24L01_TX_Mode();//接收模式
  __enable_interrupt(); //打开中断
  while (1)
  {
      Delay_ms(200);
      NRF24L01_TX(data);
  }
}


我这样子发送成功!!

改成下面那样就一直发送失败。

u8 tepm=0;
int main(void)
{   
  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//内部时钟16M

  SPI_init();
  NRF24L01_Init();
  NRF24L01_TX_Mode();//接收模式
  __enable_interrupt(); //打开中断
  while (1)
  {
      Delay_ms(200);
      if ( temp == 0 ) //加了这个
      NRF24L01_TX(data);
  }
}


这样就发送不成功。


回帖(1)

陈敏

2024-5-10 17:05:11


1. 条件判断错误:请检查if语句中的条件判断是否正确。如果条件判断错误,可能导致发送函数永远不会被执行。

2. 条件变量未初始化:如果if语句中的条件变量未正确初始化,可能导致程序进入一个错误的状态,从而影响发送函数的执行。

3. 中断冲突:由于您提到使用了中断,如果发送函数被放置在if语句中,可能导致中断处理过程中的逻辑冲突,从而影响发送操作。

4. 代码结构问题:将发送函数放置在if语句中可能会导致代码结构的问题,从而影响程序的执行流程。

为了解决这个问题,您可以尝试以下方法:

1. 检查if语句中的条件判断和条件变量,确保它们是正确的。

2. 将发送函数从if语句中移出,尝试使用其他控制结构(如switch或goto)来实现您的需求。

3. 确保中断处理逻辑正确,避免在发送过程中产生冲突。

4. 检查NRF24L01的配置和初始化过程,确保它们正确无误。

5. 使用调试工具(如printf或Serial.println)来跟踪程序的执行流程,以便找到问题所在。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分