OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3611|回复: 4

求高人指点,我想用nRF24l01发送int类型的数 然后读出来用串口打印。但是收到数据打印出来和发的数据不一样。。。。。。。。。。

[复制链接]

4

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2017-12-8
在线时间
9 小时
发表于 2018-1-23 21:05:34 | 显示全部楼层 |阅读模式
10金钱
void nRF24l01_send_data(int  sending_data){
   
  printf(" Begin TX ");  
  if(NRF24L01_TxPacket((u8*)sending_data) == TX_OK){
   
    LED0 = !LED0;        
    printf(" Finished TX ");
  }
  else
    printf(" Fialed TX ");
} 这是我的发送程序
u8 NRF24L01_TxPacket(u8 *txbuf)
{
u8 sta;
  SPI1_SetSpeed(SPI_BaudRatePrescaler_8);//spi速度为10.5Mhz(24L01的最大SPI时钟为10Mhz)   
NRF24L01_CE=0;
  NRF24L01_Write_Buf(WR_TX_PLOAD,txbuf,32);//写数据到TX BUF  32个字节
  NRF24L01_CE=1;//启动发送   
while(NRF24L01_IRQ!=0){
    delay_ms(1500);
    break;
  } //等待发送完成
sta=NRF24L01_Read_Reg(STATUS);  //读取状态寄存器的值
  printf("%c",sta);
NRF24L01_Write_Reg(NRF_WRITE_REG+STATUS,sta); //清除TX_DS或MAX_RT中断标志
if(sta&MAX_TX)//达到最大重发次数
{
  NRF24L01_Write_Reg(FLUSH_TX,0xff);//清除TX FIFO寄存器
  return MAX_TX;
}
if(sta&TX_OK)//发送完成
{
  return TX_OK;
}
return 0xff;//其他原因发送失败
}
这是正点原子例程中的发送代码

最佳答案

查看完整内容[请看2#楼]

把一个int,强制转为4个u8,收到后,强制组合即可。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-1-23 21:05:35 | 显示全部楼层
把一个int,强制转为4个u8,收到后,强制组合即可。
回复

使用道具 举报

4

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2017-12-8
在线时间
9 小时
 楼主| 发表于 2018-1-23 21:07:05 | 显示全部楼层
void EXTI9_5_IRQHandler(void)
{
        u8 istatus;
        //判断是否是线路8引起的中断
        if (EXTI_GetITStatus(EXTI_Line8)==SET)
        {
   
                if(GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_8)==0){
                    
      istatus=NRF24L01_Read_Reg(STATUS);            // 读取状态寄存其来判断数据接收状况
                        nrf_flag=istatus;
      if(istatus&0x40){//bit6:数据接收中断
      
        NRF24L01_Read_Buf(RD_RX_PLOAD,tmp_buf,RX_PLOAD_WIDTH);//读取数据
                          NRF24L01_Write_Reg(FLUSH_RX,0xff);//清除RX FIFO寄存器
                  
      }
               
      else if((istatus&0x10)>0){////达到最大发送次数中断
      
        NRF24L01_Write_Reg(FLUSH_TX,0xff);//清除TX FIFO寄存器
                          NRF24L01_RX_Mode();                        //发送结束,转为接收状态。
                        }
               
      else if((istatus&0x20)>0){//TX发送完成中断
                       
        NRF24L01_Write_Reg(FLUSH_TX,0xff);//清除TX FIFO寄存器
                          NRF24L01_RX_Mode();                        //发送结束,转为接收状态。
                        }
                       
      NRF24L01_Write_Reg(NRF_WRITE_REG+STATUS,istatus);//清除状态寄存器
                }
    EXTI_ClearITPendingBit(EXTI_Line8); //清除标志
  }
}
接收我是用的中断
回复

使用道具 举报

4

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2017-12-8
在线时间
9 小时
 楼主| 发表于 2018-1-23 21:07:26 | 显示全部楼层
  while(1){
   
    if(nrf_flag&0x40){
   
      LED1 = !LED1;
      memcpy(&receive_data , tmp_buf , 4);
      printf("%d",receive_data);
      nrf_flag = 0x00;
    }
  
  }
回复

使用道具 举报

4

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2017-12-8
在线时间
9 小时
 楼主| 发表于 2018-1-24 19:24:46 | 显示全部楼层
正点原子 发表于 2018-1-23 21:05
把一个int,强制转为4个u8,收到后,强制组合即可。

对啊 我就是这么做的 但是数据有错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 03:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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