OpenEdv-开源电子网

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

STM32硬件SPI驱动SD卡和W25X16和NRF24L01出现问题……

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2014-3-21
在线时间
0 小时
发表于 2014-3-21 00:57:48 | 显示全部楼层 |阅读模式
<h2><b>各位大侠:<br />
&nbsp; &nbsp; 我用STM32的硬件SPI同时驱动</b>驱动SD卡和W25X16和NRF24L01,SD卡和W25X16可以工作,SPI初始化函数如下:</h2>
<div style="text-align:center;">&nbsp; &nbsp;&nbsp;void SPIx_Init(void)</div>
<div style="text-align:center;">{<span class="Apple-tab-span" style="white-space:pre;">        </span>&nbsp;</div>
<div style="text-align:center;"><span class="Apple-tab-span" style="white-space:pre;">        </span>RCC-&gt;APB2ENR|=1&lt;&lt;2; &nbsp; &nbsp; &nbsp; //PORTA时钟使能 <span class="Apple-tab-span" style="white-space:pre;">        </span>&nbsp;</div>
<div style="text-align:center;"><span class="Apple-tab-span" style="white-space:pre;">        </span>RCC-&gt;APB2ENR|=1&lt;&lt;12; &nbsp; &nbsp; &nbsp;//SPI1时钟使能&nbsp;</div>
<div style="text-align:center;"><span class="Apple-tab-span" style="white-space:pre;">                </span> &nbsp;&nbsp;</div>
<div style="text-align:center;"><span class="Apple-tab-span" style="white-space:pre;">        </span>//这里只针对SPI口初始化</div>
<div style="text-align:center;"><span class="Apple-tab-span" style="white-space:pre;">        </span>GPIOA-&gt;CRL&amp;=0X000FFFFF;&nbsp;</div>
<div style="text-align:center;"><span class="Apple-tab-span" style="white-space:pre;">        </span>GPIOA-&gt;CRL|=0XBBB00000;//PA5.6.7复用 <span class="Apple-tab-span" style="white-space:pre;">        </span> &nbsp; &nbsp;</div>
<div style="text-align:center;"><span class="Apple-tab-span" style="white-space:pre;">        </span>GPIOA-&gt;ODR|=0X7&lt;&lt;5; &nbsp; &nbsp;//PA5.6.7上拉</div>
<div style="text-align:center;"><span class="Apple-tab-span" style="white-space:pre;">                </span></div>
<div style="text-align:center;"><span class="Apple-tab-span" style="white-space:pre;">        </span>SPI1-&gt;CR1|=0&lt;&lt;10;//全双工模式<span class="Apple-tab-span" style="white-space:pre;">        </span></div>
<div style="text-align:center;"><span class="Apple-tab-span" style="white-space:pre;">        </span>SPI1-&gt;CR1|=1&lt;&lt;9; //软件nss管理</div>
<div style="text-align:center;"><span class="Apple-tab-span" style="white-space:pre;">        </span>SPI1-&gt;CR1|=1&lt;&lt;8; &nbsp;</div>
<div style="text-align:center;"><span class="Apple-tab-span" style="white-space:pre;">        </span></div>
<div style="text-align:center;"><span class="Apple-tab-span" style="white-space:pre;">        </span>SPI1-&gt;CR1|=1&lt;&lt;2; //SPI主机</div>
<div style="text-align:center;"><span class="Apple-tab-span" style="white-space:pre;">        </span>SPI1-&gt;CR1|=0&lt;&lt;11;//8bit数据格式<span class="Apple-tab-span" style="white-space:pre;">        </span></div>
<div style="text-align:center;"><span class="Apple-tab-span" style="white-space:pre;">        </span>SPI1-&gt;CR1|=1&lt;&lt;1; //空闲模式下SCK为1 CPOL=1</div>
<div style="text-align:center;"><span class="Apple-tab-span" style="white-space:pre;">        </span>SPI1-&gt;CR1|=1&lt;&lt;0; //数据采样从第二个时间边沿开始,CPHA=1 &nbsp;</div>
<div style="text-align:center;"><span class="Apple-tab-span" style="white-space:pre;">        </span>SPI1-&gt;CR1|=7&lt;&lt;3; //Fsck=Fcpu/256</div>
<div style="text-align:center;"><span class="Apple-tab-span" style="white-space:pre;">        </span>SPI1-&gt;CR1|=0&lt;&lt;7; //MSBfirst &nbsp;&nbsp;</div>
<div style="text-align:center;"><span class="Apple-tab-span" style="white-space:pre;">        </span>SPI1-&gt;CR1|=1&lt;&lt;6; //SPI设备使能</div>
<div style="text-align:center;"><span class="Apple-tab-span" style="white-space:pre;">        </span>SPIx_ReadWriteByte(0xff);//启动传输<span class="Apple-tab-span" style="white-space:pre;">                </span>&nbsp;</div>
<div style="text-align:center;">} &nbsp;&nbsp;<br />
<br />
<h2 style="text-align:left;">&nbsp; &nbsp; NRF24L01的SPI初始化用这个才能通过:</h2>
<h2 style="text-align:center;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;void NRF_SPIx_Init(void)</h2>
<h2>{<span class="Apple-tab-span" style="white-space:pre;">        </span>&nbsp;</h2>
<h2><span class="Apple-tab-span" style="white-space:pre;">        </span>RCC-&gt;APB2ENR|=1&lt;&lt;2; &nbsp; &nbsp; &nbsp; //PORTA时钟使能 <span class="Apple-tab-span" style="white-space:pre;">        </span>&nbsp;</h2>
<h2><span class="Apple-tab-span" style="white-space:pre;">        </span>RCC-&gt;APB2ENR|=1&lt;&lt;12; &nbsp; &nbsp; &nbsp;//SPI1时钟使能&nbsp;</h2>
<h2><span class="Apple-tab-span" style="white-space:pre;">                </span> &nbsp;&nbsp;</h2>
<h2><span class="Apple-tab-span" style="white-space:pre;">        </span>//这里只针对SPI口初始化</h2>
<h2><span class="Apple-tab-span" style="white-space:pre;">        </span>GPIOA-&gt;CRL&amp;=0X000FFFFF;&nbsp;</h2>
<h2><span class="Apple-tab-span" style="white-space:pre;">        </span>GPIOA-&gt;CRL|=0XBBB00000;//PA5.6.7复用 <span class="Apple-tab-span" style="white-space:pre;">        </span> &nbsp; &nbsp;</h2>
<h2><span class="Apple-tab-span" style="white-space:pre;">        </span>GPIOA-&gt;ODR|=0X7&lt;&lt;5; &nbsp; &nbsp;//PA5.6.7上拉</h2>
<h2><span class="Apple-tab-span" style="white-space:pre;">                </span></h2>
<h2><span class="Apple-tab-span" style="white-space:pre;">        </span>SPI1-&gt;CR1|=0&lt;&lt;10;//全双工模式<span class="Apple-tab-span" style="white-space:pre;">        </span></h2>
<h2><span class="Apple-tab-span" style="white-space:pre;">        </span>SPI1-&gt;CR1|=1&lt;&lt;9; //软件nss管理</h2>
<h2><span class="Apple-tab-span" style="white-space:pre;">        </span>SPI1-&gt;CR1|=1&lt;&lt;8; &nbsp;</h2>
<h2><br />
</h2>
<h2><span class="Apple-tab-span" style="white-space:pre;">        </span>SPI1-&gt;CR1|=1&lt;&lt;2; //SPI主机</h2>
<h2><span class="Apple-tab-span" style="white-space:pre;">        </span>SPI1-&gt;CR1|=0&lt;&lt;11;//8bit数据格式<span class="Apple-tab-span" style="white-space:pre;">        </span></h2>
<h2><span class="Apple-tab-span" style="white-space:pre;">        </span>//对24L01要设置 CPHA=0;CPOL=0;</h2>
<h2><span class="Apple-tab-span" style="white-space:pre;">        </span>SPI1-&gt;CR1|=0&lt;&lt;1; //CPOL=0时空闲模式下SCK为0 <span class="Apple-tab-span" style="white-space:pre;">                </span> &nbsp;&nbsp;</h2>
<h2><span class="Apple-tab-span" style="white-space:pre;">        </span>SPI1-&gt;CR1|=0&lt;&lt;0; //第一个时钟的下降沿,CPHA=1 CPOL=1<span class="Apple-tab-span" style="white-space:pre;">        </span> &nbsp;</h2>
<h2><span class="Apple-tab-span" style="white-space:pre;">        </span>SPI1-&gt;CR1|=7&lt;&lt;3; //Fsck=Fcpu/256</h2>
<h2><span class="Apple-tab-span" style="white-space:pre;">        </span>SPI1-&gt;CR1|=0&lt;&lt;7; //MSBfirst &nbsp;&nbsp;</h2>
<h2><span class="Apple-tab-span" style="white-space:pre;">        </span>SPI1-&gt;CR1|=1&lt;&lt;6; //SPI设备使能</h2>
<h2><span class="Apple-tab-span" style="white-space:pre;">        </span>SPIx_ReadWriteByte(0xff);//启动传输<span class="Apple-tab-span" style="white-space:pre;">                </span></h2>
<h2>} &nbsp;&nbsp;</h2>
<h2 style="text-align:left;">&nbsp; &nbsp; 但是三个同时工作的话无线模块就不能工作了,请各位大侠告之,如何才能兼容这三个SPI器件?多谢啊!<br />
</h2>
<br />
<br />
</div>
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-3-21 09:43:07 | 显示全部楼层
回复【楼主位】李义_金点子行动:
<br>---------------------------------
<br>当其中一个工作的时候,用CS片选信号禁止其他的。
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

3

主题

2177

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3321
金钱
3321
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-3-21 09:46:21 | 显示全部楼层
片选弄了吗?设置好互斥机制,一个SPI设备使能的时候,另外两个不能使能
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-3-21 11:11:41 | 显示全部楼层
NRF24L01这个家伙和SD卡等在SPI空闲时候的控制电平不一样的,个人建议还是分开好点
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 16:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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