stm32f303re 将数据写入 st M95160w EEPROM 并读回写入的数据

问题描述

使用stm32f303re向st M95160w EEPROM写入数据,并读回写入的数据。但问题是我无法使用 SPI 向/从 eeprom 写入和读取。每次我尝试在写入后读取数据时,它都显示 0。写入操作后,读取状态寄存器显示为零,读取操作也是如此。例如我想写入 3 个字节的数据并接收 3 个字节的数据。 输出得到类似

写入 0x00 后的状态 读取 0x00 后的状态 数据 0x00 0x00 0x00

有人可以帮助我可能的原因是什么。

这里的SPI初始化代码

hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;
  hspi1.Init.Direction = SPI_DIRECTION_2LInes;
  hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi1.Init.NSS = SPI_NSS_SOFT;
  hspi1.Init.BaudratePrescaler = SPI_BAUdratEPRESCALER_8;
  hspi1.Init.FirstBit = SPI_FirsTBIT_MSB;
  hspi1.Init.TIMode = SPI_TIMODE_disABLE;
  hspi1.Init.CRCCalculation = SPI_CRCCALculaTION_disABLE;
  hspi1.Init.CRCpolynomial = 7;
  hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  hspi1.Init.NsspMode = SPI_NSS_pulse_disABLE;
  if (HAL_SPI_Init(&hspi1) != HAL_OK)
  {
    Error_Handler();
  }

写入 eeprom 代码

uint8_t EEwrite_arry(uint16_t StartAddress,uint8_t* data,uint16_t size)
{
      while (EEPROM_SPI->State != HAL_SPI_STATE_READY)
        {
                HAL_Delay(5);
            }

        Write_Enable();
    
        uint8_t command[3];
        command[0] = EEPROM_WRITE;// Send "Write to Memory" instruction
        command[1] = StartAddress>>8;
        command[2] = StartAddress;
        //command[3] = data[size];
        EEPROM_CS_LOW();
        HAL_SPI_Transmit(EEPROM_SPI,(uint8_t*)command,3,100);

        HAL_SPI_Transmit(EEPROM_SPI,(uint8_t*) data,size,100);
        EEPROM_CS_HIGH();
        EEPROM_SPI_WaitStandbyState();
        Write_disable();
        uint8_t Status_byte=Read_Status_Register();
        return Status_byte;

}

从这里读取 EEPROM 代码

uint8_t EEread_arry(uint16_t StartAddress,uint16_t size)
{
    while (EEPROM_SPI->State != HAL_SPI_STATE_READY)
            {
            HAL_Delay(5);
            }
             uint8_t command[3];

             command[0] = EEPROM_READ;    // Send "Read from Memory" instruction
             command[1] = StartAddress >> 8;  // Send 16-bit address
             command[2] = StartAddress;
            EEPROM_CS_LOW();// Select the EEPROM: Chip Select low
            HAL_SPI_Transmit(EEPROM_SPI,100);
   while (HAL_SPI_Receive(EEPROM_SPI,(uint8_t*)data,100) == HAL_BUSY)
              {
                      HAL_Delay(5);
               };
            // deselect the EEPROM: Chip Select high
            EEPROM_CS_HIGH();
            uint8_t Status_byte=Read_Status_Register();
            return Status_byte;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)