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