/*******************************************************************************
|
* File Name : MCUFlash.c
|
* Description :
|
* Created on : 2018Äê5ÔÂ29ÈÕ
|
* Author : HIDO
|
*******************************************************************************/
|
|
/*******************************************************************************
|
* Include Files *
|
*******************************************************************************/
|
#include "MCUFlash.h"
|
#include "stm32f1xx_hal.h"
|
#include "string.h"
|
|
/*******************************************************************************
|
* Macro *
|
*******************************************************************************/
|
|
/*******************************************************************************
|
* Type Definition *
|
*******************************************************************************/
|
|
/*******************************************************************************
|
* Local Variable *
|
*******************************************************************************/
|
|
/*******************************************************************************
|
* Local Function Declaration *
|
*******************************************************************************/
|
|
/*******************************************************************************
|
* Local Function *
|
*******************************************************************************/
|
|
/*******************************************************************************
|
* Global Function *
|
*******************************************************************************/
|
|
/*******************************************************************************
|
* Function Name : MCUFlash_Init
|
* Description :
|
* Input :
|
* Output :
|
* Return :
|
* Author : HIDO
|
* Modified Date: : 2018Äê5ÔÂ29ÈÕ
|
*******************************************************************************/
|
HIDO_INT32 MCUFlash_Init(void)
|
{
|
HAL_FLASH_Unlock();
|
|
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPERR | FLASH_FLAG_OPTVERR);
|
|
return HIDO_OK;
|
}
|
|
/*******************************************************************************
|
* Function Name : MCUFlash_Erase
|
* Description :
|
* Input :
|
* Output :
|
* Return :
|
* Author : HIDO
|
* Modified Date: : 2018Äê5ÔÂ29ÈÕ
|
*******************************************************************************/
|
HIDO_INT32 MCUFlash_Erase(HIDO_UINT32 _u32EraseAddr, HIDO_UINT32 _u32EraseLen)
|
{
|
FLASH_EraseInitTypeDef stEraseInit;
|
HIDO_UINT32 u32EraseError = 0;
|
|
if(_u32EraseAddr < FLASH_BASE || _u32EraseAddr > FLASH_BANK1_END)
|
{
|
return HIDO_ERR;
|
}
|
|
if(_u32EraseLen < FLASH_PAGE_SIZE)
|
{
|
_u32EraseLen = FLASH_PAGE_SIZE;
|
}
|
|
stEraseInit.TypeErase = FLASH_TYPEERASE_PAGES;
|
stEraseInit.Banks = FLASH_BANK_1;
|
stEraseInit.PageAddress = _u32EraseAddr & (~(FLASH_PAGE_SIZE - 1));
|
stEraseInit.NbPages = (_u32EraseLen / FLASH_PAGE_SIZE) + ((_u32EraseLen % FLASH_PAGE_SIZE) == 0 ? 0 : 1);
|
|
if(HAL_FLASHEx_Erase(&stEraseInit, &u32EraseError) != HAL_OK)
|
{
|
return HIDO_ERR;
|
}
|
|
return HIDO_OK;
|
}
|
|
/*******************************************************************************
|
* Function Name : MCUFlash_Write
|
* Description :
|
* Input :
|
* Output :
|
* Return :
|
* Author : HIDO
|
* Modified Date: : 2018Äê5ÔÂ29ÈÕ
|
*******************************************************************************/
|
HIDO_INT32 MCUFlash_Write(HIDO_UINT32 _u32WriteAddr, HIDO_UINT8 *_pu8WriteData, HIDO_UINT32 _u32WriteLen)
|
{
|
HIDO_UINT32 i = 0;
|
HIDO_UINT32 u32TmpLen = 0;
|
HIDO_UINT32 u32TmpValue = 0;
|
|
while (_u32WriteLen != 0)
|
{
|
if (_u32WriteLen < 4)
|
{
|
u32TmpValue = 0xFFFFFFFF;
|
for(i = 0; i < _u32WriteLen; i++)
|
{
|
((HIDO_UINT8 *)&u32TmpValue)[i] = _pu8WriteData[i];
|
}
|
u32TmpLen = _u32WriteLen;
|
}
|
else
|
{
|
u32TmpValue = *(HIDO_UINT32 *) _pu8WriteData;
|
u32TmpLen = 4;
|
}
|
|
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, _u32WriteAddr, u32TmpValue) != HAL_OK)
|
{
|
return HIDO_ERR;
|
}
|
|
_u32WriteAddr += u32TmpLen;
|
_pu8WriteData += u32TmpLen;
|
_u32WriteLen -= u32TmpLen;
|
}
|
|
return HIDO_OK;
|
}
|
|
/*******************************************************************************
|
* Function Name : MCUFlash_Read
|
* Description :
|
* Input :
|
* Output :
|
* Return :
|
* Author : HIDO
|
* Modified Date: : 2018Äê5ÔÂ29ÈÕ
|
*******************************************************************************/
|
HIDO_INT32 MCUFlash_Read(HIDO_UINT8 *_pu8ReadData, HIDO_UINT32 _u32ReadAddr, HIDO_UINT32 _u32ReadLen)
|
{
|
memcpy(_pu8ReadData, (HIDO_VOID *)_u32ReadAddr, _u32ReadLen);
|
|
return HIDO_OK;
|
}
|