Internal Flash Read Write and Erase for STM32F767ZI Storing and Reading Configuration Info STM32

Committer:
shivanandgowdakr
Date:
Mon Aug 19 05:44:35 2019 +0000
Revision:
0:7c7d15e2f39e
Internal Flash Memory Read Write STM32F767ZI.; Storing Data in Internal Flash

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shivanandgowdakr 0:7c7d15e2f39e 1 /* mbed Microcontroller Library
shivanandgowdakr 0:7c7d15e2f39e 2 * Copyright (c) 2018 ARM Limited
shivanandgowdakr 0:7c7d15e2f39e 3 * SPDX-License-Identifier: Apache-2.0
shivanandgowdakr 0:7c7d15e2f39e 4 */
shivanandgowdakr 0:7c7d15e2f39e 5
shivanandgowdakr 0:7c7d15e2f39e 6 #include "mbed.h"
shivanandgowdakr 0:7c7d15e2f39e 7 #include "stats_report.h"
shivanandgowdakr 0:7c7d15e2f39e 8
shivanandgowdakr 0:7c7d15e2f39e 9 DigitalOut led1(LED1);
shivanandgowdakr 0:7c7d15e2f39e 10
shivanandgowdakr 0:7c7d15e2f39e 11
shivanandgowdakr 0:7c7d15e2f39e 12
shivanandgowdakr 0:7c7d15e2f39e 13 #define FLASH_USER_START_ADDR 0x080C0000
shivanandgowdakr 0:7c7d15e2f39e 14 #define FLASH_USER_END_ADDR 0x080FFFFF
shivanandgowdakr 0:7c7d15e2f39e 15 #define DATA_32 ((uint32_t)0x12345678)
shivanandgowdakr 0:7c7d15e2f39e 16
shivanandgowdakr 0:7c7d15e2f39e 17 uint32_t Address = 0, SectorError = 0;
shivanandgowdakr 0:7c7d15e2f39e 18 __IO uint32_t data32 = 0 , MemoryProgramStatus = 0;
shivanandgowdakr 0:7c7d15e2f39e 19
shivanandgowdakr 0:7c7d15e2f39e 20 int main()
shivanandgowdakr 0:7c7d15e2f39e 21 {
shivanandgowdakr 0:7c7d15e2f39e 22
shivanandgowdakr 0:7c7d15e2f39e 23 static FLASH_EraseInitTypeDef EraseInitStruct;
shivanandgowdakr 0:7c7d15e2f39e 24 HAL_FLASH_Unlock();
shivanandgowdakr 0:7c7d15e2f39e 25
shivanandgowdakr 0:7c7d15e2f39e 26 /* Erase the user Flash area
shivanandgowdakr 0:7c7d15e2f39e 27 (area defined by FLASH_USER_START_ADDR and FLASH_USER_END_ADDR) ***********/
shivanandgowdakr 0:7c7d15e2f39e 28
shivanandgowdakr 0:7c7d15e2f39e 29 /* Fill EraseInit structure*/
shivanandgowdakr 0:7c7d15e2f39e 30 EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS;
shivanandgowdakr 0:7c7d15e2f39e 31 EraseInitStruct.Banks = FLASH_BANK_1;
shivanandgowdakr 0:7c7d15e2f39e 32 EraseInitStruct.Sector = FLASH_SECTOR_7;
shivanandgowdakr 0:7c7d15e2f39e 33 EraseInitStruct.NbSectors = 1;
shivanandgowdakr 0:7c7d15e2f39e 34 EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3;
shivanandgowdakr 0:7c7d15e2f39e 35
shivanandgowdakr 0:7c7d15e2f39e 36 if(HAL_FLASHEx_Erase(&EraseInitStruct, &SectorError) != HAL_OK)
shivanandgowdakr 0:7c7d15e2f39e 37 {
shivanandgowdakr 0:7c7d15e2f39e 38 /*
shivanandgowdakr 0:7c7d15e2f39e 39 Error occurred while page erase.
shivanandgowdakr 0:7c7d15e2f39e 40 User can add here some code to deal with this error.
shivanandgowdakr 0:7c7d15e2f39e 41 PAGEError will contain the faulty page and then to know the code error on this page,
shivanandgowdakr 0:7c7d15e2f39e 42 user can call function 'HAL_FLASH_GetError()'
shivanandgowdakr 0:7c7d15e2f39e 43 */
shivanandgowdakr 0:7c7d15e2f39e 44 /* Infinite loop */
shivanandgowdakr 0:7c7d15e2f39e 45 while (1)
shivanandgowdakr 0:7c7d15e2f39e 46 {
shivanandgowdakr 0:7c7d15e2f39e 47 /* Make LED2 blink (100ms on, 2s off) to indicate error in Erase operation */
shivanandgowdakr 0:7c7d15e2f39e 48 }
shivanandgowdakr 0:7c7d15e2f39e 49 }
shivanandgowdakr 0:7c7d15e2f39e 50
shivanandgowdakr 0:7c7d15e2f39e 51 /* Program the user Flash area word by word
shivanandgowdakr 0:7c7d15e2f39e 52 (area defined by FLASH_USER_START_ADDR = 0x080C 0000 and FLASH_USER_END_ADDR) ***********/
shivanandgowdakr 0:7c7d15e2f39e 53
shivanandgowdakr 0:7c7d15e2f39e 54
shivanandgowdakr 0:7c7d15e2f39e 55 Address = FLASH_USER_START_ADDR;
shivanandgowdakr 0:7c7d15e2f39e 56
shivanandgowdakr 0:7c7d15e2f39e 57 while (Address < FLASH_USER_END_ADDR)
shivanandgowdakr 0:7c7d15e2f39e 58 {
shivanandgowdakr 0:7c7d15e2f39e 59 if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, DATA_32) == HAL_OK)
shivanandgowdakr 0:7c7d15e2f39e 60 {
shivanandgowdakr 0:7c7d15e2f39e 61 Address = Address + 4;
shivanandgowdakr 0:7c7d15e2f39e 62 }
shivanandgowdakr 0:7c7d15e2f39e 63 else
shivanandgowdakr 0:7c7d15e2f39e 64 {
shivanandgowdakr 0:7c7d15e2f39e 65 /* Error occurred while writing data in Flash memory.
shivanandgowdakr 0:7c7d15e2f39e 66 User can add here some code to deal with this error */
shivanandgowdakr 0:7c7d15e2f39e 67 while (1)
shivanandgowdakr 0:7c7d15e2f39e 68 {
shivanandgowdakr 0:7c7d15e2f39e 69
shivanandgowdakr 0:7c7d15e2f39e 70 }
shivanandgowdakr 0:7c7d15e2f39e 71 }
shivanandgowdakr 0:7c7d15e2f39e 72 }
shivanandgowdakr 0:7c7d15e2f39e 73
shivanandgowdakr 0:7c7d15e2f39e 74 /* Lock the Flash to disable the flash control register access (recommended
shivanandgowdakr 0:7c7d15e2f39e 75 to protect the FLASH memory against possible unwanted operation) *********/
shivanandgowdakr 0:7c7d15e2f39e 76 HAL_FLASH_Lock();
shivanandgowdakr 0:7c7d15e2f39e 77
shivanandgowdakr 0:7c7d15e2f39e 78 /* Check if the programmed data is OK
shivanandgowdakr 0:7c7d15e2f39e 79 MemoryProgramStatus = 0: data programmed correctly
shivanandgowdakr 0:7c7d15e2f39e 80 MemoryProgramStatus != 0: number of words not programmed correctly ******/
shivanandgowdakr 0:7c7d15e2f39e 81 Address = FLASH_USER_START_ADDR;
shivanandgowdakr 0:7c7d15e2f39e 82 MemoryProgramStatus = 0x0;
shivanandgowdakr 0:7c7d15e2f39e 83
shivanandgowdakr 0:7c7d15e2f39e 84 while (Address < FLASH_USER_END_ADDR)
shivanandgowdakr 0:7c7d15e2f39e 85 {
shivanandgowdakr 0:7c7d15e2f39e 86 data32 = *(__IO uint32_t *)Address;
shivanandgowdakr 0:7c7d15e2f39e 87
shivanandgowdakr 0:7c7d15e2f39e 88 if (data32 != DATA_32)
shivanandgowdakr 0:7c7d15e2f39e 89 {
shivanandgowdakr 0:7c7d15e2f39e 90 MemoryProgramStatus++;
shivanandgowdakr 0:7c7d15e2f39e 91 }
shivanandgowdakr 0:7c7d15e2f39e 92 Address = Address + 4;
shivanandgowdakr 0:7c7d15e2f39e 93 }
shivanandgowdakr 0:7c7d15e2f39e 94
shivanandgowdakr 0:7c7d15e2f39e 95 /*Check if there is an issue to program data*/
shivanandgowdakr 0:7c7d15e2f39e 96 if (MemoryProgramStatus == 0)
shivanandgowdakr 0:7c7d15e2f39e 97 {
shivanandgowdakr 0:7c7d15e2f39e 98
shivanandgowdakr 0:7c7d15e2f39e 99 }
shivanandgowdakr 0:7c7d15e2f39e 100 else
shivanandgowdakr 0:7c7d15e2f39e 101 {
shivanandgowdakr 0:7c7d15e2f39e 102 /* Error detected. LED2 will blink with 1s period */
shivanandgowdakr 0:7c7d15e2f39e 103 while (1)
shivanandgowdakr 0:7c7d15e2f39e 104 {
shivanandgowdakr 0:7c7d15e2f39e 105
shivanandgowdakr 0:7c7d15e2f39e 106 }
shivanandgowdakr 0:7c7d15e2f39e 107 }
shivanandgowdakr 0:7c7d15e2f39e 108
shivanandgowdakr 0:7c7d15e2f39e 109
shivanandgowdakr 0:7c7d15e2f39e 110 HAL_FLASH_Unlock();
shivanandgowdakr 0:7c7d15e2f39e 111
shivanandgowdakr 0:7c7d15e2f39e 112
shivanandgowdakr 0:7c7d15e2f39e 113 }