OpenEdv-开源电子网

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

stm32f205不识别NRF24L01

[复制链接]

12

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-12-30
在线时间
0 小时
发表于 2014-9-19 17:54:35 | 显示全部楼层 |阅读模式
5金钱
之前用stm32f103小开发板仿照原子哥的无线通信程序实现了与战舰开发板的无线通信,之后我想实现stm32f205最小系统开发板与战舰开发板实现无线通信,我也是仿照战舰开发板的无线通信程序写的,SPI.c和24l01.c都是用的无线通信例程里的复制过来的,自己就改了部分端口,但是识别不到NRF24L01无线模块,研究几天不明原因,请各位大神给点意见,拜托拜托<img src="/static/image/smiley/kindeditor/49.gif" border="0" alt="" /><img src="/static/image/smiley/kindeditor/54.gif" border="0" alt="" /><img src="/static/image/smiley/kindeditor/83.gif" border="0" alt="" />

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-9-19 22:45:34 | 显示全部楼层
是不是SPI频率太快了?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

12

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-12-30
在线时间
0 小时
 楼主| 发表于 2014-9-22 14:29:59 | 显示全部楼层
void&nbsp;SPI2_Init(void)
<br>{
<br>&nbsp;        GPIO_InitTypeDef&nbsp;GPIO_InitStructure;
<br>&nbsp;&nbsp;        SPI_InitTypeDef&nbsp;&nbsp;SPI_InitStructure;
<br>
<br>        RCC_APB2PeriphClockCmd(        RCC_AHB1Periph_GPIOB,&nbsp;ENABLE&nbsp;);//PORTB时钟使能&nbsp;
<br>        RCC_APB1PeriphClockCmd(        RCC_APB1Periph_SPI2,&nbsp;&nbsp;ENABLE&nbsp;);//SPI2时钟使能&nbsp;       
<br>&nbsp;
<br>        GPIO_InitStructure.GPIO_Pin&nbsp;=&nbsp;GPIO_Pin_13&nbsp;|&nbsp;GPIO_Pin_14&nbsp;|&nbsp;GPIO_Pin_15;
<br>        GPIO_InitStructure.GPIO_Mode&nbsp;=&nbsp;GPIO_OType_PP;&nbsp;&nbsp;//PB13/14/15复用推挽输出&nbsp;
<br>        GPIO_InitStructure.GPIO_Speed&nbsp;=&nbsp;GPIO_Speed_50MHz;
<br>        GPIO_Init(GPIOB,&nbsp;&GPIO_InitStructure);//初始化GPIOB
<br>
<br>&nbsp;        GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);&nbsp;&nbsp;//PB13/14/15上拉
<br>&nbsp;
<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_High;                //串行同步时钟的空闲状态为高电平
<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_256;                //定义波特率预分频的值:波特率预分频值为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(SPI2,&nbsp;&SPI_InitStructure);&nbsp;&nbsp;//根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器
<br>&nbsp;
<br>        SPI_Cmd(SPI2,&nbsp;ENABLE);&nbsp;//使能SPI外设
<br>       
<br>        SPI2_ReadWriteByte(0xff);//启动传输                &nbsp;
<br>&nbsp;
<br>
<br>}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br>void&nbsp;SPI2_SetSpeed(u8&nbsp;SPI_BaudRatePrescaler)
<br>{
<br>&nbsp;&nbsp;        assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));
<br>        SPI2-&gt;CR1&=0XFFC7;
<br>        SPI2-&gt;CR1|=SPI_BaudRatePrescaler;        //设置SPI2速度&nbsp;
<br>        SPI_Cmd(SPI2,ENABLE);&nbsp;
<br>
<br>}&nbsp;
<br>
<br>//SPIx&nbsp;读写一个字节
<br>//TxData:要写入的字节
<br>//返回值:读取到的字节
<br>u8&nbsp;SPI2_ReadWriteByte(u8&nbsp;TxData)
<br>{               
<br>        u8&nbsp;retry=0;                                &nbsp;       
<br>        while&nbsp;(SPI_I2S_GetFlagStatus(SPI2,&nbsp;SPI_I2S_FLAG_TXE)&nbsp;==&nbsp;RESET)&nbsp;//检查指定的SPI标志位设置与否:发送缓存空标志位
<br>                {
<br>                retry++;
<br>                if(retry&gt;200)return&nbsp;0;
<br>                }                        &nbsp;&nbsp;
<br>        SPI_I2S_SendData(SPI2,&nbsp;TxData);&nbsp;//通过外设SPIx发送一个数据
<br>        retry=0;
<br>
<br>        while&nbsp;(SPI_I2S_GetFlagStatus(SPI2,&nbsp;SPI_I2S_FLAG_RXNE)&nbsp;==&nbsp;RESET)//检查指定的SPI标志位设置与否:接受缓存非空标志位
<br>                {
<br>                retry++;
<br>                if(retry&gt;200)return&nbsp;0;
<br>                }        &nbsp;&nbsp;                                                &nbsp;&nbsp;&nbsp;&nbsp;
<br>        return&nbsp;SPI_I2S_ReceiveData(SPI2);&nbsp;//返回通过SPIx最近接收的数据                                        &nbsp;&nbsp;&nbsp;&nbsp;
<br>}
<br>其中SPI的频率也是按照原子哥的例程来的,没有改动。        SPI_InitStructure.SPI_BaudRatePrescaler&nbsp;=&nbsp;SPI_BaudRatePrescaler_256;                //定义波特率预分频的值:波特率预分频值为256&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;传输速度为&nbsp;传输速度为&nbsp;传输速度为&nbsp;36&nbsp;M/256=&nbsp;M/256=&nbsp;M/256=140.625&nbsp;140.625&nbsp;KHz&nbsp;。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-9-22 21:18:59 | 显示全部楼层
回复【3楼】小梦:
<br>---------------------------------
<br>测测SCK,MISO,MOSI的波形吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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