CubeMX flash读写调试记录

CubeMX stm32 flash读写调试记录

本文用于对调试flash的记录。
调试环境:KEIL5, CubeMX
调试使用STM32F103RBT6,128Kflash 。

1——选择main.c文件
2——添加全局变量在全局变量区
3——在USER CODE中添加如下代码,Flash写入函数和Flash读出函数
讲解:本例程是128K大小的Flash,使用的是最后一个扇区的第一页(每个扇区有四页)
如果使用Flash大小为256K的芯片addr请设为0x0803E000
如果使用Flash大小为128K的芯片addr请设为0x0801F000
如果使用Flash大小为64K的芯片addr请设为0x08007000
————————————————

在main()最下面添加代码

代码

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
int fputc(int ch, FILE *f)
{
    HAL_UART_Transmit(&huart1, (uint8_t *)&ch,1, 0xFFFF);
    return ch;
}

/*FLASH写入程序*/
void writeFlashTest(void)
{
	/* 1/4解锁FLASH*/
	HAL_FLASH_Unlock();

	/* 2/4擦除FLASH*/
	/*初始化FLASH_EraseInitTypeDef*/
	/*擦除方式页擦除FLASH_TYPEERASE_PAGES,块擦除FLASH_TYPEERASE_MASSERASE*/
	/*擦除页数*/
	/*擦除地址*/
	FLASH_EraseInitTypeDef FlashSet;
	FlashSet.TypeErase = FLASH_TYPEERASE_PAGES;
	FlashSet.PageAddress = addr;
	FlashSet.NbPages = 1;
	
	/*设置PageError,调用擦除函数*/
	uint32_t PageError = 0;
	HAL_FLASHEx_Erase(&FlashSet, &PageError);

	/* 3/4对FLASH烧写*/
	HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addr, WriteFlashData);

	/* 4/4锁住FLASH*/
	HAL_FLASH_Lock();
}

/*FLASH读取打印程序*/
void printFlashTest(void)
{
	uint32_t temp = *(__IO uint32_t*)(addr);

	printf("addr is:0x%x, data is:0x%x\r\n", addr, temp);
}
/* USER CODE END 0 */

在主文件main()中,添加

/* USER CODE BEGIN PV */
uint32_t WriteFlashData = 0x12345678;
uint32_t addr = 0x0801F000;

void writeFlashTest(void);
void printFlashTest(void);

/* USER CODE END PV */

在while()前添加代码

	WriteFlashData = 0x11223344;
	writeFlashTest();
	printFlashTest();
	HAL_Delay(100);

	WriteFlashData = 0x87654321;
	writeFlashTest();
	printFlashTest();
	
  /* USER CODE END 2 */

如果屏蔽第二段代码;
串口输出
CubeMX flash读写调试记录_第1张图片
如果没有开启串口(启用串口可参见其他博主文章),那么可以仿真查看,我这里用的是J-LINK。
CubeMX flash读写调试记录_第2张图片

屏蔽第一段,结果如下
CubeMX flash读写调试记录_第3张图片
CubeMX flash读写调试记录_第4张图片
结果表明写入有效。
注意写之前要解锁unlock。如果只是读,那么不用解锁。如此,测试完毕。
附录:
stm32f1XX按照不同容量,存储器组织成32个1K字节/页(小容量)、 128个1K字节/页(中容量)、 256个2K字节/页(大容量)的主存储器块和一个信息块。
CubeMX flash读写调试记录_第5张图片
CubeMX flash读写调试记录_第6张图片
CubeMX flash读写调试记录_第7张图片

你可能感兴趣的:(CubeMX flash读写调试记录)