stm32和外接flash(w25q)连接问题

Posted

技术标签:

【中文标题】stm32和外接flash(w25q)连接问题【英文标题】:stm32 and external flash (w25q) connection problem 【发布时间】:2019-06-11 11:32:18 【问题描述】:

我想用 STM32 micro (stm32F030F4) 从外部闪存 (Winbond W25Q16BV) 读/写。但在“HAL_SPI_Init()”函数上运行进程停止。

我检查了调试过程,发现了 HAL_SPI_STATE_BUSY。 但我不知道为什么?

我正在使用 STM32CubeMX 生成主项目和 Keil IDE 来编写和调试。

SPI_HandleTypeDef hspi1;


void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_SPI1_Init(void);


uint8_t spiData[2];

int main(void)

  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_SPI1_Init();
  MX_FATFS_Init();


  SPI_HandleTypeDef my_hspi;
  HAL_SPI_Init(&my_hspi);

  HAL_FLASH_Unlock();


  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET); // CS to HIGH
  HAL_Delay(10);


  //Read data
  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET); // CS to low

  spiData[0]=0x05;

  //transmit register address
  HAL_SPI_Transmit(&my_hspi,spiData,1,10);

 //read
  HAL_SPI_Receive(&my_hspi,&spiData[1],1,10);

  ...

这是我们的示意图:

不幸的是,我没有找到一个很好的例子/说明如何使用外部 SPI 库。非常感谢您对此问题的任何帮助。

【问题讨论】:

【参考方案1】:

您尚未为my_hspi 结构设置任何参数,因此您的 HAL 驱动程序不知道他必须做什么。

查看结构体的定义。有很多 cmets 用于不同的结构元素。对于初始化,my_hspi.init 部分将是最有趣的。 您还必须将my_hspi.Instance 连接到所需的 SPI 通道。

您可以使用免费的 STM32 Cube Mx 软件生成示例配置。

【讨论】:

谢谢 A.R.C.请解释更多...您能否显示链接或代码示例... 这是一个Cube软件的例子:microtechnics.ru/en/stm32cube-spi-and-dma-example 任何其他问题你应该使用这个论坛或electronics.stackexchange.com的搜索功能。【参考方案2】:

我无法对软件发表评论,但根据您的评论您想启用闪存的读写。

写保护 (/WP) 引脚可用于防止状态寄存器被写入。

/WP 引脚低电平有效 (GND)。 (写禁用)

/WP 引脚处于无效高电平 (VCC)。 (写使能)

它的设计只允许读取数据。

如果要读写数据,/WP必须接Vcc。

【讨论】:

感谢德克斯特的评论。我已将 WP 连接到 Vcc,但问题仍然存在。

以上是关于stm32和外接flash(w25q)连接问题的主要内容,如果未能解决你的问题,请参考以下文章

STM32读写W25Q

STM32F0xx_FLASH编程(片内)配置详细过程

ESP8266学习笔记——内存分布及Flash读写接口

MDK st-link下载STM32程序出现Internal command error和Error:Flash download failed. Target DLL

STM32的Flash读写保护,SWD引脚锁的各种解决办法汇总(2020-03-10)

如何写入STM32 Flash