野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20766|回复: 2

SPI-FLASH通信中关于发送接收函数的问题

[复制链接]
发表于 2020-9-18 09:47:47 | 显示全部楼层 |阅读模式
1火花
uint8_t SPI_Send_Byte(uint8_t data)
{
        uint16_t timeout = SPI_Check_Time;
        while(SPI_I2S_GetFlagStatus (SPIx,SPI_I2S_FLAG_TXE) == RESET)
        {
                if(timeout-- == 0)
                {
                        SPI_TimeOut_CallBack(0);
                        return ;
                }
        }
        SPI_I2S_SendData(SPIx,data);
}

uint8_t SPI_Recive_Byte(void)
{
        uint16_t timeout = SPI_Check_Time;
        SPI_Send_Byte(0xFF);
        while(SPI_I2S_GetFlagStatus (SPIx,SPI_I2S_FLAG_RXNE) == RESET)
        {
                //检测超时
                if(timeout-- == 0)
                {
                        SPI_TimeOut_CallBack(1);
                        return 0;
                }
        }
        return (uint8_t)SPI_I2S_ReceiveData(SPIx);
}
上方是自己写的SPI发送与接收函数,在发送函数中只发送一个字节;在接收函数中,先发送一个0xFF(Dummy_Byte),然后再接收数据。结果测试中接收到第一个字节一直是0xFF,但后边接收到的数据就是正确的。
QQ截图20200918093327.png 这个是我用标准例程运行出来的结果,FLASH_ID是ef4015,下方读取的数据是从0开始。
QQ截图20200918094253.png 这个是我用自己写的函数运行的结果,FLASH_ID是ff4015,下方读取的数据也变为从ff开始。
这是什么原因,请大家帮忙解答一下。

回复

使用道具 举报

发表于 2020-9-18 16:34:12 | 显示全部楼层
是不是读的起始地址读多了,flash的默认值有可能是0xFF
回复

使用道具 举报

 楼主| 发表于 2020-9-21 11:22:31 | 显示全部楼层
还有梦与你 发表于 2020-9-18 16:34
是不是读的起始地址读多了,flash的默认值有可能是0xFF

我把例程里的读写函数替换成自己写的函数,测试的结果就是第二张图显示的情况,感觉是函数的问题。我写入的数据是0~ff,如果起始地址读多了的话,不应该显示的是ff 0 1 2...么,可是第二张图显示的是ff 1 2...
回复

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-19 06:10 , Processed in 0.036403 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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