Chrono

Dependencies:   mbed SDFileSystem

eeprom_flash.cpp

Committer:
pathae
Date:
2019-02-04
Revision:
2:68c9ff91504c
Parent:
0:ea2bec485611
Child:
3:46c0511e25af

File content as of revision 2:68c9ff91504c:

#include "mbed.h"
#include "eeprom_flash.h"
Serial pc(USBTX, USBRX); //Initalise PC serial comms
DigitalOut myled(LED1);
/*
 * Must call this first to enable writing
 */
void enableEEPROMWriting() {
    HAL_StatusTypeDef status = HAL_FLASH_Unlock();
    FLASH_PageErase(EEPROM_START_ADDRESS); // required to re-write
    CLEAR_BIT(FLASH->CR, FLASH_CR_PER);    // Bug fix: bit PER has been set in Flash_PageErase(), must clear it here
}

void disableEEPROMWriting() {
    HAL_FLASH_Lock();
}

/*
 * Writing functions
 * Must call enableEEPROMWriting() first
 */
HAL_StatusTypeDef writeEEPROMHalfWord(uint32_t address, uint16_t data) {
    HAL_StatusTypeDef status;
    address = address + EEPROM_START_ADDRESS;
    status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, address, data);
    return status;
}

/*
 * Reading functions
 */
uint16_t readEEPROMHalfWord(uint32_t address) {
    uint16_t val = 0;
    address = address + EEPROM_START_ADDRESS;
    val = *(__IO uint16_t*)address;
     return val;
}

//Programme de test

int main() {
int adresse = 0x00;
char donnee1 = 11;
char donnee2 = 22;
char donnee3 = 33;
int lecture;
pc.baud(9600);

/* Ecriture*/
enableEEPROMWriting(); //autorisation d'ecriture dans l'eeprom
writeEEPROMHalfWord(adresse, donnee1);
writeEEPROMHalfWord(adresse+2, donnee2);
writeEEPROMHalfWord(adresse+4, donnee3);
disableEEPROMWriting(); //Interdiction d'ecriture

 myled=!myled;
        wait(0.5);
        myled=!myled;
        wait(0.5);

/*lecture et affichage*/
lecture=readEEPROMHalfWord(adresse);
if (lecture==11)
    {
        myled=!myled;
        wait(0.5);
        myled=!myled;
        wait(0.5);
        myled=!myled;
        wait(0.5);
    }
pc.printf ("valeur lue: %d\n\r",lecture);

lecture=readEEPROMHalfWord(adresse+2);
pc.printf ("valeur lue: %d\n\r",lecture);
lecture=readEEPROMHalfWord(adresse+4);
pc.printf ("valeur lue: %d\n\r",lecture);
 while(1);
}