0

我想用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 库。对此问题的任何帮助都将受到高度赞赏。

4

2 回答 2

1

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

查看结构的定义。有很多评论不同的结构元素的用途。对于初始化,这my_hspi.init部分将是最有趣的。您还必须选择my_hspi.Instance所需的 SPI 通道。

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

于 2019-01-17T15:41:54.503 回答
1

I am not able to comment on the software, but according to your comment you want to enable the reading and writing of the flash.

The Write Protect (/WP) pin can be used to prevent the Status Register from being written.

The /WP pin is active low (GND). (Write disable)

The /WP pin is inactive high (VCC). (Write enable)

Its design only allows reading data.

If you want to read and write data, /WP must be connected to Vcc.

于 2019-01-17T12:19:31.497 回答