Jump to content
admin

Запись Данных По Flash Память Напрямую С Coide

Recommended Posts

Вопрос такой, известно, что у большинства STM32 нет EEPROM памяти и данные нужно хранить в Flash памяти. С чтением и записью данных я разобрался, данные (настройки) храню в последней 127 странице памяти. Эти самые настройки я передаю по UART, только вот проблема такая, что мне нужно при прошивке МК и первом запуске программы, эти настройки напрямую записать в память, т.е. дефолтные. В CooCox CoIDE я такого не нашел. Возможно вообще такое?

Share this post


Link to post
Share on other sites

Здравствуйте.

Если ещё актуально ..

С STM32 пока дел не имел, но можно просто при каждом запуске прошивки проверять, есть ли там данные (например, если все ячейки равны FF, то ничего там нет).

Если там пусто - прошивать умолчания.

Насчёт прошивки - в разных средах есть файлики, которые говорят линкеру, куда чего писать. Я пользуюсь IAR-ом, у него есть файлы .icf, там сидят эти адреса. Хотя никогда не пользовался. Знаю лишь теоретически :) .

Share this post


Link to post
Share on other sites

Изготовление 2-х слойных плат от 2$, а 4-х слойных от 5$!

Быстрое изготовление прототипа платы всего за 24 часа! Прямая доставка с нашей фабрики!

Смотрите видео о фабрике JLCPCB: https://youtu.be/_XCznQFV-Mw

Посетите первую электронную выставку JLCPCB https://jlcpcb.com/E-exhibition чтобы получить купоны и выиграть iPhone 12, 3D-принтер и так далее...

С STM32 пока дел не имел, но можно просто при каждом запуске прошивки проверять, есть ли там данные (например, если все ячейки равны FF, то ничего там нет).

Если там пусто - прошивать умолчания.

Да, я так и сделал, просто было интересно именно насчет CoIDE, но по видимому там такое не предусмотрено

Share this post


Link to post
Share on other sites

Высокая надежность SiC! Как они этого добились?

За несколько лет кропотливых исследований и совершенствования технологии компания Infineon смогла довести показатели надежности и стабильности параметров высоковольтных и быстродействующих карбид-кремниевых транзисторов линейки CoolSiC практически до уровня их кремниевых собратьев.

Подробнее

Эти самые настройки я передаю по UART, только вот проблема такая, что мне нужно при прошивке МК и первом запуске программы, эти настройки напрямую записать в память, т.е. дефолтные.

Здравствуйте! Создайте массив во флэш памяти нужного Вам размера, и загоните значения которые Вам надо. Это если Вам не нужно будет их в дальнейшем изменять.

Если нужно будет изменять данные, а на борту ЧИПа нету еепром - придется прикручивать внешнюю память 24Схх

Посмотрите в хелпе к компилятору как объявить массив.

Edited by Bokopor

Share this post


Link to post
Share on other sites

Вебинар «Практическое использование TrustZone в STM32L5»(10.12.2020)

Приглашаем на вебинар, посвященный экосистеме безопасности и возможностях, которые появились у разработчиков благодаря новой технологии TrustZone в микроконтроллерах STM32L5. Программа рассчитана на технических специалистов и тех, кто уже знаком с основами защиты ПО в STM32.

Подробнее

Изменять данные в последствии нужно. Как загонять туда данные я знаю. EEPROM на борту присутствует у STM32.

Вопрос тут в другом

Share this post


Link to post
Share on other sites

Снижена цена на AC/DC и DC/DC преобразователи Mornsun в Компэл!

Компэл и компания Mornsun снизили цены на преобразователи AC/DC-преобразователи семейств LS и LDE. По привлекательной цене также предлагаются DC/DC-преобразователи изолированных семейств поколений R2 и R3 различного конструктивного исполнения.

Подробнее

При резервировании области flash под еепром, скорее всего объявляется массив с необходимым размером. Если это так, то можно при объявлении прописывать дефолтные значения, типа:

const flash   ee_flash_arr[1024]={0x00, 0x01, 0x02,... };

Share this post


Link to post
Share on other sites

А разве в программе можно флэш перезаписывать? :unknw:

Она-же вроде только раз может записаться.. при прошивке.

