代码
uint16_t bsp_eeprom_write (uint32_t WriteAddr, uint8_t *pBuffer, uint16_t NumToWrite)
{
uint16_t t,err = 0;
assert_param( ( DATA_EEPROM_BASE + WriteAddr ) >= DATA_EEPROM_BASE );
assert_param( pBuffer != NULL );
if (HAL_FLASHEx_DATAEEPROM_Unlock()!= HAL_OK)
{
err |= EEPROM_UNLOCK_ERR;
}
for (t = 0; t < NumToWrite; t++)
{
if (HAL_FLASHEx_DATAEEPROM_Program (FLASH_TYPEPROGRAMDATA_BYTE, (DATA_EEPROM_BASE + WriteAddr + t), pBuffer[t])!=HAL_OK)
{
err |= EEPROM_PROGRAM_ERR;
break;
}
}
if (HAL_FLASHEx_DATAEEPROM_Lock() != HAL_OK)
{
err |= EEPROM_LOCK_ERR;
}
return err;
}
//PageRange 0-511
uint16_t bsp_eeprom_easer_page (uint16_t startPage, uint16_t endPage)
{
uint16_t t,err = 0;
for (t = startPage ; t <= endPage; t++)
{
dbg_printf("-->[data ] DATA_EEPROM_BASE + WriteAddr + t:0X%X\r\n",DATA_EEPROM_BASE + t * 4);
if (HAL_FLASHEx_DATAEEPROM_Erase (DATA_EEPROM_BASE + t * 4) !=HAL_OK)
{
err |= EEPROM_EASER_ERR;
}
}
return err;
}
void bsp_eeprom_read (uint16_t ReadAddr, uint8_t *pBuffer, uint16_t NumToRead)
{
uint16_t t;
for (t = 0; t < NumToRead ; t++)
{
* (pBuffer + t) = * (uint8_t*) (DATA_EEPROM_BASE + ReadAddr + t);
}
}
坑:上面解锁,下面加锁 正常的操作流程是解锁,写,加锁,流程一定不能错,否则就写不进去,或者死机,我写不进去,查了好久,最后发现上面解锁了,下面也写了一句解锁。
如果这篇文章对您很有帮助,不妨
----- 本文结束 ❤ 感谢您的阅读 ----
上一篇
欢迎使用 Typecho
下一篇
QT-串口操作
- 本文作者: Memory
- 本文链接: https://www.mzpkz.top/post/2019-07-08/
- 版权声明: 本博客所有文章除特别声明外,转载请注明出处!