Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: stm32f103 HAL: зранение данных во внутреннем флеше

Ср ноя 08, 2017 16:01:29

Где Вы хотите ее отобразить?

Re: stm32f103 HAL: зранение данных во внутреннем флеше

Ср ноя 08, 2017 17:48:32

Где Вы хотите ее отобразить?
На дисплее WH1602.

Re: stm32f103 HAL: зранение данных во внутреннем флеше

Пн ноя 13, 2017 18:05:37

1) кол-во циклов стирания ограничено (то ли 100, то ли 300, то ли 1000 - во всяком случае меньше чем в еепромках и намного)
2) запись идет не байтами, а словами по 16 бит.

если надо много писать во флэш - советую посмотреть на stm'овский аппноут по реализации eeprom'а (да, надо откусить под это 2 страницы флэша, но оно того стоит думаю).

Re: stm32f103 HAL: зранение данных во внутреннем флеше

Ср ноя 15, 2017 08:18:53

если надо много писать во флэш - советую посмотреть на stm'овский аппноут по реализации eeprom'а (да, надо откусить под это 2 страницы флэша, но оно того стоит думаю).
Подскажите, а в чём преимущества эмулятора перед прямой записью в память через HAL? Эмулятор вроде использует тот же HAL_FLASH.

1) кол-во циклов стирания ограничено (то ли 100, то ли 300, то ли 1000 - во всяком случае меньше чем в еепромках и намного)
Если память не изменяет, вроде Flash 10'000 циклов, а EEPROM 100'000.

Re: stm32f103 HAL: зранение данных во внутреннем флеше

Вт янв 30, 2018 10:34:05

Здравствуйте!
Кто нибудь работает сейчас с библиотекой SPL? Имеет ли смысл ее изучать и учиться по ней, ведь 90% уроков именно с ней. Сейчас возникла необходимость сохранить настройки (массив данных на 256 ячеек) во flash. Так чтобы можно было потом написать другую программу и просто обратиться к этому массиву. И у меня есть пара вопросов.
Когда я заливаю прошивку, этот массив уже записывается куда-то во флеш, верно? Мне необходимо зафиксировать его так, чтобы он не пересекался с прошивкой. Как это сделать? Записать его на последнюю страницу? Как сделать так, чтобы сразу записать его куда надо, а не перезаписать уже существующий массив? Имеет ли смысл использовать SPL или проще будет работать с регистрами напрямую?

Re: stm32f103 HAL: зранение данных во внутреннем флеше

Ср янв 31, 2018 00:25:24

bezzabotna писал(а):Кто нибудь работает сейчас с библиотекой SPL? Имеет ли смысл ее изучать и учиться по ней, ведь 90% уроков именно с ней.

Сам пользуюсь ею, довольно удобно и быстро в разработке. Но бывают моменты, когда она начинает мешать быстродействию или размеру кода. Например, при отправке через SPI быстрее будет пихать данные напрямую в регистр, чем пользоваться функцией SPL. Для работы с флэш я предпочел написать свои процедуры.
bezzabotna писал(а):Когда я заливаю прошивку, этот массив уже записывается куда-то во флеш, верно?

Смотря как Вы его объявили. Если как константы с инициализацией, то да. Если как указатель, то нет.
bezzabotna писал(а):Мне необходимо зафиксировать его так, чтобы он не пересекался с прошивкой. Как это сделать? Записать его на последнюю страницу? Как сделать так, чтобы сразу записать его куда надо, а не перезаписать уже существующий массив?

