12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- /*
- * 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));
- }
|