硬件SPI和模拟SPI都试过了。。。都不行 硬件SPI的话MOSI和MISO管脚都没有波形 模拟的话MOSI有波形 MISO没有。。。
这是为神马为神马啊。。。。。。 有木有人能帮我看一下啊。。。我快崩溃了。。。。
模拟的代码如下:
#define MISO GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1)
#define SCLK_H GPIO_SetBits(GPIOA, GPIO_Pin_5)
#define SCLK_L GPIO_ResetBits(GPIOA, GPIO_Pin_5)
#define MOSI_H GPIO_SetBits(GPIOB, GPIO_Pin_1)
#define MOSI_L GPIO_ResetBits(GPIOB, GPIO_Pin_1)
void SPI_NRF_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// 定义SCK
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//定义MOSI
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//MISO引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOAtiNG;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(GPIOC, GPIO_Pin_1);
//定义NSS引脚 和CE引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//定义NRF的IRQ引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
SCLK_L;
}
u8 NRF_Check(void)
{
u8 buf[5]={0XA5,0XA5,0XA5,0XA5,0XA5};
u8 i;
/*写入5个字节的地址. */
SPI_NRF_WriteBuf(NRF_WRITE_REG+TX_ADDR,buf,5);
/*读出写入的地址 */
SPI_NRF_ReadBuf(TX_ADDR,buf,5);
/*比较*/
for(i=0;i<5;i++)
{
if(buf!=0XA5)
break;
}
if(i!=5)
{
GPIO_SetBits(GPIOG, GPIO_Pin_2);
return 1;
} //MCU与NRF未连接
else
{
GPIO_SetBits(GPIOG, GPIO_Pin_3);
return 0 ;
} //MCU与NRF正常连接
}
u8 SPI_NRF_WriteBuf(u8 reg ,u8 *pBuf,u8 bytes)
{
u8 status,byte_cnt;
/*置低CSN?使能SPI传输*/
SPI_NRF_CSN_LOW();
/*发送寄存器号*/
status = SPI_NRF_RW(reg);
/*向缓冲区写入数据*/
for(byte_cnt=0;byte_cnt
SPI_NRF_RW(*pBuf++); //写数据到缓冲区
/*CSN拉高?完成*/
SPI_NRF_CSN_HIGH();
return (status); //返回NRF24L01的状态
}
u8 SPI_NRF_ReadBuf(u8 reg ,u8 *pBuf,u8 bytes)
{
u8 status,byte_cnt;
/*置低CSN?使能SPI传输*/
SPI_NRF_CSN_LOW();
/*发送寄存器号*/
status = SPI_NRF_RW(reg);
/*从缓冲区读出数据*/
for(byte_cnt=0;byte_cnt
pBuf[byte_cnt]=SPI_NRF_RW(0XFF);//读出数据
/*CSN拉高?完成*/
SPI_NRF_CSN_HIGH();
return (status); //返回NRF24L01的状态
}
u8 SPI_NRF_RW(u8 dat)
{
u8 i,temp;
temp=dat;
for (i=0;i<8;i++)
{
if((temp&0x80)==0)
{
MOSI_L;
}
else
{
MOSI_H;
}
dat=(dat<<1);
temp=dat;
SCLK_H;
dat |=MISO;
Delay(10);
SCLK_L;
Delay(10);
}
return (dat);
}
0