#include "stm32f10x.h"
#define FLASH_PAGE_SIZE ((u16)0x400)
#define FLASH_START_ADDR ((u32)0x08008000)
#define FLASH_END_ADDR ((u32)0x0800C000)
#define FLASH_NUMBER_OF_PAGE ((u32)(FLASH_END_ADDR - FLASH_START_ADDR) / FLASH_PAGE_SIZE)
#define FLASH_DATA_SIZE ((u32)(FLASH_END_ADDR - FLASH_START_ADDR) / 4)
/**
* Flash - cteni a zapis.
*
* Jakub Trmota (trmotjak)
*/
/**
* Zapis dat z bufferu do pameti flash.
* @param buffer buffer wordu
* @param bufferSize velikost bufferu
*/
void FlashWrite(uint32_t *buffer, uint32_t bufferSize)
{
FLASH_Status flashStatus = FLASH_COMPLETE;
uint32_t address = FLASH_START_ADDR;
uint32_t eraseCounter = 0;
uint32_t bufferIndex = 0;
/* Unlock the Flash Program Erase controller */
FLASH_Unlock();
/* Clear All pending flags */
FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
/* Erase the FLASH pages */
for(eraseCounter = 0; (eraseCounter < FLASH_NUMBER_OF_PAGE) && (flashStatus == FLASH_COMPLETE); eraseCounter++)
{
flashStatus = FLASH_ErasePage(FLASH_START_ADDR + (FLASH_PAGE_SIZE * eraseCounter));
}
/* FLASH Word program of data 0x15041979 at addresses defined by StartAddr and EndAddr */
while((bufferIndex < bufferSize) && (address < FLASH_END_ADDR) && (flashStatus == FLASH_COMPLETE))
{
flashStatus = FLASH_ProgramWord(address, *buffer);
address += 4;
buffer++;
bufferIndex++;
}
}
/**
* Cteni dat z pameti flash a ulozeni do bufferu.
* @param buffer buffer wordu
* @param bufferSize velikost bufferu
*/
void FlashRead(uint32_t *buffer, uint32_t bufferSize)
{
uint32_t address = FLASH_START_ADDR;
uint32_t bufferIndex = 0;
while((bufferIndex < bufferSize) && (address < FLASH_END_ADDR))
{
*buffer = (*(uint32_t*) address);
address += 4;
buffer++;
bufferIndex++;
}
}
Nahoru