Честно говоря, суть вопроса не совсем ясна. Вам нужно один раз залить во флэш какой-то массив определенных значений, чтобы при последующих прошивках основной программы он оставался на своем месте нетронутый? И чтобы программы получали к нему доступ для чтения? Или программы могут перезаписывать эти значения?
У себя, например, я сделал хранение настроек так:
1. Оставил две последние страницы флэш под хранение настроек, линкеру указал размер флэша за вычетом этих двух страниц. То есть программа ни при каких обстоятельствах на них уже не залезет - линкер ругнется на недостаточную память.
2. В программе объявил структуру с переменными настроек в оперативке. При старте программа считывает настройки из последних страниц в эту структуру. В процедуру чтения передаю указатель на эту структуру и внутри этой процедуры этот указатель используется просто как адрес буфера, в который нужно считать из флэш количество байт, равное размеру структуры настроек.
3. В программе предусмотрен сброс настроек, при котором всем переменным структуры в оперативке присваиваются значения по умолчанию. После этого указатель на структуру передается в процедуру записи, которая, аналогично чтению, использует указатель как адрес буфера, из которого нужно записать в последние страницы флэш количество байт, равное размеру структуры.
Две страницы - это для повышения ресурса перезаписи. Настройки пишутся поочередно то в первую, то во вторую страницы. Если перезапись настроек не нужна или будет происходить редко, то можно использовать только одну страницу без возни с чередованием страниц.
bezzabotna писал(а):Имеет ли смысл использовать SPL или проще будет работать с регистрами напрямую?

Если нет жестких требований к скорости исполнения и не упираетесь в ограничение размера прошивки, то SPL, конечно, удобнее. Но работать напрямую с регистрами - более предсказуемо и гибко, на мой взгляд :)

Re: stm32f103 HAL: зранение данных во внутреннем флеше

Ср янв 31, 2018 15:38:29

Кто нибудь работает сейчас с библиотекой SPL? Имеет ли смысл ее изучать и учиться по ней

SPL для STM32 закапывается, у ST бзик по поводу HAL.
для STM8 в хидерах есть такой вот комментарий от самих ST:
Код:
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME.

я склонен понимать его буквально (вообще они там про юридическую сторону вопроса), и использую SPL в основном как то самое "guidance only" - источник для копипасты с последующим выпиливанием всего лишнего.

Re: stm32f103 HAL: зранение данных во внутреннем флеше

Чт фев 01, 2018 09:21:48

Спасибо за ответы! Нужно было записать массив с инициализацией как константу. Но теперь у меня проблема как с ним обращаться правильно то есть я объявляю массив и указатели глобально
Код:
const uint16_t A[256] ={0,1,2,3,...}

uint16_t *point0;
uint16_t *point1;
....



Потом в функциях и теле программы мне надо к нему этими указателями обращаться, а он выдает ошибку в таких строках:
Код:
point0=&A[0];

и говорит мол сущности *point0 нельзя присвоить значение по адресу &A[0] несовместимые типы данных.

если я напишу :
Код:
*point0=A[0];

скомпилируется, но работать программа не будет.

Как мне правильно указывать на этот массив?

Re: stm32f103 HAL: зранение данных во внутреннем флеше

Чт фев 01, 2018 10:04:28

Имя массива и есть указатель на его первый элемент.
К примеру передача указателя в качестве аргумента.
Прототип
Код:
my_function( const uint16_t *);

Вызов
Код:
my_function(A);


Код:
const  uint16_t *point0;
point0=A;
Или эквивалент
point0=&A[0];

Re: stm32f103 HAL: зранение данных во внутреннем флеше

Чт фев 01, 2018 12:49:33

Код:
point0=&A[0];


компилируется только при условии что point0 объявить как
Код:
const uint32_t *point0;


А он точно с флеша значения считывает а не с оперативки?
можно ли сделать так?
Код:
point0=read_flash(&A[0]);

Re: stm32f103 HAL: зранение данных во внутреннем флеше

Чт фев 01, 2018 15:46:24

Вы лучше фрагмент кода приводите . Снова что ли калокубом страдаете?

Вот только что набросал на скорую рку и проверил .
Код:
const uint16_t  sine_wave[256*3] = {
0x180, 0x2CC, 0x33,
0x189, 0x2C7, 0x2F,

--cut---
uint16_t mem_buf[30];


void read_table(const uint16_t *src,uint16_t *dist)
{
   const uint16_t *pnt0;
   uint16_t *pnt1;
   pnt0=src;
   pnt1=dist;
   *pnt1=*pnt0;
}

--cut--

read_table(sine_wave,mem_buf);




Изображение
Изображение
Ответить