天线|RF射频
直播中

杨涛

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

51和STM32用NRF2401通信问题如何解决

51和51是可以用NRF2401模块通信的,但是51发送给STM32却不可以,两边的基本设置都已经一样了,还是不行,是什么问题,是和数据传输率有关吗?还是?求大神帮忙啦!32是用原子哥的nrf2401的历程
51的代码如下:
#include
#include
#include
/***************************************************/
#define uchar unsigned char
#define TX_ADR_WIDTH   5  //
#define TX_PLOAD_WIDTH 4  //
uchar code TX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01};  //
//uchar code RX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x02};
uchar RX_BUF[TX_PLOAD_WIDTH];
uchar TX_BUF[TX_PLOAD_WIDTH] = {0x22,0x34,0x56,0x78};
uchar flag;
uchar DATA = 0x01;
uchar bdata sta;
***it  RX_DR         = sta^6;
***it  TX_DS         = sta^5;
***it  MAX_RT = sta^4;
/**************************************************/
/**************************************************
/**************************************************/
void init_io(void)
{
        CE  = 0;        // ′y»ú
        CSN = 1;        // SPI½ûÖ1
        SCK = 0;        // SPIê±ÖóÖÃμí
        IRQ = 1;        // ÖD¶Ï¸′λ
}
/**************************************************/
/**************************************************
/**************************************************/
void delay_ms(uchar x)
{
    uchar i, j;
    i = 0;
    for(i=0; i     {
       j = 250;
       while(--j);
           j = 250;
       while(--j);
    }
}
/**************************************************/
/**************************************************
/**************************************************/
uchar SPI_RW(uchar byte)
{
        uchar i;
           for(i=0; i<8; i++)          // Ñ-»·8′Î
           {
                   MOSI = (byte & 0x80);   //
                   byte <<= 1;             //
                   SCK = 1;                //
                   byte |= MISO;               //
                   SCK = 0;                    //
           }
    return(byte);                   //
}
/**************************************************/
/**************************************************
/**************************************************/
uchar SPI_RW_Reg(uchar reg, uchar value)
{
        uchar status;
          CSN = 0;                   //
          status = SPI_RW(reg);      //
          SPI_RW(value);             //
          CSN = 1;                   //
          return(status);            //
}
/**************************************************/
/**************************************************
/**************************************************/
uchar SPI_Write_Buf(uchar reg, uchar * pBuf, uchar bytes)
{
        uchar status, i;
          CSN = 0;                    //
          status = SPI_RW(reg);       //
          for(i=0; i             SPI_RW(pBuf);        //
          CSN = 1;                    //
          return(status);             //
}
/**************************************************/
/**************************************************
/**************************************************/
void TX_Mode(uchar * BUF)
{
        CE = 0;
          SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);     //
          SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);  //
          SPI_Write_Buf(WR_TX_PLOAD, BUF, TX_PLOAD_WIDTH);                  //
          SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);       //
          SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);   //
          SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x0a);  //
          SPI_RW_Reg(WRITE_REG + RF_CH, 40);         //
          SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x01);    //
          SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);      //
        CE = 1;
}
/**************************************************/
/**************************************************
/**************************************************/
uchar Check_ACK(bit clear)
{
        while(IRQ);
        sta = SPI_RW(NOP);                    //
        if(MAX_RT)
                if(clear)                         //
                        SPI_RW(FLUSH_TX);
        SPI_RW_Reg(WRITE_REG + STATUS, sta);  //
        IRQ = 1;
        if(TX_DS)
                return(0x00);
        else
                return(0xff);
}
/**************************************************/
/**************************************************
/**************************************************/
void main(void)
{
        init_io();
        while(1)
        {
                TX_Mode(TX_BUF);
                Check_ACK(1);
                delay_ms(1000);
        }
}
/**************************************************/

回帖(3)

周蕊

2020-7-18 11:05:53
现在弄出来了吗?我也遇到同样的问题了
举报

华农武

2020-7-18 11:21:23
uchar SPI_RW(uchar byte) {         uchar i;            for(i=0; i<8; i++)          // Ñ-»·8′Π           {                    MOSI = (byte & 0x80);   //                     byte <<= 1;             //                     SCK = 1;                //                    byte |= MISO;               //                     SCK = 0;                    //            }     return(byte);                   // }
举报

张晓宁

2020-7-18 11:30:56
感觉 你这个函数里面的byte又是要写的数据 又是读回来的数据 造成了混乱
举报

更多回帖

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