void PDATin(void)
{
GPIOB->CRH&=0X0FFFFFFF;
GPIOB->CRH|=0X80000000;//PB15 输入
GPIOB->ODR=1<<15;//15输入上拉 DAT
}
void PDATout(void)
{
GPIOB->CRH&=0X0FFFFFFF;
GPIOB->CRH|=0X30000000;//PB15 推挽输出
}
这两个函数分别用在IO口读写NRF2401A,写函数没有问题,用stm32发射,51接收很好,但是用stm32 接收(用到ReadByte函数,此时IO是输入),但是屏蔽这个函数,模块正常一直可以收到数据(只是没有读取,但是DR1中断信号一直都有,断开发射就没有,说明收发正常)。一旦开启这个读的函数,就傻了,DR1再也收不到信号了。
#define POW_UP PBout(9)
#define CE PBout(12)
#define CS PBout(11)
#define DR1 PBin(10)
#define SCK PBout(13)
#define DATout PBout(15)
#define DATin PBin(15)
/*****************************************************************************************/
//函数名:U8 ReadByte(void)
//输入:无
//输出:读出的数据
//功能描述:读出一个字节
/*****************************************************************************************/
U8 ReadByte(void)
{
U8 i,temp;
temp = 0;
//PDATin();//读数据,打开这个就傻了,不打开就很好,只是读不出数据而已。
SCK = 0;
delay_us(1);
for(i=0; i<8; i++)
{
temp <<= 1;
SCK = 1;
if(DATin)
temp++;
SCK = 0;
}
return temp;
}
|