OpenEdv-开源电子网

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

求助,STM32F103C8T6,使用SPI2接口接外部flash W25Q64,实验多次无法成功。

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2018-1-5
在线时间
4 小时
发表于 2018-1-5 16:05:27 | 显示全部楼层 |阅读模式
1金钱
看了原子哥的教程。使用STM32103C8T6的SPI2连接flash W25Q64。电路图附上。试过好几遍都无法成功。附上SPI2端口设置的代码,其余部分跟原子哥例程里代码一样。
求原子哥和诸位大神赐教,看看我哪里出了问题

#define        SPI_FLASH_CS PAout(15)  
u16 SPI_FLASH_TYPE=W25Q64;



void SPI2_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
        SPI_InitTypeDef  SPI_InitStructure;
        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOB, ENABLE );       
        RCC_APB2PeriphClockCmd(        RCC_APB1Periph_SPI2, ENABLE );       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);

        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;               
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;               
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;               
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;       
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;               
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;               
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;       
        SPI_InitStructure.SPI_CRCPolynomial = 7;       
        SPI_Init(SPI2, &SPI_InitStructure);  
        SPI_Cmd(SPI2, ENABLE);
       SPI2_ReadWriteByte(0xff);         
}   



void SPI_Flash_Init(void)
{

        GPIO_InitTypeDef GPIO_InitStructure;
        SPI_InitTypeDef  SPI_InitStructure;       
         RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOA, ENABLE );
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;  //SPI CS
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        GPIO_SetBits(GPIOA,GPIO_Pin_15);

      SPI2_Init();
               
        SPI2_SetSpeed(SPI_BaudRatePrescaler_256);       
        SPI_FLASH_TYPE=SPI_Flash_ReadID();
}  

1515138876(1).jpg
1515138876(1).jpg

最佳答案

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

RCC_APB2PeriphClockCmd( RCC_APB1Periph_SPI2, ENABLE ); 楼主知道这是干啥的吗?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7462
金钱
7462
注册时间
2015-1-15
在线时间
1367 小时
发表于 2018-1-5 16:05:28 | 显示全部楼层
RCC_APB2PeriphClockCmd(        RCC_APB1Periph_SPI2, ENABLE );   
楼主知道这是干啥的吗?
一分耕耘一分收获。
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2018-1-5
在线时间
4 小时
 楼主| 发表于 2018-1-5 16:08:29 | 显示全部楼层
附上STM32F103C8T6的接口图
1515139020(1).jpg
回复

使用道具 举报

13

主题

145

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
469
金钱
469
注册时间
2015-5-14
在线时间
65 小时
发表于 2018-1-5 16:21:53 | 显示全部楼层
先用原子哥的代码试一下,原子哥的代码是经过无数人检验的,只要你电路原理没问题,用原子哥的就么问题。
回复

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-1-7 01:08:05 来自手机 | 显示全部楼层
本帖最后由 275891381 于 2018-1-7 09:26 编辑

你把a15换个别的就可以了,a15  b3 b4是jtag引脚,用的话需要复用,以后记住这三个引脚尽量别用,省的忘了复用,郁闷
回复

使用道具 举报

0

主题

9

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
8514
金钱
8514
注册时间
2016-12-3
在线时间
1047 小时
发表于 2018-1-7 09:15:43 | 显示全部楼层
向大神们学习学习
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2018-1-5
在线时间
4 小时
 楼主| 发表于 2018-1-9 17:38:04 | 显示全部楼层
275891381 发表于 2018-1-7 01:08
你把a15换个别的就可以了,a15  b3 b4是jtag引脚,用的话需要复用,以后记住这三个引脚尽量别用,省的忘了 ...

