EEPROM stm32
- Войдите на сайт для отправки комментариев
Пнд, 16/03/2020 - 14:25
Добрый день, подскажите. почему не работает сохранение в EEPROM на nucleo401:
#include <EEPROM.h> int addr = 0; int val=0; int val2; void setup() { Serial.begin(115200); EEPROM.get(addr,val); pinMode(PA5, OUTPUT); } void loop() { digitalToggle(PA5); val++; EEPROM.put(addr, val); val2 = EEPROM.get(addr,val); Serial.println(String(val)+"---2o---"+String(val2)); delay(100); }
1. Вроде чтение проходит - в терминале начинает считать с 255
2. Пробовал через read-write - тоже не работает.
3. После заливки программы - терминал зависает. Приходится питание выкл-вкл- пропадает COM , затем еще раз выкл-вкл питание - COM появляется.
1. Вроде чтение проходит - в терминале начинает считать с 255
если начинает работать не с нуля - в чем проблема? - значит работает
Но вообще, идея писать в ЕЕПРОМ в loop() - абсолютно бредовая, вы так в ЕЕПРОМ дырку протрете за несколько запусков.
это нормально
А там не надо commit делать при записи, случаем?
А там не надо commit делать при записи, случаем?
если это ардуиновская либа ЕЕПРОМ, то вроде нет. Во всяком случае у Кларка точно нет.
добавка - вспомнил особенность - в стм32 в ЕЕПРОМ нет шаблонов для записи сложных типов, либа умеет читать и писать только байты, все остальное надо писать самому
если начинает работать не с нуля - в чем проблема? - значит работает
Во флеш памяти по умолчанию FF - так что получается - туда ничего не пишется
Но вообще, идея писать в ЕЕПРОМ в loop() - абсолютно бредовая, вы так в ЕЕПРОМ дырку протрете за несколько запусков.
с паузой 100мс не успеет ?! и запись растягивается до 1секунды.
1. Сбрасывается через раз в FF - видимо нельзя питание отключать при записи?!
2. Вроде должны любой тип читать и записывать?
3. Как несколько байт преобразовать в long ?
4. Изменяю программу - заливаю - в мониторе опять тоже самое отображается!
2. Вроде должны любой тип читать и записывать?
откройте библиотеку и посмотрите сами
много раз обсуждали
Да Вы чё? У stm нет EEPROM. Там память обычная флэш и в неё можно писать много во все место что не занято программой, а стирать можно только большими страницами. Библиотеки от ардуины никак не подойдут.
Да Вы чё? У stm нет EEPROM. Там память обычная флэш и в неё можно писать много во все место что не занято программой, а стирать можно только большими страницами. Библиотеки от ардуины никак не подойдут.
вы не правы. Аддон Ардуино для СТМ содержит библиотеку EEPROM c синтаксисом, полностью аналогичном либе ЕЕПРОМ для АВР.
Хотя внутри оно, конечно, пишет во флеш
Не поленился, залез в https://github.com/stm32duino/Arduino_Core_STM32/tree/master/libraries/EEPROM/examples
Не поленился, залез в https://github.com/stm32duino/Arduino_Core_STM32/tree/master/libraries/EEPROM/examples
А вы какими функциями/библиотеками сохраняете/читаете переменные во Flash?
вот тут смотрите
https://github.com/rogerclarkmelbourne/Arduino_STM32/tree/master/STM32F1/libraries/EEPROM
Ну вот. Отлично. Всё есть. Вот только повторная запись очень не понятно как пару чисел переписать без затирания остального .
Ну вот. Отлично. Всё есть. Вот только повторная запись очень не понятно как пару чисел переписать без затирания остального .
насколько я помню, они там повторно в ту же ячейку не пишут, пишут каждый раз в новую - и адрес, что использует юзер при обращении к ЕЕПРОМ - фиктивный.
А когда страница кончилась - один раз стирают всю страницу и начинают заново
да, а ноги всего этого растут из LeafLab проекта:
https://stm32duinoforum.com/forum/viewtopic_f_9_t_4383.html
Подскажите, что сделать можно :
Изменяю программу - заливаю в контроллер. В контроллере почему то осталась прежняя программа.
Изменяю программу - заливаю в контроллер. В контроллере почему то осталась прежняя программа.
смотрите внимательно на сообщения в окне компиляции и загрузки. При работе через DFU не всегда реально доходит до загрузки кода, при этом Ардуино ИДЕ ошибок не пишет.
Обязательно в ходе загрузки должна пробежать строчка из диезов:
"############################################", если такой строчки нет - значит и реальной загрузки не было