Patrice HAESAERT
/
eeprom_flash_4
Test eeprom F103RB
Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Tue Jul 12 2022 21:34:20 by 1.7.2