Вс июл 02, 2017 00:53:10
FLASH_EraseInitTypeDef EraseInit;
uint32_t PageError=0;
EraseInit.TypeErase=FLASH_TYPEERASE_PAGES;
//EraseInit.Banks=FLASH_BANK_1;
EraseInit.NbPages=1;
EraseInit.PageAddress=0x08002000;
HAL_FLASH_Unlock();
FLASH_WaitForLastOperation(500);
HAL_FLASHEx_Erase(&EraseInit,&PageError);
FLASH_WaitForLastOperation(500);
Вс июл 02, 2017 06:24:26
Вс июл 02, 2017 12:02:28
Вс июл 02, 2017 16:12:08
Вс июл 02, 2017 17:18:16
Вс июл 02, 2017 19:35:35
Наверное затираете какие-то данные.KT315B писал(а):Почему-то виснет при попытках стирать страницы с номером, ближе к использованным.
Так я не пробовал, после записи сразу же лочу запись во флеш.KT315B писал(а):Еще обнаружил один момент, если страницу стереть, потом записать данные, потом еще раз попытаться записать данные - все намертво виснет.
Ну лично я, как раз так и сделал.KT315B писал(а):Лучше всего - затолкать данные для сохранения в структуру, и потом эту структуру записывать через указатель одной операцией записи.
Я объявил переменную в области флеш и делал вот так просто.KT315B писал(а):Теперь буду думать над чтением
#define VAR_FL __attribute__((section(".var_area"))) //область для хранения во флеш переменных
...
extern volatile DEVICE_t DEVICE;
volatile DEVICE_t DEVICE_FLASH VAR_FL;
...
DEVICE=DEVICE_FLASH; //считываем из флеша
Пн июл 03, 2017 08:12:39
Наверное затираете какие-то данные.
Я объявил переменную в области флеш и делал вот так просто.
Пн июл 03, 2017 17:38:28
Вт июл 04, 2017 08:37:15
Ср июл 05, 2017 18:36:10
Чт июл 06, 2017 01:20:44
void *ReadFlash(unsigned int FlashAddr)
{
return (void *)FlashAddr;
}
memcpy((void *)&FlashData,ReadFlash(FLASH_BASE+20*1024), sizeof(FlashData));
Вт июл 25, 2017 08:55:26
HAL_FLASH_Unlock(); // Разблокируем флеш память
FLASH_WaitForLastOperation(500); // Ожидаем окончания операции
FLASH_PageErase(0x0800F7C2); // Очищаем страницу 63 флеш памяти
FLASH_WaitForLastOperation(500); // Ожидаем окончания операции
HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, 0x0800F7C2, isTimeWorkL ); // Записываем значение переменной isTimeWorkL на 63 странице флеш памяти
FLASH_WaitForLastOperation(500); // Ожидаем окончания операции
HAL_FLASH_Lock(); // Блокируем флеш память
FLASH_WaitForLastOperation(500); // Ожидаем окончания операции
Вт июл 25, 2017 08:58:35
Вт июл 25, 2017 10:05:43
У меня вообще черех HAL не хотело писАться, в итоге пришлось добавить самопальные функции. Код, который прислал Z_h_e - рабочий, им можно пользоваться. Ну а данные лучше в структуру затолкать...
Вт июл 25, 2017 10:47:54
Вт июл 25, 2017 17:48:49
Я тоже хочу так )
FLASH_EraseInitTypeDef EraseInitStruct;
uint32_t PAGEError = 0;
EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
EraseInitStruct.PageAddress = 0x0800F800;
EraseInitStruct.NbPages = 1;
HAL_FLASH_Unlock(); // Разблокируем флеш память
HAL_FLASHEx_Erase(&EraseInitStruct,&PAGEError);
HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, 0x0800F800, sTimeWorkL ); // Записываем значение переменной isTimeWorkL на 63 странице флеш памяти
HAL_FLASH_Lock(); // Блокируем флеш память
Ср июл 26, 2017 08:07:35
Ср ноя 08, 2017 14:17:35
Ср ноя 08, 2017 15:38:35
Нет, Вы передаете число которое соответствует символу А кодовой таблицы.Koret писал(а):Я передаю символ A,
Ср ноя 08, 2017 16:00:01
Нет, Вы передаете число которое соответствует символу А кодовой таблицы.Koret писал(а):Я передаю символ A,