OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3953|回复: 3

SPI3多次写入NRF24L01失效!

[复制链接]

1

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2015-8-8
在线时间
0 小时
发表于 2015-8-8 11:09:28 | 显示全部楼层 |阅读模式
5金钱
<p>
        最近在做利用stm32f103rct6的SPI3接收NRF24L01的问题,SPI的大体配置是遵照SPI1和SP2的,但是SPI1和SP2在写NRf24L01的地址时都是正常的,但是SPI3写地址就不行了,配置地址为5位失效。单个读写寄存器时有效的,通道设置都是可以的。但是唯独地址的修改不行。以下是配置代码。请搞过SPI3通信的帮忙看一下,找找问题。
</p>
<p>
        static void Initial_SPI(SPI_TypeDef* SPIx)&nbsp; //??????IOB????<br />
{<br />
&nbsp;GPIO_InitTypeDef GPIO_InitStruct;<br />
&nbsp;SPI_InitTypeDef SPI_InitStruct;<br />
&nbsp;if(SPIx==SPI1)<br />
&nbsp;{<br />
&nbsp;&nbsp;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);<br />
&nbsp;&nbsp;RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);
</p>
<p>
        &nbsp;&nbsp;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;<br />
&nbsp;&nbsp;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;<br />
&nbsp;&nbsp;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;GPIO_Init(GPIOA, &amp;GPIO_InitStruct);<br />
&nbsp;}<br />
&nbsp;else if(SPIx==SPI2)<br />
&nbsp;{<br />
&nbsp;&nbsp;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);<br />
&nbsp;&nbsp;RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);
</p>
<p>
        &nbsp;&nbsp;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;<br />
&nbsp;&nbsp;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;<br />
&nbsp;&nbsp;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;GPIO_Init(GPIOB, &amp;GPIO_InitStruct);<br />
&nbsp;}
</p>
<p>
        &nbsp;&nbsp;else if(SPIx==SPI3)<br />
&nbsp;{<br />
&nbsp;&nbsp;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);<br />
&nbsp;&nbsp;RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,ENABLE);
</p>
<p>
        &nbsp; &nbsp;GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);<br />
&nbsp;&nbsp;//GPIO_PinRemapConfig(GPIO_Remap_SPI3, ENABLE);<br />
&nbsp;&nbsp;RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,ENABLE);
</p>
<p>
        &nbsp;&nbsp;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;<br />
&nbsp;&nbsp;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;<br />
&nbsp;&nbsp;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;GPIO_Init(GPIOB, &amp;GPIO_InitStruct);<br />
&nbsp;}
</p>
<p>
        &nbsp;SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;<br />
&nbsp;SPI_InitStruct.SPI_Direction= SPI_Direction_2Lines_FullDuplex;<br />
&nbsp;SPI_InitStruct.SPI_Mode = SPI_Mode_Master;<br />
&nbsp;SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;<br />
&nbsp;SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;<br />
&nbsp;SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;<br />
&nbsp;SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;<br />
&nbsp;SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;<br />
&nbsp;SPI_InitStruct.SPI_CRCPolynomial = 7;<br />
&nbsp;SPI_Init(SPIx, &amp;SPI_InitStruct);
</p>
<p>
        &nbsp;SPI_Cmd(SPIx, ENABLE);<br />
}
</p>
<p>
        <br />
</p>
<p>
        static void SPI_Send_byte(SPI_TypeDef* SPIx,u8 data)<br />
{<br />
&nbsp;while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE)==RESET);<br />
&nbsp;SPI_I2S_SendData(SPIx,data);
</p>
<p>
        &nbsp;while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE)==RESET);<br />
&nbsp;SPI_I2S_ReceiveData(SPIx);<br />
}
</p>
<p>
        static u8 SPI_Receive_byte(SPI_TypeDef* SPIx,u8 data)<br />
{<br />
&nbsp;while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE)==RESET);<br />
&nbsp;SPI_I2S_SendData(SPIx,data);
</p>
<p>
        &nbsp;while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE)==RESET);<br />
