flash writing code for 446re

Dependencies:   mbed

Committer:
bwang
Date:
Tue Feb 28 22:31:12 2017 +0000
Revision:
3:16b0692f3ed3
Parent:
2:11238235cb62
forgot an include

Who changed what in which revision?

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