问题描述
使用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 (将#修改为@)