&nbsp;return SPI_I2S_ReceiveData(SPIx);<br />
}
</p>
<p>
        static void delay1us(u8 t)<br />
{<br />
&nbsp;while(--t);<br />
}
</p>
<p>
        <br />
</p>
<p>
        /****************????bytes×?????????*******************/<br />
u8 SPI_Write_Buf_2(u8 reg,u8 *pBuf,u8 bytes)<br />
{<br />
&nbsp;u8 status,byte_ctr;<br />
&nbsp;CSN(0);<br />
&nbsp;status=SPI_Receive_byte(SPI3,reg); <br />
&nbsp;delay1us(1);<br />
&nbsp;for(byte_ctr=0;byte_ctr&lt;bytes;byte_ctr++)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;SPI_Send_byte(SPI3,*pBuf++);<br />
&nbsp;&nbsp; }<br />
&nbsp;CSN(1);<br />
&nbsp;return(status);<br />
}
</p>
<p>
        <br />
</p>
<p>
        void RX_Mode_2(void)<br />
{<br />
&nbsp;&nbsp;CE(0);<br />
&nbsp; &nbsp;SPI_Write_Buf_2(WRITE_REG_NRF24L01 + RX_ADDR_P0, TX_ADDRESS,TX_PLOAD_WIDTH);&nbsp;<br />
&nbsp;&nbsp;&nbsp; //SPI_Write_Buf_2_1(WRITE_REG_NRF24L01 + RX_ADDR_P0, TX_ADDRESS,1)&nbsp;;<br />
&nbsp;&nbsp; SPI_RW_Reg_2(WRITE_REG_NRF24L01 + RX_PW_P0, TX_PLOAD_WIDTH);&nbsp;&nbsp;<br />
&nbsp;&nbsp; //&nbsp;SPI_RW_Reg_2(WRITE_REG_NRF24L01 + RX_ADDR_P0, 0x20); <br />
&nbsp; &nbsp;SPI_RW_Reg_2(WRITE_REG_NRF24L01 + EN_AA, 0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // ?????????¨??0×???????<br />
&nbsp; &nbsp;SPI_RW_Reg_2(WRITE_REG_NRF24L01 + EN_RXADDR, 0x3f);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // ?????????¨??0<br />
&nbsp; &nbsp;SPI_RW_Reg_2(WRITE_REG_NRF24L01 + RF_CH, 40);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // ?????????¨??0x40
</p>
<p>
        &nbsp; &nbsp;SPI_RW_Reg_2(WRITE_REG_NRF24L01 + RF_SETUP, 0x0f);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;SPI_RW_Reg_2(WRITE_REG_NRF24L01 + CONFIG, 0x0f);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // CRC??????16??CRC???é????????????????<br />
&nbsp; &nbsp;CE(1);<br />
}
</p>

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2015-8-8
在线时间
0 小时
 楼主| 发表于 2015-8-8 13:39:59 | 显示全部楼层
SPI_RW_Reg_2();为单次写寄存器是没问题,写完之后,再读出来通过串口打印是没有问题,但唯独地址无法写入。 <br />
先自己顶,坐等大神和原子哥光顾帮忙!
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2015-8-8
在线时间
0 小时
 楼主| 发表于 2015-8-8 13:58:50 | 显示全部楼层
数据是极为稳定的读出数据为0xe7 0xe7 0xe7 0xe7 0xe7,完全是默认值,折腾了一周了,这还没一点进展。<br />
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2015-8-8
在线时间
0 小时
 楼主| 发表于 2015-8-8 15:04:30 | 显示全部楼层
自己又换了一块ZE的开发板,出来的效果是一样的,看样子不是硬件的原因,配置出问题了。然后又看了一下仿真情况下,SPI3和SPI2的配置也是一样的。时序配置是一样的。问题还是没有找到
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 12:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表