Изменение константы во время выполнения программы STM32

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Foxek
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Сб дек 28, 2013 20:31:22

Изменение константы во время выполнения программы STM32

Сообщение Foxek »

Добрый вечер, Хотел узнать как в STM32 в момент выполнения программы изменить константу объявленную в начале программы, я так понимаю во FLASH памяти можно что то изменить, но не могу понять что и как. Заранее спасибо
Реклама
Аватара пользователя
balmer
Это не хвост, это антенна
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Re: Изменение константы во время выполнения программы STM32

Сообщение balmer »

Можно, но минимум блоками по 256 байт. См stm32f30x_flash.h или аналогичный для другого семейства чипов.
Реклама
Foxek
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Сб дек 28, 2013 20:31:22

Re: Изменение константы во время выполнения программы STM32

Сообщение Foxek »

Спасибо, буду копать)
Аватара пользователя
Pavel_1978
Опытный кот
Сообщения: 830
Зарегистрирован: Пт ноя 16, 2007 11:21:37

Re: Изменение константы во время выполнения программы STM32

Сообщение Pavel_1978 »

Зависит от чипа и страница может быть от 256 до 2048 байт. Для изменения нужно разблокировать память стереть всю страницу и записать измененное значение. ну и константа должна естественно находится вне блока в котором прошивка лежит, как правило используют последние страницы флеша.
Реклама
Эиком - электронные компоненты и радиодетали
Galizin
Мучитель микросхем
Сообщения: 477
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: Изменение константы во время выполнения программы STM32

Сообщение Galizin »

Хотел бы уточнить высказывания пред ораторов.

Можно инициализировать константу единичными битами, а потом сверху в нее что либо записать, но только 1 раз. Нужно учитывать что размер записанных данных за один раз постоянен и равен 2 байта (для f100).
Реклама
Аватара пользователя
Pavel_1978
Опытный кот
Сообщения: 830
Зарегистрирован: Пт ноя 16, 2007 11:21:37

Re: Изменение константы во время выполнения программы STM32

Сообщение Pavel_1978 »

А можно по подробнее??
С кодом..
Реклама
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Re: Изменение константы во время выполнения программы STM32

Сообщение Myp3ik »

Не надо стирать страницу для записи в ячейку флеш, если эта ячейка чистая, то есть все биты в ней в единице. А вот очистить одну ячейку нельзя, только страницу сразу. Если у Вас в коде есть константа равная 0xFFFF, можете её один раз модифицировать во время выполнения программы.
Иван Сусанин - первый полупроводник :solder:
Galizin
Мучитель микросхем
Сообщения: 477
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: Изменение константы во время выполнения программы STM32

Сообщение Galizin »

Пожалуйста с кодом.
http://radiokot.ru/circuit/digital/measure/113/03.rar
Файл calibration.c строка 162. Определяется структура для записи калибровочных значений. Она инициализируется 0xffff из файла 1088ff.h. А далее в строке 301 происходит запись в эту структуру калибровочных значений.
Да поподробнее ....
Стирание - установка в 1 всех битов в странице. Запись во флеш означает установку в 0 (стирание) требуемых битов. Можно делать порцией по 2 байта. Если в каком либо месте памяти записаны 1, то в нем можно произвести стирание этих 1 путем записи во флеш.
Аватара пользователя
balmer
Это не хвост, это антенна
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Re: Изменение константы во время выполнения программы STM32

Сообщение balmer »

Myp3ik, Galizin

А вот мне вспоминается, что в STM32 после Erase Page все заполняется нулями (на STM32L девайсах как минимум).

PS: Похоже на STM32F1 стирается в FF, а на STM32L1 стирается в 00 значения.
Аватара пользователя
FantasyDD
Нашел транзистор. Понюхал.
Сообщения: 165
Зарегистрирован: Чт фев 19, 2015 17:26:19
Откуда: СССР

Re: Изменение константы во время выполнения программы STM32

Сообщение FantasyDD »

И я скажу свое мяу :)
Неплохо описал эту функцию друг этого сайта kalobyte на своем сайте http://easystm32.ru/for-beginners/38-flash-stm32
и немного подробнее на этом сайте http://chipspace.ru/stm32-flash-structure/ и http://chipspace.ru/stm32-flash-program-erase

Если взять драйвер HAL то там все просто:

This subsection provides a set of functions allowing to manage the FLASH program
operations.
The FLASH Memory Programming functions, includes the following functions:
HAL_FLASH_Unlock(void);
HAL_FLASH_Lock(void);
HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint32_t Data);
HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint32_t Data);

Any operation of erase or program should follow these steps:
1. Call the HAL_FLASH_Unlock() function to enable the flash control register and program memory access.
2. Call the desired function to erase page or program data.
3. Call the HAL_FLASH_Lock() to disable the flash program memory access
(recommended to protect the FLASH memory against possible unwanted operation).

Код: Выделить всё

HAL_StatusTypeDef status;
status = HAL_FLASH_Unlock();
status = HAL_FLASH_Program();
status = HAL_FLASH_Lock();
Взято с оригинальной документации от ST http://www.st.com/st-web-ui/static/acti ... 113898.pdf
Ответить

Вернуться в «ARM»