⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flash_write.c

📁 STM32 ID加密
💻 C
字号:
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "flash_write.h"
/* Includes ------------------------------------------------------------------*/

char Flash_Write(char *flash_address,char *write_data,u16 write_len)
{
	char *flash_address_bk = flash_address;
	char *write_data_bk = write_data;
	u16 write_len_bk = write_len;
	u16 i;
	u32 page_shift;
	union
	{
		u32 b_word[PageSize/4];
		char b_byte[PageSize];

	}page_buffer; 
	FLASH_Status FLASHStatus = FLASH_COMPLETE;

	RCC_HSICmd(ENABLE);
	FLASH_Unlock();
	FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);	
	do
	{
		page_shift = (u32)flash_address%PageSize;
		for(i=0;i<PageSize/4;i++)
			page_buffer.b_word[i]=*((u32 *)(flash_address - page_shift) + i);
		for(i=0;i<PageSize-page_shift;i++)
		{
			if(!write_len)
				break;
			page_buffer.b_byte[page_shift + i]=*write_data++;
			write_len--;
		}	
		FLASHStatus = FLASH_ErasePage((u32)flash_address);
		while(FLASHStatus != FLASH_COMPLETE);
		for(i=0;i<PageSize/4;i++)
		{
			FLASHStatus = FLASH_ProgramWord((u32)((u32 *)(flash_address - page_shift) + i), page_buffer.b_word[i]);
			while(FLASHStatus != FLASH_COMPLETE);
		}
		flash_address += PageSize - page_shift;
	}while(write_len);
	RCC_HSICmd(DISABLE);
	FLASH_Lock();
	for(i=0;i<write_len_bk;i++)	
		if(*(flash_address_bk+i) != *(write_data_bk+i))
			return ERROR;
	return SUCCESS;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -