初级会员
- 积分
- 151
- 金钱
- 151
- 注册时间
- 2016-2-12
- 在线时间
- 28 小时
|
1金钱
本帖最后由 superyou 于 2017-3-31 09:06 编辑
51和51是可以用NRF2401模块通信的,但是51发送给STM32却不可以,两边的基本设置都已经一样了,还是不行,是什么问题,是和数据传输率有关吗?还是?求大神帮忙啦!32是用原子哥的nrf2401的历程
51的代码如下:
#include <reg52.h>
#include <intrins.h>
#include <api.h>
/***************************************************/
#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;
sbit RX_DR = sta^6;
sbit TX_DS = sta^5;
sbit 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<x; 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<bytes; 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);
}
}
/**************************************************/
|
|