OpenEdv-开源电子网

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

用STM32F407的SPI来控制片外EEPROM(X25040)时,读出的数据是乱码,

[复制链接]

4

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2014-6-25
在线时间
0 小时
发表于 2014-7-14 21:48:57 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]void WRITE_X25042(uint8_t* pBuffer, uint8_t WriteAddr, uint16_t NumByteToWrite) { //sFLASH_WaitForWriteEnd(); /*!< Enable the write access to the FLASH */ sFLASH_WriteEnable(); /*!< Select the FLASH: Chip Select low */ sFLASH_CS_LOW(); /*!< Send "Write to Memory " instruction */ sFLASH_SendByte(sFLASH_CMD_WRITE); sFLASH_CS_HIGH(); for(Index=0;Index<10;Index++); sFLASH_CS_LOW(); /*!< Send WriteAddr high nibble address byte to write to */ // sFLASH_SendByte((WriteAddr & 0xFF0000) >> 16); /*!< Send WriteAddr medium nibble address byte to write to */ //sFLASH_SendByte((WriteAddr & 0x0100) >> 8); /*!< Send WriteAddr low nibble address byte to write to */ sFLASH_SendByte(WriteAddr & 0xFF); /*!< while there is data to be written on the FLASH */ while (NumByteToWrite--) { /*!< Send the current byte */ sFLASH_SendByte(*pBuffer); /*!< Point on the next byte to be written */ printf("%c",*pBuffer); pBuffer++; } /*!< Deselect the FLASH: Chip Select high */ sFLASH_CS_HIGH(); /*!< Wait the end of Flash writing */ sFLASH_WaitForWriteEnd(); } void READ_X25042(uint8_t* pBuffer, uint8_t ReadAddr, uint16_t NumByteToRead) { /*!< Select the FLASH: Chip Select low */ sFLASH_CS_LOW(); /*!< Send "Read from Memory " instruction */ sFLASH_SendByte(sFLASH_CMD_READ); /*!< Send ReadAddr high nibble address byte to read from */ //sFLASH_SendByte((ReadAddr & 0xFF0000) >> 16); /*!< Send ReadAddr medium nibble address byte to read from */ // sFLASH_SendByte((ReadAddr& 0x0100) >> 8); /*!< Send ReadAddr low nibble address byte to read from */ sFLASH_SendByte(ReadAddr & 0xFF); while (NumByteToRead--) /*!< while there is data to be read */ { /*!< Read a byte from the FLASH */ *pBuffer = sFLASH_SendByte(sFLASH_DUMMY_BYTE); /*!< Point to the next location where the byte read will be saved */ printf("%c",*pBuffer); pBuffer++; } /*!< Deselect the FLASH: Chip Select high */ sFLASH_CS_HIGH(); } int main(void) { STM_EVAL_LEDInit(LED1); STM_EVAL_LEDInit(LED2); USART_Config();//USART配置 /* Initialize the SPI FLASH driver */ sFLASH_Init(); /* Write Tx_Buffer data to SPI FLASH memory */ WRITE_X25042(Tx_Buffer, FLASH_WRITE_ADDRESS, BufferSize); printf("\n"); /* Read data from SPI FLASH memory */ READ_X25042(Rx_Buffer, FLASH_READ_ADDRESS, BufferSize); printf("\n"); /* Check the correctness of written dada */ TransferStatus1 = Buffercmp(Tx_Buffer, Rx_Buffer, BufferSize); /* TransferStatus1 = PASSED, if the transmitted and received data by SPI1 are the same */ /* TransferStatus1 = FAILED, if the transmitted and received data by SPI1 are different */ if(TransferStatus1 == PASSED) { STM_EVAL_LEDOn(LED1); printf("SPI_EEPROM demo is successful \n"); } else { STM_EVAL_LEDOn(LED2); printf("SPI_EEPROM demo is failed \n"); } while (1){} }[/mw_shl_code]

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

使用道具 举报

4

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2014-6-25
在线时间
0 小时
 楼主| 发表于 2014-7-14 21:57:04 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-7-14 22:42:13 | 显示全部楼层
帮顶,慢慢调试吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-7-15 08:34:18 | 显示全部楼层
抓SPI发送和接收的波形,对比你发送的内容和要接收的数据,对比一下
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4471
金钱
4471
注册时间
2013-4-22
在线时间
335 小时
发表于 2014-7-15 09:01:52 | 显示全部楼层
1.时序可能不正确2.spi配置不正确
回复

使用道具 举报

4

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2014-6-25
在线时间
0 小时
 楼主| 发表于 2014-7-15 09:47:47 | 显示全部楼层

回复

使用道具 举报

4

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2014-6-25
在线时间
0 小时
 楼主| 发表于 2014-7-15 09:48:37 | 显示全部楼层
这是读写的时序图,大家帮忙分析下
回复

使用道具 举报

4

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2014-6-25
在线时间
0 小时
 楼主| 发表于 2014-7-16 09:40:36 | 显示全部楼层
回复【4楼】Badu_Space:
---------------------------
你好:用示波器测得发送和接受的数据是一致的,但是在kei编译器上显示接收到的数据确实乱码,
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-7-16 11:09:45 | 显示全部楼层
发送和接收的数据都是正确的话就是你显示操作不对了吧,分析一下那个波形数据内容,用逻辑分析仪抓
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

4

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2014-6-25
在线时间
0 小时
 楼主| 发表于 2014-7-16 16:56:11 | 显示全部楼层
回复【9楼】Badu_Space:
---------------------------------
我在使用逻辑分析仪时,怎么不显示GPIO
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-7-16 17:04:36 | 显示全部楼层
回复【10楼】tempting:
---------------------------------
你是软件模拟的么?
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 17:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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