Size: a a a

2021 July 26

SK

Stas Koynov in Embedded Group
о вы ее уже использовали....
источник

S

Sergey in Embedded Group
При записи блокируется но после записи сразу вызывается функция таймера. Может процесс записи ещё продолжается и в это время вызывается таймер
источник

E

Evgen in Embedded Group
А у вас что флаги не стоят на проверку, что запись закончена?
источник

S

Sergey in Embedded Group
Нет не устанавливал
источник

E

Evgen in Embedded Group
а rm прочитать и  увидеть, что рекомендуют делать производители?
его же для вас писали, плюс есть еще статьи на хабре, где указано, как можно доработать
источник

S

Sergey in Embedded Group
Ok
источник

E

Evgen in Embedded Group
 
// Запись в FLASH-память 2 байт
void FLASH_Write(uint32_t Address, uint16_t Data)
{

 FLASH->CR |= FLASH_CR_PG; //Разрешаем программирование флеша
 while ((FLASH->SR&FLASH_SR_BSY)); //Ожидаем готовности флеша к записи
 *(__IO uint16_t*)Address = Data; //2 бата
 while (!(FLASH->SR & FLASH_SR_EOP));
     FLASH->SR = FLASH_SR_EOP;
 while ((FLASH->SR&FLASH_SR_BSY)); //Ожидаем окончания записи во флеш
 FLASH->CR &= ~(FLASH_CR_PG); //Запрещаем программирование флеша
}
// Запись в FLASH-память 2 байт
void FLASH_Write(uint32_t Address, uint16_t Data)
{

 FLASH->CR |= FLASH_CR_PG; //Разрешаем программирование флеша
 while ((FLASH->SR&FLASH_SR_BSY)); //Ожидаем готовности флеша к записи
 *(__IO uint16_t*)Address = Data; //2 бата
 while (!(FLASH->SR & FLASH_SR_EOP));
     FLASH->SR = FLASH_SR_EOP;
 while ((FLASH->SR&FLASH_SR_BSY)); //Ожидаем окончания записи во флеш
 FLASH->CR &= ~(FLASH_CR_PG); //Запрещаем программирование флеша
}

как пример, что должно быть внутри функции
источник

S

Sergey in Embedded Group
Спасибо
источник

E

Evgen in Embedded Group
я в каких-то функциях хала находил, что не было проверки на BSY бит
источник

NS

Nikita Shestakov in Embedded Group
функцию записи халовскую используете или свою?
источник

S

Sergey in Embedded Group
Халовскую и похоже в ней нет проверки флагов окончания записи
источник

E

Evgen in Embedded Group
вставьте bsy и eop
да проверьте
пример у вас выше
источник

NS

Nikita Shestakov in Embedded Group
если вы про HAL_FLASH_Program() - то все там есть. Другое дело, что я читал, что __HAL_LOCK бывает плохо работает. Не пробовали запрещать прерывания до записи и разрешить после?
источник

S

Sergey in Embedded Group
Используется HAL_FLASH_PROGRAM_IT Попробую спасибо
источник

KI

Karasev Ivan in Embedded Group
При работе с EEPROM на стмках обрати внимание на времена. В той с которой я работал время записи 1го байта было 3.2мс, что очень много на самом деле. При этом в халовских функциях выключаются все прерывания на время записи. Обычно из-за этого и валится все
источник

E

Evgen in Embedded Group
это не хал
а сам мк устроен, что блокирует все при работе с флешой)
источник

LZ

Leonid Zaliubovskii in Embedded Group
Не спойлери, может все же прочитает RM 😁
источник

KI

Karasev Ivan in Embedded Group
Разницы особой нет
Я лишь обращал внимания на то что прерывания отключаются и надолго при записи в eeprom
источник

E

Evgen in Embedded Group
Ты снова включил злого дядю)
источник

LZ

Leonid Zaliubovskii in Embedded Group
Не без этого, у человека должна быть какая-то самостоятельность, желание узнать новое. В доку заглянуть позыв, что ли. А не только позыв поесть или искать того, кто за него сделает что-то.

Моё имхо, к которому никого не принуждаю 😁
источник