OpenEdv-开源电子网

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

想换成SPI1来控制24L01应该做哪些修改?

[复制链接]

16

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2012-7-8
在线时间
0 小时
发表于 2015-9-26 20:17:26 | 显示全部楼层 |阅读模式
5金钱
我直接把例程spi2的地方全换成了spi1,但是在NRF24L01_Check()不能通过,想请问一下,还应该修改哪些地方。谢谢!

最佳答案

查看完整内容[请看2#楼]

搞定了!!!太粗心
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2012-7-8
在线时间
0 小时
 楼主| 发表于 2015-9-26 20:17:27 | 显示全部楼层
回复

使用道具 举报

16

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2012-7-8
在线时间
0 小时
 楼主| 发表于 2015-9-26 22:14:54 | 显示全部楼层
网上搜了一些资料,发现APB1(36)和APB2(72)的时钟不同,把spi1的波特率设置为了8,这样给spi的时钟应该就是9M。。。。可是还是一如既往地NRF24L01_Check()不能通过。HELP!!!
回复

使用道具 举报

16

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2012-7-8
在线时间
0 小时
 楼主| 发表于 2015-9-26 22:30:57 | 显示全部楼层
void SPI1_Init(void)<br />
{<br />
&nbsp;        GPIO_InitTypeDef GPIO_InitStructure;<br />
&nbsp;         SPI_InitTypeDef &nbsp;SPI_InitStructure;<br />
<br />
RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOA, ENABLE );<br />
RCC_APB1PeriphClockCmd(        RCC_APB2Periph_SPI1, &nbsp;ENABLE );<br />
&nbsp;<br />
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;<br />
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; &nbsp;<br />
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;<br />
GPIO_Init(GPIOA, &amp;GPIO_InitStructure);<br />
<br />
&nbsp;        GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7); &nbsp;<br />
<br />
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;&nbsp;<br />
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;&nbsp;<br />
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;&nbsp;<br />
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;<br />
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;<br />
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;<br />
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;<br />
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;&nbsp;<br />
SPI_InitStructure.SPI_CRCPolynomial = 7;&nbsp;<br />
SPI_Init(SPI1, &amp;SPI_InitStructure);&nbsp;<br />
&nbsp;<br />
SPI_Cmd(SPI1, ENABLE);&nbsp;<br />
<br />
//SPI2_ReadWriteByte(0xff);<br />
&nbsp;<br />
<br />
} &nbsp;&nbsp;<br />
<br />
<br />
<br />
void SPI1_SetSpeed(u8 SPI_BaudRatePrescaler)<br />
{<br />
&nbsp;         assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));<br />
SPI1-&gt;CR1&amp;=0XFFC7;<br />
SPI1-&gt;CR1|=SPI_BaudRatePrescaler;<br />
SPI_Cmd(SPI1,ENABLE);&nbsp;<br />
//SPI2_ReadWriteByte(0xff);&nbsp;<br />
}&nbsp;<br />
<br />
u8 SPI1_ReadWriteByte(u8 TxData)<br />
{ <br />
u8 retry=0; <br />
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET)<br />
{<br />
retry++;<br />
if(retry&gt;20)return 0;<br />
}                         &nbsp;<br />
SPI_I2S_SendData(SPI1, TxData);&nbsp;<br />
retry=0;<br />
<br />
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET)<br />
{<br />
retry++;<br />
if(retry&gt;20)return 0;<br />
}         &nbsp;                                                 &nbsp; &nbsp;<br />
return SPI_I2S_ReceiveData(SPI1); &nbsp; &nbsp;&nbsp;<br />
<br />
u8 NRF24L01_Check(void)<br />
{<br />
u8 buf[5]={0XA5,0XA5,0XA5,0XA5,0XA5};<br />
u8 i;<br />
SPI1_SetSpeed(SPI_BaudRatePrescaler_8);<br />
NRF24L01_Write_Buf(WRITE_REG_NRF+TX_ADDR,buf,5);<br />
NRF24L01_Read_Buf(TX_ADDR,buf,5);<br />
for(i=0;i&lt;5;i++)if(buf!=0XA5)break;                                                                  &nbsp;&nbsp;<br />
if(i!=5)return 1;<br />
return 0;&nbsp;<br />
}                 &nbsp;<br />
<br />
回复

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2015-3-26
在线时间
0 小时
发表于 2015-10-11 13:07:28 | 显示全部楼层
回复【4楼】珊瑚海:
<br>---------------------------------
<br>你好,我也是用spi发送数据,我是新做的板子,测试板子的nrf24l01发射模块与发射模块的通信,我的程序很简单,
<br>GPIO_InitTypeDef&nbsp;GPIO_InitStructure;
<br>
<br>//&nbsp;&nbsp;NVIC_InitTypeDef&nbsp;NVIC_InitStructure;
<br>        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1,&nbsp;ENABLE&nbsp;);       
<br>&nbsp;
<br>        GPIO_InitStructure.GPIO_Pin&nbsp;=&nbsp;GPIO_Pin_5|GPIO_Pin_7;
<br>        GPIO_InitStructure.GPIO_Mode&nbsp;=&nbsp;GPIO_Mode_AF_PP;&nbsp;&nbsp;//???????ì????
<br>        GPIO_InitStructure.GPIO_Speed&nbsp;=&nbsp;GPIO_Speed_50MHz;
<br>        GPIO_Init(GPIOA,&nbsp;&GPIO_InitStructure);
<br>       
<br>&nbsp;&nbsp;GPIO_InitStructure.GPIO_Pin&nbsp;=&nbsp;GPIO_Pin_6;
<br>        GPIO_InitStructure.GPIO_Mode&nbsp;=&nbsp;GPIO_Mode_IN_FLOATING;
<br>//&nbsp;&nbsp;GPIO_InitStructure.GPIO_Speed&nbsp;=&nbsp;GPIO_Speed_50MHz;
<br>        GPIO_Init(GPIOA,&nbsp;&GPIO_InitStructure);
<br>&nbsp;
<br>        GPIO_InitStructure.GPIO_Pin&nbsp;=&nbsp;GPIO_Pin_4;
<br>        GPIO_InitStructure.GPIO_Mode&nbsp;=&nbsp;GPIO_Mode_Out_PP;&nbsp;&nbsp;
<br>        GPIO_InitStructure.GPIO_Speed&nbsp;=&nbsp;GPIO_Speed_50MHz;
<br>        GPIO_Init(GPIOA,&nbsp;&GPIO_InitStructure);
<br>       
<br>//        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;                                                        //PB1&nbsp;CE
<br>//        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;                                        //???ì????
<br>//        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;       
<br>//        GPIO_Init(GPIOB,&GPIO_InitStructure);
<br>//&nbsp;&nbsp;&nbsp;NVIC_InitStructure.NVIC_IRQChannel&nbsp;=&nbsp;USART1_IRQn;
<br>//        &nbsp;&nbsp;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1&nbsp;;//??????????3
<br>//        NVIC_InitStructure.NVIC_IRQChannelSubPriority&nbsp;=&nbsp;1;                //×???????3
<br>//        NVIC_InitStructure.NVIC_IRQChannelCmd&nbsp;=&nbsp;ENABLE;                        //IRQ?¨??????
<br>//        NVIC_Init(&NVIC_InitStructure);       
<br>
<br>       
<br>       
<br>//&nbsp;        GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
<br>
<br>        SPI_InitStructure.SPI_Direction&nbsp;=&nbsp;SPI_Direction_2Lines_FullDuplex;&nbsp;&nbsp;//?è??SPI???ò?ò?????ò??????????:SPI?è???????????ò?????¤
<br>        SPI_InitStructure.SPI_Mode&nbsp;=&nbsp;SPI_Mode_Master;                //?è??SPI?¤×÷????:?è?????÷SPI
<br>        SPI_InitStructure.SPI_DataSize&nbsp;=&nbsp;SPI_DataSize_8b;                //?è??SPI???????ó??:SPI·???????8?????á??
<br>        SPI_InitStructure.SPI_CPOL&nbsp;=&nbsp;SPI_CPOL_Low;                //???????????±????????:?±???ü????
<br>        SPI_InitStructure.SPI_CPHA&nbsp;=&nbsp;SPI_CPHA_2Edge;        //?????????????????±????
<br>        SPI_InitStructure.SPI_NSS&nbsp;=&nbsp;SPI_NSS_Soft;                //NSS???????????¨NSS???????????í???¨????SSI???????í:????NSS??????SSI??????
<br>        SPI_InitStructure.SPI_BaudRatePrescaler&nbsp;=&nbsp;SPI_BaudRatePrescaler_16;                //?¨???¨?????¤·???????:?¨?????¤·???????256
<br>        SPI_InitStructure.SPI_FirstBit&nbsp;=&nbsp;SPI_FirstBit_MSB;        //???¨??????????MSB??????LSB??????:??????????MSB??????
<br>        SPI_InitStructure.SPI_CRCPolynomial&nbsp;=&nbsp;7;        //CRC?????????à????
<br>        SPI_Init(SPI1,&nbsp;&SPI_InitStructure);&nbsp;&nbsp;//?ù??SPI_InitStruct?????¨???????????????èSPIx?????÷
<br>&nbsp;
<br>        SPI_Cmd(SPI1,&nbsp;ENABLE);&nbsp;//????SPI???è
<br>
<br>u8&nbsp;SpiRW(u8&nbsp;Data)&nbsp;
<br>{&nbsp;
<br>        while&nbsp;(SPI_I2S_GetFlagStatus(SPI1,&nbsp;SPI_I2S_FLAG_TXE)&nbsp;==&nbsp;RESET);&nbsp;                //?±SPI·????????÷·????±????
<br>        SPI_I2S_SendData(SPI1,&nbsp;Data);                                                                                        //?¨??&nbsp;SPI2·?????×???????&nbsp;
<br>        while&nbsp;(SPI_I2S_GetFlagStatus(SPI1,&nbsp;SPI_I2S_FLAG_RXNE)&nbsp;==&nbsp;RESET);                //?±SPI?????????÷?????±????
<br>        return&nbsp;SPI_I2S_ReceiveData(SPI1);                                                                                //·???SPI??????????????
<br>}外加时钟程序,这是工程里的内容,想了好多天,发送任意一个数,接收都是零,不知道哪里出了问题,请高手指教!还想请你发一份你的这个程序给我,不胜感激!!(990170517@qq.com)
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-11-24
在线时间
0 小时
发表于 2015-11-3 10:36:21 | 显示全部楼层
回复【5楼】zhoujiaquan:
<br>---------------------------你的问题解决了吗,为什么返回都是零呢,我也是这样
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-9-29 23:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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