加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

code-stm32读写FLASH

发布时间:2020-12-15 19:57:16 所属栏目:百科 来源:网络整理
导读:#define FLASH_TYPEERASE_PAGES( (uint32_t) 0x00) /*!Pages erase only*/#define FLASH_TYPEERASE_MASSERASE( (uint32_t) 0x02) /*!Flash mass erase activation*/#define FLASH_BANK_1( (uint32_t) 0) /*! Bank 1 */#define FLASH_TYPEPROGRAM_HALFWORD( (
#define FLASH_TYPEERASE_PAGES		( (uint32_t) 0x00)      /*!<Pages erase only*/
#define FLASH_TYPEERASE_MASSERASE	( (uint32_t) 0x02)      /*!<Flash mass erase activation*/
#define FLASH_BANK_1			( (uint32_t) 0)         /*!< Bank 1   */
#define FLASH_TYPEPROGRAM_HALFWORD	( (uint32_t) 0x01)      /*!<Program a half-word (16-bit) at a specified address.*/

u16 u8ConvertU16( u8 a,u8 b )
{
	u16 res = a << 8 | b;
	return(res);
}


void erasePage( u32 pageStartAddress,u32 pageNum )
{
	FLASH_EraseInitTypeDef	eraseInit;
	u32			error;
	eraseInit.TypeErase = FLASH_TYPEERASE_PAGES;
	/* eraseInit.Banks = FLASH_BANK_1; */
	eraseInit.NbPages	= pageNum;
	eraseInit.PageAddress	= pageStartAddress;
	if ( HAL_FLASHEx_Erase( &eraseInit,&error ) == HAL_OK )
	{
	}
}


u32 writeFlash( u8 *pSourceData,u32 targetAddress,u32 len )
{
	HAL_FLASH_Unlock();
	u32 writeData;
	for ( u32 i = 0; i < len; i = i + 2 )
	{
		if ( targetAddress % 1024 == 0 )
		{
			erasePage( targetAddress,1 );
		}
		writeData = u8ConvertU16( pSourceData[i + 1],pSourceData[i] );
		if ( HAL_FLASH_Program( FLASH_TYPEPROGRAM_HALFWORD,targetAddress,writeData ) != HAL_OK )
		{
		}
		targetAddress += 2;
	}
	HAL_FLASH_Lock();
	return(targetAddress);
}


u32 writeU16ToFlash( u16* pSourceData,1 );
		}
		writeData = (*pSourceData) & 0xffff;
		if ( HAL_FLASH_Program( FLASH_TYPEPROGRAM_HALFWORD,writeData ) != HAL_OK )
		{
		}
		targetAddress += 2;
	}
	HAL_FLASH_Lock();
	return(targetAddress);
}



示例:


#define USER_DATA_BASE 0x800A000 

void setLevelValue( u8 level,u8* u8Arr )
{
	u8	page[1024]	= { 0 };
	u8	i		= 0;

	/* 拷贝值 */
	for ( i = 0; i < 16; i++ )
	{
		page[i] = *(u32 *) (USER_DATA_BASE + i) & 0xff;
	}

	erasePage( USER_DATA_BASE,1 );

	writeFlash( page,USER_DATA_BASE,16 );

	__set_FAULTMASK( 1 );
	NVIC_SystemReset();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读