OpenEdv-开源电子网

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

关于SPI读W25Q128

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-10-21
在线时间
12 小时
发表于 2016-11-15 14:27:32 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 kissmyass 于 2016-11-15 20:45 编辑

看了原子哥的SPI例程,想用模拟SPI的方式驱动W25Q128,发现了几个问题1:例程中的CS片选也是由stm32自动控制的吗?
2:启动传输时发送0xff为啥不用拉低片选?
3:原子哥的例程中使用的是模式3(SCK空闲时为高),想用w25q128的模式0(SCK空闲时为低),对照了MDK的逻辑分析仪感觉时序没问题啊,用为啥不行?还是我的程序问题?求解求解


贴上我的部分程序
#define CS PBout(12)
#define SCK PBout(13)
#define MISO PBin(14)
#define MOSI PBout(15)


void SPI2_Init(void)
{
         GPIO_InitTypeDef GPIO_InitStructure;


        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOB, ENABLE );//PORTB时钟使能
         

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //PB13/14/15复用推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB
        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 ;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  //PB13/14/15复用推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        
        SCK=0;
        delay_us(5);
        CS=0;
        delay_us(5);
        SPI2_ReadWriteByte(0xFF);//启动传输                 
delay_us(5);
        CS=1;

}


u8 SPI2_ReadWriteByte(u8 TxData)
{
        u8 rec=0,i;
        for(i=0;i<=7;i++)
        {               
                if(TxData&0X80)MOSI=1;
                else MOSI=0;
                TxData<<=1;
                delay_us(2);
                SCK=1;
                delay_us(2);
                SCK=0;
                delay_us(2);
                rec<<=1;
                rec|=MISO;               
        }
        delay_us(5);
        return rec;
}

发送0xff:
0xff.png

发送0x90:
0x90.png


最佳答案

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

1,因为并没有真正的发数据,只是提供时钟而已。 2,可能你还要修改采样点。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-11-15 14:27:33 | 显示全部楼层
1,因为并没有真正的发数据,只是提供时钟而已。
2,可能你还要修改采样点。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-10-21
在线时间
12 小时
 楼主| 发表于 2016-11-15 19:25:16 | 显示全部楼层
求解求解
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-10-21
在线时间
12 小时
 楼主| 发表于 2016-11-15 19:44:56 | 显示全部楼层
正点原子 发表于 2016-11-15 14:27
1,因为并没有真正的发数据,只是提供时钟而已。
2,可能你还要修改采样点。

为啥没有真正发数据 原子哥能具体讲一下吗
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-10-21
在线时间
12 小时
 楼主| 发表于 2016-11-15 20:13:25 | 显示全部楼层
kissmyass 发表于 2016-11-15 19:44
为啥没有真正发数据 原子哥能具体讲一下吗

原子哥 前两个问题懂了 修改采样时间是啥意思? 延时部分吗?
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-10-21
在线时间
12 小时
 楼主| 发表于 2016-11-15 22:58:42 | 显示全部楼层
问题已经解决 谢谢!!
回复

使用道具 举报

10

主题

172

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1479
金钱
1479
注册时间
2016-1-25
在线时间
260 小时
发表于 2016-12-5 15:17:36 | 显示全部楼层
楼主   问题解决了  应该在结贴的时候   说下解决方法   也好给我们新人一些参考学习
回复

使用道具 举报

2

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
509
金钱
509
注册时间
2016-11-16
在线时间
111 小时
发表于 2016-12-5 16:48:31 | 显示全部楼层
说一下方法啊   学习学习
回复

使用道具 举报

11

主题

85

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2016-3-16
在线时间
15 小时
发表于 2017-3-22 18:31:48 | 显示全部楼层

我现在把用户RFID的卡号和密码全部事先存入W25Q128中,当有卡进入RC522的天线区域内时读取卡号和事先存储的所有卡号进行对比,
现在我不太明白怎么样寻找flash中和读到的卡号一样的卡号
回复

使用道具 举报

4

主题

14

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
306
金钱
306
注册时间
2017-8-1
在线时间
51 小时
发表于 2018-8-13 17:23:54 | 显示全部楼层
想问题主,如何设定是模式0还是模式3呢
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2019-5-8
在线时间
0 小时
发表于 2019-5-8 17:24:11 | 显示全部楼层
kissmyass 发表于 2016-11-15 22:58
问题已经解决 谢谢!!

楼主,你是修改了哪里最后可以使用模式0
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 15:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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