Анатолий, если Вам надо будет менять значения в дальнейшем а в STM32 нету еепром, то Вам придется использовать внешнюю память, как не крути...

Самое маленькое и простое это 24Схх или 93Схх соответственно I2C и SPI . Скорость работы у 93 серии выше чем у 24.


Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Share this post


Link to post
Share on other sites

У STM32 есть энергонезависимая флэш, просто она совмещенная. Данные там нормально можно хранить, записывать и считывать, вот рабочий код: http://forum.cxem.ne...3

Share this post


Link to post
Share on other sites

Теперь понял :) Хитро-мудро сделали STM-овцы .


Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Share this post


Link to post
Share on other sites
В 27.11.2012 в 10:31, admin сказал:

нужно при прошивке МК и первом запуске программы, эти настройки напрямую записать в память, т.е. дефолтные. В CooCox CoIDE я такого не нашел. Возможно вообще такое?

-- У меня тот же вопрос: Кто нибудь уже решил проблему ? 

Использую stm32f103с8 память 64К, нужно разместить дефолтные калибровки на 64 странице(FLASH_PAGE_63   0x800FC00) в CooCox CoIDE. 

Share this post


Link to post
Share on other sites
В 07.07.2017 в 12:15, Zhuk72 сказал:

Второе сообщение. Пробуйте.

-- Спасибо! Пока ничего не получилось. 

С указанием адреса там только последний пример (е). Вставляю код:

const unsigned long const Table[200] __attribute__ ((section(".Table")))={ 0 } ;//;

//linkscript add the like this:
?rom(rx): ORIGIN = 0x0800FC00, LENGTH = 0x00000100
.Table : { (0,0) } //> rom

на строке со знаком вопроса(перед rom(rx)) пишет:

Цитата

Multiple markers at this line
    - Syntax error
    - Missing ;

Share this post


Link to post
Share on other sites

Так ведь второе надо не в код добавлять, а куда-нибудь в настройку линкера.

Там же так и написано, правда криво, вероятно онлайн переводчиком с китайского.

Share this post


Link to post
Share on other sites

Форумчане, коллеги! Подскажите, пожалуйста. CoIDE выдает вот такую ошибку при записи во флешпамять:  Error: Connect failed, check config and cable connection. Со шнуром USB всё в порядке, ST-Link Utility установил. Но в диспетчере устройств драйвер STM32 почему-то именно в разделе дисковых устройствах отображается(в контроллерах USB его нет). На отладочной плате Discovery горит Красный светодиод. Настройки дебаггера в CoIDE прилагаю. Спасибо.

Настройки дебаггера.

