你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

F407的SPI读写问题

[复制链接]
miracle533 提问时间:2018-3-6 21:16 /
悬赏3ST金币已解决
本帖最后由 miracle533 于 2018-3-8 18:59 编辑

小弟最近在调试NRF24L01模块,遇到了几个问题:1NRF24L01的最大时钟频率是多少?(我在网上找的最大不超过10MHz)
2先带上SPI配置的程序
  1. //配置系统时钟
  2. //        SystemInit();

  3.         /*APB1 84MHz,具体有哪些在此时钟上可跳进去查看*/
  4.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR ,ENABLE);        /* 84MHZ*/
  5.                
  6.         /*APB2 168MHz 具体有哪些在此时钟上可跳进去查看*/
  7.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_SYSCFG | RCC_APB2Periph_SPI1, ENABLE);/* 168MHZ */


  8.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOF, ENABLE);               
  9. }
复制代码
  1.          
  2.           /* <font color="#ff0000">IRQ(PB8)    CS(PB7)   CE(PB6) </font>  */
  3.                 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_8;
  4.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
  5.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  6.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  7.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  8.                 GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化PG6,7
  9.         
  10.                 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  11.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输出模式
  12.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  13.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  14.                 GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化PB14
复制代码
  1.   /* <font color="#ff0000">SPI_MISO(PB4)    SPI_MOSI(PB5)   SCK(PB3</font>) */
  2.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;//PB3~5复用功能输出        
  3.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
  4.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  5.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  6.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  7.   GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
  8.         
  9.         GPIO_PinAFConfig(GPIOB,GPIO_PinSource3,GPIO_AF_SPI1); //PB3复用为 SPI1
  10.         GPIO_PinAFConfig(GPIOB,GPIO_PinSource4,GPIO_AF_SPI1); //PB4复用为 SPI1
  11.         GPIO_PinAFConfig(GPIOB,GPIO_PinSource5,GPIO_AF_SPI1); //PB5复用为 SPI1


  12.         //这里只针对SPI口初始化
  13.         RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1,ENABLE);//复位SPI1
  14.         RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1,DISABLE);//停止复位SPI1
  15.         
  16. //        GPIO_SetBits(GPIOB,GPIO_Pin_10);

  17.         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
  18.         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                //设置SPI工作模式:设置为主SPI
  19.         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                //设置SPI的数据大小:SPI发送接收8位帧结构
  20.         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;                //串行同步时钟的空闲状态为高电平
  21.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;        //串行同步时钟的第二个跳变沿(上升或下降)数据被采样
  22.         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
  23.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;                //定义波特率预分频的值:波特率预分频值为256
  24.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;        //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
  25.         SPI_InitStructure.SPI_CRCPolynomial = 7;        //CRC值计算的多项式
  26.         SPI_Init(SPI1, &SPI_InitStructure);  //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器

  27.         SPI_Cmd(SPI1, ENABLE); //使能SPI外设

  28.         SPI1_ReadWriteByte(0x31);//启动传输                 
复制代码
  1. u8 SPI1_ReadWriteByte(u8 TxData)
  2. {                                          
  3. while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET){}//
  4.         
  5.         SPI_I2S_SendData(SPI1,TxData); //
  6.                
  7.   while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET){}//

  8.         return SPI_I2S_ReceiveData(SPI1); //
  9.                
  10. }
复制代码



然后问题出在了SPI1_ReadWriteByte函数,不管我写入的是0X31还是0X22或是其他,仿真调试看到的DR寄存器里都是0XFF.插上NRF24L01模块以后也是如此。先让大佬们看看我的SPI配置有什么问题,感激不尽


最佳答案

查看完整内容

1、官网资料的确说SPI最快是10Mbps 各种资料见链接,http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01 2、IRQ(PB8) CS(PB7),是不是注释反了呢,CS是输出,IRQ是输入,而你实际定义是PB8是输出,PB7是输入。 NRF24L01的SPI通信过程中,必须是在CS由高变低后发送指令,CS由低变高后结束传输。
<
收藏 评论13 发布时间:2018-3-6 21:16

举报

13个回答
toofree 回答时间:2018-3-6 21:16:53
1、官网资料的确说SPI最快是10Mbps
各种资料见链接,http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01
2、IRQ(PB8)    CS(PB7),是不是注释反了呢,CS是输出,IRQ是输入,而你实际定义是PB8是输出,PB7是输入。

NRF24L01的SPI通信过程中,必须是在CS由高变低后发送指令,CS由低变高后结束传输。
nAN24-12.zip (933.08 KB, 下载次数: 7)

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

xself 回答时间:2018-3-6 23:20:52
没有看到相关外设和GPIO时钟的开启。另外可以测试下SPI的信号数据波形是否正常..

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

bargagebaobei 回答时间:2018-3-7 08:06:45
1.io口时钟使能代码没有看到
2.TxData没有看到写数据代码
3.第一段代码和第二段代码 关于PB678引脚的定义有点不一致啊 第一段代码你这是写来干嘛的啊

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

MrJiu 回答时间:2018-3-7 13:40:19
直接用CUbe配置,妥妥的!!!!

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

miracle533 回答时间:2018-3-8 19:00:54
xself 发表于 2018-3-6 23:20
没有看到相关外设和GPIO时钟的开启。另外可以测试下SPI的信号数据波形是否正常.. ...

你好,1相关外设和GPIO时钟在程序里配置过,在帖子里没有发出,现已补上;
2测试SPI的信号数据波形可以用软件仿真测试吗?
miracle533 回答时间:2018-3-8 19:09:54
bargagebaobei 发表于 2018-3-7 08:06
1.io口时钟使能代码没有看到
2.TxData没有看到写数据代码
3.第一段代码和第二段代码 关于PB678引脚的定义有 ...

你好,1 io口时钟代码没有在帖子里贴上,现已补上
2 TxData函数是最后那个写代码的函数吧
3 第一段的PB678,是设置NRF24L01的CE CS IRQ接口,下面的PB345是设置SCK MISO MOSI
miracle533 回答时间:2018-3-8 19:11:20
MrJiu 发表于 2018-3-7 13:40
直接用CUbe配置,妥妥的!!!!

你好,请问这个CUBE配置,在会用库函数的基础下学习大概需要多长时间呢?
miracle533 回答时间:2018-3-8 20:14:59
bargagebaobei 发表于 2018-3-7 08:06
1.io口时钟使能代码没有看到
2.TxData没有看到写数据代码
3.第一段代码和第二段代码 关于PB678引脚的定义有 ...

问题已解决,谢谢大佬回复
miracle533 回答时间:2018-3-8 20:15:55
toofree 发表于 2018-3-6 23:37
1、官网资料的确说SPI最快是10Mbps
各种资料见链接,http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nR ...

问题已解决,,确实是第2点上的问题;谢谢大佬

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2 结帖奖励

查看全部评分

12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版