当我开始使用来自winbond W25Q32FV和STM32F103RCT6 CORTEX M3的SPI FLASH时。我正面临一个理解事情应该如何运作的真正问题。
我正在使用CUBEMX。首先,我选择RCC作为晶体/陶瓷谐振器,并将我的时钟配置为72MHz。然后我将SPI1配置为FULL DUPLEX MASTER。我只有3个引脚(PA5 - SCK,PA6- MISO,PA7 - MOSI)所以我将CS引脚配置为PA2上的GPIO OUTPUT。
现在写入闪存?我需要做的第一件事是什么?我需要遵循哪些步骤?
只要我首先参考数据表,我就需要启用写入(0x06)。然后我需要发送页面编程(0x02)然后我需要发送24位地址。然后我需要发送至少1个字节的数据。所有这些程序都会在CS为低电平时发生,然后在发送后所有这些CS都会很高。
然后我禁用写入启用,即写入禁用(0x04)。
之后我试图从该地址读取数据,因此,我发送读取数据(0x03)和24位地址。然后在缓冲区中接收数据。
以下是示例代码:
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
HAL_Delay(10);
SPI_TX_BUFF[0] = 0x06;
SPI_TX_BUFF[1] = 0x02;
SPI_TX_BUFF[2] = 0x00;
SPI_TX_BUFF[3] = 0x00;
SPI_TX_BUFF[4] = 0x01;
SPI_TX_BUFF[5] = 0x11;
HAL_SPI_Transmit(&hspi1, SPI_TX_BUFF, 6, 50);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
HAL_Delay(10);
SPI_TX_BUFF[0] = 0x04;
HAL_SPI_Transmit(&hspi1, SPI_TX_BUFF, 1, 50);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
HAL_Delay(10);
SPI_TX_BUFF[0] = 0x03;
SPI_TX_BUFF[1] = 0x00;
SPI_TX_BUFF[2] = 0x00;
SPI_TX_BUFF[3] = 0x01;
HAL_SPI_Transmit(&hspi1, SPI_TX_BUFF, 4, 50);
HAL_SPI_Receive(&hspi1, SPI_RX_BUFF, 1, 50);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
HAL_Delay(100);
此代码无效。闪存代码后,我甚至无法进入调试模式。它说没有目标连接。我知道我正在做一些大错的事情,需要一点指导。我只需要知道成功启动,写入和读取spi flash的步骤是什么。
就像我对一些东西感到困惑
2.如何发送24位地址?我开始在flash中写入数据的起始地址是什么?
3.什么时候闪光灯是一个简单的闪光灯。 MCU工作正常,但当我闪存此代码时为什么警报无目标连接。然后我必须按复位并删除所有内容。
任何帮助将不胜感激。
提前谢谢。