stm32_debugger_settings.JPG

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Сорри, проглядел. Так непонятно - постоянно возбуд или во время (и после) скачка только. До скачка нет возбуда, после скачка остаётся - так? Разобрались.. Нет. Это вы повторяете вопросы о замене. Пора было давно заменить. Если не исключить китайцев - можем долго тут воду в ступе тольчь и из пустого в порожнее переливать. 669-649 - оригиналы или китайцы? Если китайцы, то не надо. А на фото 1360-3423? А 1109? Да понял я и раньше. И ответил... 6 часов назад, HAKAS сказал: Но можно выставить 35мА и погонять немного, послушать, контролируя осциллом сигнал музыкальный. Возможно, чтобы не накручивать ТП и не искать транзисторы, вам будет достаточно 35мА ТП.     Ждём... Интрегал!
    • подскажите что это такое, поиск в интернете ничего не дал маркировка очень интересная) единстваенно что знаю что отечественные
    • Ну не знаю! Вообще антенный провод отпаял от платы и все равно видимо очень сильный сигнал местных радиостанций забивает все остальные.  Надо ехать за город где их сигнал похуже.  
    • Да надо будет ещё раз  глянуть ... 
    • Может быть и удобно, но с виду темный лес, конечно это зависит от сложности схемы. Мне понравилось как собирал схему Юный пионер на макетке   
    • @dasZebra Сделал всё так как ты и сказал, но ничего не изменилось. Всё тоже самое. #define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> volatile unsigned char menu=1; volatile unsigned char btn=1; volatile unsigned char timer=0; ISR(TIMER1_OVF_vect) { timer=1; } GetButton() { if (~PINB & (1<<0)) { PORTB &= ~((1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)); PORTC &= ~((1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)); PORTD = 0b00000000; if (btn==1) { PORTB |= (1<<2); btn=1; menu=1; } if (btn==2) { PORTB |= (1<<2); btn=1; menu=1; } if (btn==3) { PORTB |= (1<<3); btn=2; menu=2; } if (btn==4) { PORTB |= (1<<4); btn=3; menu=3; } if (btn==5) { PORTB |= (1<<5); btn=4; menu=4; } if (btn==6) { PORTB |= (1<<6); btn=5; menu=5; } if (btn==7) { PORTB |= (1<<7); btn=6; menu=6; } if (btn==8) { PORTC |= (1<<0); btn=7; menu=7; } if (btn==9) { PORTC |= (1<<1); btn=8; menu=8; } if (btn==10) { PORTC |= (1<<2); btn=9; menu=9; } if (btn==11) { PORTC |= (1<<3); btn=10; menu=10; } timer=0; } if (~PINB & (1<<1)) { PORTB &= ~((1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)); PORTC &= ~((1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)); PORTD = 0b00000000; if (btn==11) { PORTC |= (1<<4); btn=11; menu=11; } if (btn==10) { PORTC |= (1<<4); btn=11; menu=11; } if (btn==9) { PORTC |= (1<<3); btn=10; menu=10; } if (btn==8) { PORTC |= (1<<2); btn=9; menu=9; } if (btn==7) { PORTC |= (1<<1); btn=8; menu=8; } if (btn==6) { PORTC |= (1<<0); btn=7; menu=7; } if (btn==5) { PORTB |= (1<<7); btn=6; menu=6; } if (btn==4) { PORTB |= (1<<6); btn=5; menu=5; } if (btn==3) { PORTB |= (1<<5); btn=4; menu=4; } if (btn==2) { PORTB |= (1<<4); btn=3; menu=3; } if (btn==1) { PORTB |= (1<<3); btn=2; menu=2; } timer=0; } } int main(void) { DDRB = 0b11111100; DDRC = 0b1111111; DDRD = 0b11111111; PORTB = 0b00000000; PORTC = 0b0000000; PORTD = 0b00000000; TIMSK |= (1<<2); TCCR1B = 0b00000001; TCNT1 = 54613; sei(); while(1) { if (timer==1) { GetButton(); } if (menu==1) { PORTD |= (1<<0); PORTD &= ~((1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)); _delay_ms(300); PORTD |= (1<<1); PORTD &= ~((1<<0)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)); _delay_ms(300); PORTD |= (1<<2); PORTD &= ~((1<<0)|(1<<1)|(1<<3)|(1<<4)|(1<<5)|(1<<6)); _delay_ms(300); PORTD |= (1<<3); PORTD &= ~((1<<0)|(1<<1)|(1<<2)|(1<<4)|(1<<5)|(1<<6)); _delay_ms(300); PORTD |= (1<<4); PORTD &= ~((1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<5)|(1<<6)); _delay_ms(300); PORTD |= (1<<5); PORTD &= ~((1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<6)); _delay_ms(300); PORTD |= (1<<6); PORTD &= ~((1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)); _delay_ms(300); } if (menu==2) { PORTD |= (1<<0); _delay_ms(300); PORTD |= (1<<1); _delay_ms(300); PORTD |= (1<<2); _delay_ms(300); PORTD |= (1<<3); _delay_ms(300); PORTD |= (1<<4); _delay_ms(300); PORTD |= (1<<5); _delay_ms(300); PORTD |= (1<<6); _delay_ms(300); PORTD &= ~(1<<0); _delay_ms(300); PORTD &= ~(1<<1); _delay_ms(300); PORTD &= ~(1<<2); _delay_ms(300); PORTD &= ~(1<<3); _delay_ms(300); PORTD &= ~(1<<4); _delay_ms(300); PORTD &= ~(1<<5); _delay_ms(300); PORTD &= ~(1<<6); } if (menu==3) { PORTD |= ((1<<0)|(1<<6)); _delay_ms(300); PORTD |= ((1<<1)|(1<<5)); _delay_ms(300); PORTD |= ((1<<2)|(1<<4)); _delay_ms(300); PORTD |= (1<<3); _delay_ms(300); PORTD &= ~((1<<0)|(1<<6)); _delay_ms(300); PORTD &= ~((1<<1)|(1<<5)); _delay_ms(300); PORTD &= ~((1<<2)|(1<<4)); _delay_ms(300); PORTD &= ~(1<<3); _delay_ms(300); } if (menu==4) { PORTD |= ((1<<0)|(1<<6)); _delay_ms(300); PORTD |= ((1<<2)|(1<<4)); _delay_ms(300); PORTD &= ~((1<<0)|(1<<6)); _delay_ms(300); PORTD &= ~((1<<2)|(1<<4)); _delay_ms(300); PORTD |= ((1<<1)|(1<<5)); _delay_ms(300); PORTD |= (1<<3); _delay_ms(300); PORTD &= ~((1<<1)|(1<<5)); _delay_ms(300); PORTD &= ~(1<<3); } } } Вот он код прошивки на этот раз весь.
    • А что в эмиттерном повторителе токи не так идут? Классическое описание рассматривает p-n-p структуру. Причём оперировали не электронами, а преобладающими дырками. Дырки идут от эмиттера (могут и от коллектора в инверсном включении). Поэтому эмиттер испускающий.  

  • Прямоугольный переключатель, 2 контакта, 5 шт.

  • Similar Content

    • By xrou
      Здравствуйте, пытаюсь подключить USB флешку к STM32F767ZI
       
      Включаю USB_OTG_FS - host only, (V bus и SOF  не включаю), USB HOST Class for fs ip - Mass Storage host class, FATFS (USE_LFN - в стеке) - USB_Disk
      В настройках USB_HOST требует, как я понял, пин отвечающий за питание устройства - PC1
      Код простейший, должен работать 100% а может нет. Внутренние файлы библиотек не менял
      Думаю что нет питания на USB устройство т.к. пробовал вставить туда ttl конвертер на котором есть светодиод питания и он не горит
       
      Ваши идеи и предположения? 
       
    • By xrou
      Здравствуйте, хочу подключить джойстик к stmке, но проблема в том что он пятивольтовый, а АЦП все, что больше 3.3 выдаёт как 4095. На ардуино есть контакт aref введённый на плату, но на stm, как я понял, он соединён с контактом питания и все что выше 3.3 вольта просто спалит кристал. 
      Подскажите как подключить пятивольтовое устройство к stmке. 
       
      P.s подключить джойстик к 3.3 не получится из-за появления огромных мёртвых зон.
    • By Black Jack
      Здравствуйте, программатор st-link не видит микроконтроллер STM32F103VET6. Присоединение кварца и внешнее тактирование не помогли. Что не так делаю, подскажите.


      схема.dch плата.dip
    • By strifonoff
      это снова я...
      Максимального быстродействия АЦП можно достичь при частоте АЦП 14 МГц, а этого можно добиться только при системной частоте 56 МГц (если внешний кварц на 8 МГц).
      Но возникает проблема со скоростями UART: значение регистра BRR не получится выставить так, что бы скорость была из стандартного ряда.
      Назрели несколько вопросов:
      1) возможно ли менять системную частоту на лету? (чую, что можно, но пока не знаю как) 
      2) критична ли ошибка в скорости UART по сравнению со стандартной? (что будет на другой стороне заранее не известно, т.к. любой может воткнуть свой девайс работающий на какой-то заранее согласованной стандартной скорости)
      3) как поведёт себя железо (состояние ОЗУ, регистров перефирии, состояние ног и т.д.) на изменение частоты? Две части программы () практически независимы, их объединяет только один массив, который наполняется в первой половине, а обрабатывается в другой.
       
    • By xrou
      Здравствуйте, пытаюсь обрабатывать пакеты приходящие от ESP8266 (01), но проблема в том, что пакеты всегда разной длины ведь мы не знаем, что напишет пользователь (хотя даже ответы на AT команды всегда разной длины). Знаю, что в плате F0 есть прерывание по символу, но у меня F103C8T6. Как быть? Создать массив большого размера нельзя, т.к. HAL_Recieve_IT ждет пока не наберется нужное кол-во символов.
      Приму любую идею и советы
×
×
  • Create New...