Browse Source

Работа с EEPROM в STM8/IAR

Vladimir Shilov 6 years ago
parent
commit
1ec90dd364
1 changed files with 49 additions and 0 deletions
  1. 49 0
      stm8/eeprom.c

+ 49 - 0
stm8/eeprom.c

@@ -0,0 +1,49 @@
+/*
+ * By oleg110592
+ * https://radiokot.ru/forum/viewtopic.php?p=2691126&sid=342073b18646c21ba245ff0ada5111b3#p2691126
+ */
+
+/* eeprom в stm8 можно организовать просто */
+
+typedef struct Par_t {
+    uint16_t temperature;
+    uint16_t time;
+    uint8_t gain;    
+} Par_t;
+
+#pragma location=0x4000
+__no_init Par_t Par;
+#pragma required=Par
+
+ /* чтение очень просто, занимает намного меньше чем в АВР
+    - просто пересылка из области eeprom в память,
+    все находится в едином адресном пространстве: */
+
+uint16_t temperature, time;
+
+temperature = Par.temperature;
+time = Par.time;
+
+/*
+в листинге всего то две команды:
+Код:
+LDW X, L:0x4000
+LDW L:temperature, X
+...
+LDW X, L:0x4002
+LDW L:time, X
+*/
+
+/* запись тоже несложно: */
+
+mcu_eeprom_unlock();
+Par.temperature = 560;
+Par.time = time;
+FLASH->IAPSR &= ~FLASH_IAPSR_DUL; //EEPROM lock
+
+void mcu_eeprom_unlock(void) //Разблокировать EEPROM
+{
+    FLASH->DUKR = ((unsigned char)0xAE);
+    FLASH->DUKR = ((unsigned char)0x56);
+    while (!(FLASH->IAPSR & FLASH_IAPSR_DUL));
+}