/******************************************************************************* * 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; }