Test eeprom F103RB

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers eeprom_flash.cpp Source File

eeprom_flash.cpp

00001 #include "mbed.h"
00002 #include "eeprom_flash.h"
00003 Serial pc(USBTX, USBRX); //Initalise PC serial comms
00004 DigitalOut myled(LED1);
00005 /*
00006  * Must call this first to enable writing
00007  */
00008 void enableEEPROMWriting() {
00009     HAL_StatusTypeDef status = HAL_FLASH_Unlock();
00010     FLASH_PageErase(EEPROM_START_ADDRESS); // required to re-write
00011     CLEAR_BIT(FLASH->CR, FLASH_CR_PER);    // Bug fix: bit PER has been set in Flash_PageErase(), must clear it here
00012 }
00013 
00014 void disableEEPROMWriting() {
00015     HAL_FLASH_Lock();
00016 }
00017 
00018 /*
00019  * Writing function
00020  * Must call enableEEPROMWriting() first
00021  */
00022 HAL_StatusTypeDef writeEEPROMHalfWord(uint32_t address, uint16_t data) {
00023     HAL_StatusTypeDef status;
00024     address = address + EEPROM_START_ADDRESS;
00025     status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, address, data);
00026     return status;
00027 }
00028 
00029 /*
00030  * Reading functions
00031  */
00032 uint16_t readEEPROMHalfWord(uint32_t address) {
00033     uint16_t val = 0;
00034     address = address + EEPROM_START_ADDRESS;
00035     val = *(__IO uint16_t*)address;
00036      return val;
00037 }
00038 
00039 //Programme de test
00040 
00041 int main() {
00042 int adresse = 0x00;
00043 char donnee1 = 11;
00044 char donnee2 = 22;
00045 char donnee3 = 33;
00046 int lecture;
00047 pc.baud(9600);
00048 
00049 /* Ecriture*/
00050 enableEEPROMWriting(); //autorisation d'ecriture dans l'eeprom
00051 writeEEPROMHalfWord(adresse, donnee1);
00052 writeEEPROMHalfWord(adresse+2, donnee2);
00053 writeEEPROMHalfWord(adresse+4, donnee3);
00054 disableEEPROMWriting(); //Interdiction d'ecriture
00055 
00056  myled=!myled;
00057         wait(0.5);
00058         myled=!myled;
00059         wait(0.5);
00060 
00061 /*lecture et affichage*/
00062 lecture=readEEPROMHalfWord(adresse);
00063 if (lecture==11)
00064     {
00065         myled=!myled;
00066         wait(0.5);
00067         myled=!myled;
00068         wait(0.5);
00069         myled=!myled;
00070         wait(0.5);
00071     }
00072 pc.printf ("valeur lue: %d\n\r",lecture);
00073 lecture=readEEPROMHalfWord(adresse+2);
00074 pc.printf ("valeur lue: %d\n\r",lecture);
00075 lecture=readEEPROMHalfWord(adresse+4);
00076 pc.printf ("valeur lue: %d\n\r",lecture);
00077  while(1);
00078 }