天线|RF射频
直播中

黄乃康

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

用的149单片机向电脑发送浮点数,使用的无线模块是nrf24l01,但是电脑这端一直接收不到怎么回事

浮点数我用一个函数转化为无符号字符串类型了,代码如下******************************************************
void sprint(float n,U8 *reChar,int zsize,int xsize,int flag)
{
    int z,p,i=0,j=0;
    char a[11];
    //n=n+0.001;//+0.00001避免浮点数精度丢失,可根据你传感器输出实际数字位数修改,不要超出类型范围
    z=(int)n;
    p=(int)((n-z)*100);//取小数数字,最大1位小数 *10  2位*100 3位*1000 需要自行修改 你也可以自己写10次方函数利用xsize运算
    while(p/10!=0)
   {    a[i++]=p%10+'0';
        p=p/10;}
    a[i++]=p+'0';
    a[i++]='.';
       while(z/10!=0)
    {
        a[i++]=z%10+'0';
        z=z/10;
    }
    a[i++]=z+'0';
      //  a=0;   
    for(i=zsize+xsize-1;i>=0;i--)
        reChar[j++]=a;
    if(flag==1)
        reChar[j]=',';
}
**********************************
发送设置如下
/****************************************************************************************************/
//函数:void SetTX_Mode(void)
//功能:数据发送配置
//****************************************************************************************************/
void SetTX_Mode(void)
{
        RF24L01_CE_0 ;
        
          SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);            
        SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, RX_ADR_WIDTH);
        SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);  
        SPI_RW_Reg(WRITE_REG + SETUP_RETR,0x1a);
        SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  
        SPI_RW_Reg(WRITE_REG + RF_CH, 0);        
        SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH);
        
       // SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0F);   //设置TX发射参数,0db增益,2Mbps,低噪声增益开启
        SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);   //设置发射速率为1MHZ,发射功率为最大值0dB
        SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);  
        ms_delay(1);
        RF24L01_CE_1;
}
****************************************
电脑端用了一个转u***串口插在电脑上用串口调试助手读数据,调的时候如果发送源代码{0x0c,0xc9,0xcf,0xba,0xa3,0xb1,0xa6,0xc7,0xb6,0xb5,0xe7,0xd7,0xd3}电脑端就能接收,如果是我自己设置的常数浮点数转化之后的字符串就不能发送,真心不知道为什么。
***************************************************
void nRF24L01_TxPacket(unsigned char  *tx_buf)//
{
    RF24L01_CE_0 ;                        // StandBy I模式        
    //SPI_RW_Reg(WRITE_REG + CONFIG, 0x7e);    // IRQ不显示,16位CRC,主发送
    SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址
    SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);                 // 装载数据        
    SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);                    // IRQ收发完成中断响应,16位CRC,主发送
    //SPI_RW_Reg(FLUSH_TX, 0XFF);
    //SPI_RW_Reg(WRITE_REG+STATUS,0XFF);   // 清状态寄存器
    RF24L01_CE_1;                 //置高CE,激发数据发送
    ms_delay(1);
}
*****************************

回帖(4)

张玉华

2020-6-16 10:41:25
这个芯片少人用,你自己研究吧
举报

王峰

2020-6-16 10:48:54
没人帮我看看么
举报

王文

2020-6-16 11:09:47
你要模块?还是芯片?
举报

周颖雯

2020-6-16 11:16:23
已经自行解决了,谢谢原子哥
举报

更多回帖

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