77范文网 - 专业文章范例文档资料分享平台

stm32_flash_eeprom_断电保护_数值存储程序(4)

来源:网络收集 时间:2018-11-21 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

} }

/* Return PAGE_FULL in case the valid page is full */ return PAGE_FULL; } /**

* @brief Transfers last updated variables data from the full Page to * an empty one.

* @param VirtAddress: 16 bit virtual address of the variable * @param Data: 16 bit data to be written as variable value * @retval Success or error status:

* - FLASH_COMPLETE: on success * - PAGE_FULL: if valid page is full

* - NO_VALID_PAGE: if no valid page was found * - Flash error code: on write Flash error */

static uint16_t EE_PageTransfer(uint16_t VirtAddress, uint16_t Data) {

FLASH_Status FlashStatus = FLASH_COMPLETE;

uint32_t NewPageAddress = 0x080103FF, OldPageAddress = 0x08010000; uint16_t ValidPage = PAGE0, VarIdx = 0; uint16_t EepromStatus = 0, ReadStatus = 0;

/* Get active Page for read operation */

ValidPage = EE_FindValidPage(READ_FROM_VALID_PAGE);

if (ValidPage == PAGE1) /* Page1 valid */ {

/* New page address where variable will be moved to */ NewPageAddress = PAGE0_BASE_ADDRESS;

/* Old page address where variable will be taken from */ OldPageAddress = PAGE1_BASE_ADDRESS; }

else if (ValidPage == PAGE0) /* Page0 valid */ {

/* New page address where variable will be moved to */ NewPageAddress = PAGE1_BASE_ADDRESS;

/* Old page address where variable will be taken from */ OldPageAddress = PAGE0_BASE_ADDRESS; }

else {

return NO_VALID_PAGE; /* No valid Page */ }

/* Set the new Page status to RECEIVE_DATA status */

FlashStatus = FLASH_ProgramHalfWord(NewPageAddress, RECEIVE_DATA); /* If program operation was failed, a Flash error code is returned */ if (FlashStatus != FLASH_COMPLETE) {

return FlashStatus; }

InitCurrWrAddress();//aft 重新初始化写地址

/* Write the variable passed as parameter in the new active page */ EepromStatus = EE_VerifyPageFullWriteVariable(VirtAddress, Data); /* If program operation was failed, a Flash error code is returned */ if (EepromStatus != FLASH_COMPLETE) {

return EepromStatus; }

/* Transfer process: transfer variables from old to the new active page */ for (VarIdx = 0; VarIdx < NumbOfVar; VarIdx++) {

if (VirtAddVarTab[VarIdx] != VirtAddress) /* Check each variable except the one passed as parameter */ {

/* Read the other last variable updates */

ReadStatus = EE_ReadVariable(VirtAddVarTab[VarIdx], &DataVar); /* In case variable corresponding to the virtual address was found */ if (ReadStatus != 0x1) {

/* Transfer the variable to the new active page */

EepromStatus = EE_VerifyPageFullWriteVariable(VirtAddVarTab[VarIdx], DataVar); /* If program operation was failed, a Flash error code is returned */ if (EepromStatus != FLASH_COMPLETE) {

return EepromStatus; } } } }

/* Erase the old Page: Set old Page status to ERASED status */ FlashStatus = FLASH_ErasePage(OldPageAddress);

/* If erase operation was failed, a Flash error code is returned */ if (FlashStatus != FLASH_COMPLETE) {

return FlashStatus; }

/* Set new Page status to VALID_PAGE status */

FlashStatus = FLASH_ProgramHalfWord(NewPageAddress, VALID_PAGE); /* If program operation was failed, a Flash error code is returned */ if (FlashStatus != FLASH_COMPLETE) {

return FlashStatus; }

/* Return last operation flash status */ return FlashStatus; } /** * @} */

/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/ /*************eeprom.c*************/

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库stm32_flash_eeprom_断电保护_数值存储程序(4)在线全文阅读。

stm32_flash_eeprom_断电保护_数值存储程序(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/294358.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: