генератор кода stm32

Сколько я пробовал попробовать стм32 на халявной дискавери, но вид этих нагромождений кода, констант и регистров вгонял меня в уныние и сон. И вот сегодня я увидел ЭТО.



Для моего образного восприятия такая наглядность — просто кладезь. Посмотрев с 5 минут на схему тактирования — сразу становится понятно без даташита. Я бы это назвал кодогенератором нового поколения, когда блоки представлены наглядно и нарисованы пути прохождения сигнала. Подобные конфигураторы регистров я видел для всяких синтезаторов частот и сложных трансиверов.

Плюс еще в том, что код генерится нажатием на шестеренку. А если что-то в одном блоке поменял, то весь код стирается и показывается только одна-две строчки, которые относятся только к измененному блоку. (это про раздел тактирования на скриншоте)

Прога пока не все настраивает и некоторых модулей нет. Но уже это впечатляет.

скачать у автора

Комментарии (43)

RSS свернуть / развернуть
… программуля кажись отсюда
0
поправил, сам нашел оригинал
+1
… а вы не сравнивали код этого генератора, с MicroXplorer'ским (на базе StdPeriphLib)?… хотя, здесь он должен быть по компактнее.
0
а разве MicroXplorer генерит код? он генерит только какой-то пдф с левой инфой и никакого когда я не вижу там
или может быть я не могу разобраться в этой проге?
конфига тактирование периферии я там вообще не нашел
0
а разве MicroXplorer генерит код? он генерит только какой-то пдф с левой инфой и никакого когда я не вижу там
Совсем мозги травой заросли? Съешь мяса, мб попустит. :-D
Он (MicroXplorer) давно уже умеет код генерить.
0
… та версия, что устанавливается в качестве плагина в эклипсе не умеет генерить код, а вот версия что устанавливается как отдельная программа умеет и код генерить.
0
Очередной протез для мозга. :)
0
  • avatar
  • _YS_
  • 29 сентября 2013, 17:59
:-) Да ваще, как и компьютеры в целом. И микроконтроллеры, и калькуляторы, и арифмометры, и даже счёты.
Сергей Сергеич, нет! Уж коли зло пресечь: 
Забрать все книги бы да сжечь.
+5
Касательно тактирования в справочном листке все просто отлично расписано и наглядно.
А тут ловить помимо очепяток в документации ещё и очепятки программиста… :)
+1
  • avatar
  • ZiB
  • 29 сентября 2013, 19:06
Куда уж проще?
+3
  • avatar
  • ZiB
  • 29 сентября 2013, 19:08
совсем не наглядно и нельзя интерактивно потыкать и увидеть, где чего делится и на сколько, что получим на выходе в конце концов

конфигуратор я рассматриваю как такой же инструмент, как отладчик или хелп к иде или компилятору
а что печатки есть, так ничего идеального нет
в контроллерах вообще аппаратные глюки бывают и никто не плюется
0
Ну не знаю, возможно дело в опыте.
Для меня более чем понятно.
+1
  • avatar
  • ZiB
  • 30 сентября 2013, 18:20
Калыч, ты снова халяву ищешь?
Смотри не доведет до добра тебя эта страсть. Читай да просветишься?
0
насколько я знаю прога от STM может выдавать код, правда последний раз когда я смотрел она могла выдавать только инициализацию для портов. С другой стороны не вижу в этом вообще смысла особо, т.к. готовый код от stm довольно понятный и рабочий.
0
баян. На сайте st давно валяется скрипт генерирующий код. Постоянно им пользуюсь.
0
  • avatar
  • a9d
  • 29 сентября 2013, 20:17
ссылкой не поделитесь?
0
STM32L1xx_Clock_Configuration_V1.2.0.xls поиск по сайту. Версия могла поменяться.
0
  • avatar
  • a9d
  • 29 сентября 2013, 20:43
такие же скрипты к каждой линейке есть.
0
  • avatar
  • a9d
  • 29 сентября 2013, 20:43
А вот кому не нужен очередной протез, есть мощный вопрос.
Начальные условия таковы есть STM32 с использованием RTC с часовым кварцем и батарейкой. При инициализации всего этого добра если вдруг часовой кварц- LSE не генерит (или тупо зажат пальцем)то, система не стартует т.к. ждет в паре циклаов флагов готовности- которые естественно не приходят.
Как сделать так, чтобы автоматически переходил на LSI?
зы в лоб не получилось
0
Не надо вечных циклов. Если не инициализированы часы, то запускаетесь с LSI и разрешаете тактирование LSE. Заводите каким-либо образом фоновый процесс, который периодически следит за флагом стабилизации частоты и при его появлении переключается всё на LSE. Опять же, если частота пропала, можно сделать обратное переключение в том же процессе.
0
кхм… это не я там вечный цикл завел это STM так предлагает инициализироваться.
Я пробовал скажем так давать некоторое количество попыток на инициализацию — чето никак неадекватно.
Кстати если частота пропала то при записи в часы все повиснет

//собственно вот инициализация
void RTC_Configuration(void)
{

/* Enable PWR and BKP clocks */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);

/* Allow access to BKP Domain */
PWR_BackupAccessCmd(ENABLE);

/* Enable LSE */
RCC_LSEConfig(RCC_LSE_ON);

/* Wait till LSE is ready */
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET);

/* Select LSE as RTC Clock Source */
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);

/* Enable RTC Clock */
RCC_RTCCLKCmd(ENABLE);

/* Wait for RTC registers synchronization */
RTC_WaitForSynchro();

/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask();

/* Set RTC prescaler: set RTC period to 1sec */
RTC_SetPrescaler(32767); /* RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) */

/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask();

}
0
Если он будет ждать синхронизации бесконечно, то ничего удивительного. Можно добавить проверку и переключение прямо перед работой с часами — места это много не займёт.
0
не совсем понимаю что имеется ввиду- можете предложить какой то код?
0
К сожалению, со стандартной библиотекой я весьма плохо знаком, тем более в пределах 100го семейства…

Вот код функции RTC_WaitForLastTask:
void RTC_WaitForLastTask(void)
{
  /* Loop until RTOFF flag is set */
  while ((RTC->CRL & RTC_FLAG_RTOFF) == (uint16_t)RESET)
  {
  }
}

И RTC_WaitForSynchro:
void RTC_WaitForSynchro(void)
{
  /* Clear RSF flag */
  RTC->CRL &= (uint16_t)~RTC_FLAG_RSF;
  /* Loop until RSF flag is set */
  while ((RTC->CRL & RTC_FLAG_RSF) == (uint16_t)RESET)
  {
  }
}

или тут:
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET);

сделайте то же самое, но с таймаутом, уж не знаю, где оно именно виснет. Не переключилось за определённый срок — и фиг с ним, пусть работает на внутреннем.
0
в том то и дело что я все это уже пробовал вводил счетчик, выносил этот код в свою функцию- не работает
зы я бы не стал задавать совсем тривиальный вопрос
0
Так где он тормозит-то? Я до сих пор не понял. Отладчик должен это показать весьма наглядно.
0
Если бы показал и все каждый раз повторялось одинаково -все было бы просто, но по какойто причине все как то через ж… я уже навереное несколько дней на это потратил.
Если интересно то поставьте батарейку,lse, запустие rtc, зажмите часовой кварц пальцем (и на корпус тоже, второй вариант с его изъятием) и посмотрите отладчиком как оно стартует. Если вдруг чего получится с переходом на LSI (и обратно на LSE — если он есть) повторяемое то с меня пиво или чего там по вкусу :)
0
Насколько мне известно — програма уже так пол года заброшена. Там вроде пытались её делать вместе — но всё упёрлось в то что автор нежелал переделать всё на английский — а у меня например оно нехотело показывать то в одном месте то в другом русские буквы. Я испробовал кучу разных програм которые как бы на лету переделывают с русского на юникод — и нифига неполучилось… Ну и я на неё забил…
0
  • avatar
  • wowa
  • 30 сентября 2013, 00:05
в виндовсе в региональных настройках надо выставить русский для неюникодных прог
у тебя виндовс не русский поди? у меня английский и стоит эта настройка, поэтому все нормально работает
0
Да у меня дрогой регион стоит вместе с английским — мне для работы нужно. Но когда запускаю так как говориш — везде почти есть русский кроме текстовых белых полей — там опять хрень видно…
0
Порнография какая-то. Проще бы язык высокого уровня или развитую библиотеку для С/С++ использовать. Разве для stm32 нет такого?
0
  • avatar
  • ks_
  • 30 сентября 2013, 14:56
Сама идея мне нравится, но вот генерируемый код получается не самый удачный. Например, автор не учитывает, что желательно бы GPIO настраивать сразу за одну операцию Чтение/модификация/запись, так как промежуточные состояния настроек будет выглядеть как передрыгивание ножек, что в отдельных случаях может привести к конфликту сигналов.
0
Вопрос к автору по написанию программы: Каким инструментом сделаны функциональные блоки у вас в программе и соединительные цепи?
Для больших функциональных схем наверно понадобится прокрутка окна?
Вопрос к ALL-у: Интересно под VC20XX, MFC, Borland C или C# есть какие то доступные компоненты для рисования функциональных схем?
0
Вдогонку — хорошо бы было сделать так, чтобы можно было делать настройку правил генерации кода инициализации.
Это позволяло оперативно менять, исправлять, учитывать появление все новых и новых еррат, создавать новые блоки.
0
Сбойнуло, сообщение не дописанное улетело, а отредактировать не нашел, удалите pls предыдущее сообщение, нормальное здесь:
Вдогонку — хорошо бы было сделать так, чтобы можно было делать настройку правил генерации кода инициализации с помощью специального внешнего файла в текстовом формате.
Это позволяло оперативно менять, исправлять, учитывать появление все новых и новых еррат, создавать новые блоки
0
Обращения к автору было бы логичней писать у него в блоге, ТС не автор.
В варианте в посте блоксхемы скорее всего нарисованы непосредственно киданием компонент на форму в Delphi, а в новом варианте используются просто традиционные формы, без стилизации под блоксхему.
По поводу вынесения кодогенераторов в отдельные файлы — это автор уже сделал в свежей версии. Там правда не текст, а спецредактор.
0
Идея хорошая, все четко и наглядно. В моих хотелках уже нарисовалась некая универсальная визуальная прога, наподобие Drakon Editora, с блоками настройки переферии для stm, avr и пиков.
0
  • avatar
  • and
  • 10 октября 2013, 16:28
Читаю и поражаюсь гениальности некоторых товарищей.
Если уже пошла такая жара — напишите плиз код инициализации для следующей ситуации:
— контроллер STM32F407,
— лапа EXTI, на которую приходит логический сигнал от внешнего девайса,
— нужно настроить фильтр иголок, который будет отсекать с лапы иголки, короче чем 3 периода 1/8 частоты АРВ,
— от профильтрованного пинка нужно получить вылет на ISR.
(Это обращение к тем, кому не нужны «протезы для мозга».)
0
  • avatar
  • TSL
  • 13 октября 2013, 05:15
Ну так для этого можно и RC фильтр к ноге прицепить
0
Не подскажите, что случилось с сайтом «mycontroller.ru»? Не могу зайти который день. Может знаете email автора сайта? Спросить хочу, когда его починят.
0
сайт автора сдох
0
Ребят, если у кого-нибудь нибудь осталась программа, скиньте пожалуйста.
0
Если программка еще нажна, то вот: STM32Generator...
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.