1

Dependencies:   mbed

Committer:
shaorui
Date:
Mon Jan 25 08:36:48 2021 +0000
Revision:
0:571a1835428e
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shaorui 0:571a1835428e 1 #include "stm32f4xx_flash.h"
shaorui 0:571a1835428e 2 #include "FlashWriter.h"
shaorui 0:571a1835428e 3
shaorui 0:571a1835428e 4 FlashWriter::FlashWriter(int sector) {
shaorui 0:571a1835428e 5 if (sector > 7) sector = 7;
shaorui 0:571a1835428e 6 __sector = sector;
shaorui 0:571a1835428e 7 __base = __SECTOR_ADDRS[sector];
shaorui 0:571a1835428e 8 __ready = false;
shaorui 0:571a1835428e 9 }
shaorui 0:571a1835428e 10
shaorui 0:571a1835428e 11 bool FlashWriter::ready() {
shaorui 0:571a1835428e 12 return __ready;
shaorui 0:571a1835428e 13 }
shaorui 0:571a1835428e 14
shaorui 0:571a1835428e 15 void FlashWriter::open() {
shaorui 0:571a1835428e 16 FLASH_Unlock();//Unlocks the FLASH control register access
shaorui 0:571a1835428e 17 FLASH_ClearFlag( FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR);
shaorui 0:571a1835428e 18 FLASH_EraseSector(__SECTORS[__sector], VoltageRange_3);
shaorui 0:571a1835428e 19 __ready = true;
shaorui 0:571a1835428e 20 }
shaorui 0:571a1835428e 21
shaorui 0:571a1835428e 22 void FlashWriter::write(uint32_t index, int x) {
shaorui 0:571a1835428e 23 union {int a; uint32_t b;};
shaorui 0:571a1835428e 24 a = x;
shaorui 0:571a1835428e 25 FLASH_ProgramWord(__base + 4 * index, b);
shaorui 0:571a1835428e 26 }
shaorui 0:571a1835428e 27
shaorui 0:571a1835428e 28 void FlashWriter::write(uint32_t index, unsigned int x) {
shaorui 0:571a1835428e 29 FLASH_ProgramWord(__base + 4 * index, x);
shaorui 0:571a1835428e 30 }
shaorui 0:571a1835428e 31
shaorui 0:571a1835428e 32 void FlashWriter::write(uint32_t index, float x) {
shaorui 0:571a1835428e 33 union {float a; uint32_t b;};
shaorui 0:571a1835428e 34 a = x;
shaorui 0:571a1835428e 35 FLASH_ProgramWord(__base + 4 * index, b);
shaorui 0:571a1835428e 36 }
shaorui 0:571a1835428e 37
shaorui 0:571a1835428e 38 void FlashWriter::close() {
shaorui 0:571a1835428e 39 FLASH_Lock();
shaorui 0:571a1835428e 40 __ready = false;
shaorui 0:571a1835428e 41 }
shaorui 0:571a1835428e 42
shaorui 0:571a1835428e 43 int flashReadInt(uint32_t sector, uint32_t index) {
shaorui 0:571a1835428e 44 return *(int*) (__SECTOR_ADDRS[sector] + 4 * index);
shaorui 0:571a1835428e 45 }
shaorui 0:571a1835428e 46
shaorui 0:571a1835428e 47 uint32_t flashReadUint(uint32_t sector, uint32_t index) {
shaorui 0:571a1835428e 48 return *(uint32_t*) (__SECTOR_ADDRS[sector] + 4 * index);
shaorui 0:571a1835428e 49 }
shaorui 0:571a1835428e 50
shaorui 0:571a1835428e 51 float flashReadFloat(uint32_t sector, uint32_t index) {
shaorui 0:571a1835428e 52 return *(float*) (__SECTOR_ADDRS[sector] + 4 * index);
shaorui 0:571a1835428e 53 }