STM32CubeMX開發之路—8Flash讀寫

STM32CubeMX開發之路—8Flash讀寫


運行環境

  • Windows10
  • STM32CubeMX___Version 5.0.0
  • Keil5(MDK5)___Version 5.15

簡介

本例程主要講解如何對芯片內的Flash進行讀寫,用芯片內部Flash可以對一些需要斷電保存的數據進行保存,無需加外部得存儲芯片,本例程採用的是STM32F103ZET6,512K大小的Flash。


STM32CubeMx基本配置

基礎配置過程請參考 STM32CubeMx(Keil5)開發之路—配置第一個項目
printf重定向例程請參考 STM32CubeMx(Keil5)開發之路——3發送USART數據和printf重定向


代碼修改


1——選擇main.c文件
2——添加全局變量在全局變量區
3——在USER CODE中添加如下代碼,Flash寫入函數和Flash讀出函數
講解:本例程是512K大小的Flash,使用的是最後一個扇區的第一頁(每個扇區有四頁)
如果使用Flash大小爲256K的芯片addr請設爲0x0803E000
如果使用Flash大小爲128K的芯片addr請設爲0x0801F000
如果使用Flash大小爲64K的芯片addr請設爲0x08007000

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

uint32_t WriteFlashData = 0x12345678;
uint32_t addr = 0x0807E000;

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

接着在USER CODE BEGIN WHILE中接着添加如下代碼,進行讀寫測試測試

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  
  /*Flash TEST*/
  WriteFlashData = 0x12345678;
  writeFlashTest();
  printFlashTest();
  WriteFlashData = 0x87654321;
  writeFlashTest();
  printFlashTest();
  
  while (1)
  {
	  
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  
  }
  /* USER CODE END 3 */
}

燒錄代碼後打開出口調試助手,正確的話會看到如下輸出


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章