void SPI_Flash_Init(void)
{

        GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
  RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOA, ENABLE );
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);       
        SPI2_Init();        
        SPI2_SetSpeed(SPI_BaudRatePrescaler_256);        //éèÖÃÎa18Mê±Öó,¸ßËùÄ£ê½
        SPI_FLASH_TYPE=SPI_Flash_ReadID();//¶áè¡FLASH ID.
}  
我试过了,还是不行,MISO和MOSI,以及SCK没有信号输出。。。纠结好几天了。郁闷啊
回复

使用道具 举报

0

主题

56

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1641
金钱
1641
注册时间
2017-7-15
在线时间
216 小时
发表于 2018-1-9 20:18:05 | 显示全部楼层
yklstudent 发表于 2018-1-9 19:19
RCC_APB2PeriphClockCmd(        RCC_APB1Periph_SPI2, ENABLE );   
楼主知道这是干啥的吗?

SPI2的时钟使能,32的每个外设用之前都要把对应的时钟使能。
回复

使用道具 举报

0

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2017-10-12
在线时间
83 小时
发表于 2018-1-9 22:58:40 | 显示全部楼层
妖孽11 发表于 2018-1-9 20:18
SPI2的时钟使能,32的每个外设用之前都要把对应的时钟使能。

7楼已经说得很明白了,看宏名称就知道SPI2是隶属于APB1的,你调用APB2的函数要干啥?
回复

使用道具 举报

0

主题

56

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1641
金钱
1641
注册时间
2017-7-15
在线时间
216 小时
发表于 2018-1-9 23:04:54 | 显示全部楼层
cxf0153 发表于 2018-1-9 22:58
7楼已经说得很明白了,看宏名称就知道SPI2是隶属于APB1的,你调用APB2的函数要干啥?

这个没细看,确实错了。
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2018-1-5
在线时间
4 小时
 楼主| 发表于 2018-1-10 10:27:58 | 显示全部楼层
感谢诸位大神,已经解决了
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2018-1-5
在线时间
4 小时
 楼主| 发表于 2018-1-10 10:28:28 | 显示全部楼层
cxf0153 发表于 2018-1-9 22:58
7楼已经说得很明白了,看宏名称就知道SPI2是隶属于APB1的,你调用APB2的函数要干啥?

确实是你说的问题,是我疏忽了。非常感谢啊
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2018-1-5
在线时间
4 小时
 楼主| 发表于 2018-1-10 10:28:44 | 显示全部楼层
妖孽11 发表于 2018-1-9 23:04
这个没细看,确实错了。

感谢您的提醒,已经解决了
回复

使用道具 举报

2

主题

685

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3447
金钱
3447
注册时间
2017-7-4
在线时间
869 小时
发表于 2018-1-10 13:19:54 | 显示全部楼层
回复

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
158
金钱
158
注册时间
2016-7-9
在线时间
47 小时
发表于 2019-10-17 12:19:37 | 显示全部楼层
咋弄好的?我的也一样,spi2不成功,
RCC_APB2PeriphClockCmd( RCC_APB1Periph_SPI2, ENABLE );
这行改过了,还是不好使呢
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-3-5
在线时间
7 小时
发表于 2019-12-18 09:48:05 | 显示全部楼层

STM32RET6+W25Q128 系列说明:
SPI FLASH驱动说明:blog.csdn.net/weixin_39017479/article/details/103574322
挂在fatfs说明:blog.csdn.net/weixin_39017479/article/details/103591628
回复

使用道具 举报

4

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2019-8-3
在线时间
16 小时
发表于 2019-12-18 10:21:57 | 显示全部楼层
进来学习下的
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-11-22
在线时间
4 小时
发表于 2020-1-16 10:42:15 | 显示全部楼层
RCC_APB2PeriphClockCmd(        RCC_APB1Periph_SPI2, ENABLE ); 这里错了
要改为RCC_APB1PeriphClockCmd(        RCC_APB1Periph_SPI2, ENABLE );
回复

使用道具 举报

17

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
172
金钱
172
注册时间
2014-6-4
在线时间
19 小时
发表于 2023-7-2 15:01:08 | 显示全部楼层
谢谢  我也用上了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 07:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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