stm32 - 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,uint8_t* data, 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, (uint8_t*)command,3, 100);
while (HAL_SPI_Receive(EEPROM_SPI, (uint8_t*)data, size , 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;
}
解决方案
推荐阅读
- python - 从另一个模型的方法为模型创造价值
- graph - 如何对个人提供的服务进行数据建模背书,图数据建模
- dart - 如何在颤动中绘制一个扇区?
- c++ - 你如何模拟一个作为被测 gmock 类的一部分的函数?
- apache-spark - 查询时大量大十进制类型为空
- express - Promisify Joi:编译未定义
- r - 如何将线性模型与阶跃函数相结合
- .htaccess - 如何 301 重定向包含变量的 URL (.htaccess)?
- c# - 在 ForEach C# 期间继续向表中添加行
- python - Kivy+sqlite3+python 将存储数据注册到数据库导致此问题