STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

[uquote="jcxz",url="/forum/viewtopic.php?p=3460980#p3460980"]По DMA-запросу (изменение на внешнем пине)[/uquote]

Осталась самая малость, сущий пустячок- найти этот несуществующий реквест...
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: STM32 новичку в ARM что к чему

Сообщение jcxz »

[uquote="dosikus",url="/forum/viewtopic.php?p=3461343#p3461343"]Осталась самая малость, сущий пустячок- найти этот несуществующий реквест...[/uquote]
А что - это проблема? :dont_know:
Я так понимаю - раз автор вопроса молчит, значит он всё уже давно сделал и у него уже давно всё работает. 8)
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

jcxz, только если как-то через через Capture таймера
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: STM32 новичку в ARM что к чему

Сообщение jcxz »

[uquote="dosikus",url="/forum/viewtopic.php?p=3461395#p3461395"]jcxz, только если как-то через через Capture таймера[/uquote]
Вот именно. Или через любую другую удобную периферию. Хоть UART 8)
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

jcxz, да не все так гладко, обеспечить минимальное время реакции на смену уровня на пине через "хоть UART" не выйдет.
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: STM32 новичку в ARM что к чему

Сообщение jcxz »

[uquote="dosikus",url="/forum/viewtopic.php?p=3461433#p3461433"]jcxz, да не все так гладко, обеспечить минимальное время реакции на смену уровня на пине через "хоть UART" не выйдет.[/uquote]
Автор не озвучил ни длительность импульса ни периодичность его повторения ни требуемое время реакции на него.
Удобнее конечно через таймер. Но при желании и UART можно - загнать его на максимальную скорость, oversampling8 и минимальное число бит в символе.
Там подводный камень может быть в другом: нужно не забывать вычитывать из этой периферии причину request-а - байт из UART-а или защёлкнутое значение из таймера, чтобы сбросить этот request. Для этого можно использовать такой DMA-request, который идёт на два разных DMA-канала, и вторым каналом прочитать эту причину (поставив каналу приоритет пониже).
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Re: STM32 новичку в ARM что к чему

Сообщение pokk »

Благодарю всех, за ответ, это я подключаю winzet 5100(5300) через FMSC, и хотел по максимум задействовать аппаратные возможности процессора, что бы по выводу прерываний от wiznet (пришел запрос на считывания пакета данных, или запрос на закидывания следующего пакета ) сразу уже закидывать подготовленные данные или считывать данные автоматом, а после уже разбирать что пришло. Но походу получиться больше геморроя, так что сделаю, либо на прерывании по выводу int запускать считывание DMA, либо вообще его в майне опрашивать полингом, и там уже запускать дальнейшие операции.
Аватара пользователя
afz
Опытный кот
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Re: STM32 новичку в ARM что к чему

Сообщение afz »

А подскажите, плз, как правильно объяснить CMSIS'у под Кейлом, что нужно использовать внешний ВЧ-генератор (кварц)? Просмотрел RTE_Device.h в кейловском Configuration Wizard'е, там High-speed External Clock был 25 МГц, поставил 8 МГц (мой кварц), но, похоже, на кварц так и не переключилось, продолжает работать от внутреннего клока. А принудительного переключения на кварц в этом визарде нет.

И, кстати, как попроще глянуть (отладчиком), действительно оно не переключилось, или это у меня кварц поганый попался?

Проверял своей любимой программкой мигания - она раз в секунду коротко взмаргивает светодиодом и считает минуты, а в начале каждой минуты взмаргивает дважды. Так вот, вечером засек по секундной стрелке часов, когда взморгнуло дважды, утром глянул - расползлось секунд на 20. Аналогичная программуля на разных АВР-ках расползалась с часами за ночь не более, чем на секунду-другую. Глядя на эти 20 секунд (а может и не 20, а больше на целое число минут, оно-то считается по модулю 60), я сделал вывод, что на STM32 клок остался от HSI - на всех АВР-ках те же китайские кварцы, а тут какой-то особенный, да?..
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение WiseLord »

А что за STM32? На той же STM32F103 обязательно должен быть кварц с нагрузочной способностью 6пФ (даже не рекомендация, а чёткое требование в даташитах/мануалах), хотя те же китайские платы на C8T6 идут с неправильным кварцем и конденсаторами в нагрузке, судя по мультиметру, где-то на 15пФ.

Я пока не заменил кварц и конденсаторы на правильные, вообще не мог понять, что не так с RTC - могут вообще не тикать, а берёшь плату в руку (наводки? земля?) - начинают, но с жуткой погрешностью.

А с нормальным кварцем - уход порядка секунды в сутки, да и тот можно скорректировать.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

[uquote="afz",url="/forum/viewtopic.php?p=3462001#p3462001"]И, кстати, как попроще глянуть (отладчиком), действительно оно не переключилось, или это у меня кварц поганый попался?[/uquote]Если кварц не включен, то на этой строке повиснете навсегда.

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

while(!(RCC->CR & RCC_CR_HSERDY));
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: STM32 новичку в ARM что к чему

Сообщение oleg110592 »

[uquote="afz",url="/forum/viewtopic.php?p=3462001#p3462001"]А подскажите, плз, как правильно объяснить CMSIS'у[/uquote]
у CMSISа, например для F0, в папках есть файлик типа system_stm32f0xx.c, где настройка по умолчанию на HSI. У ST есть экселевские утилиты под разные семейства типа Clock configuration tool for STM32F0xx microcontrollers (AN4055):
https://www.st.com/en/development-tools ... 32088.html
Там можно птичками наконфигурить и сгенерить новый system_stm32f0xx.c.
Только похоже под старый CMSIS. Можно попробовать переделать.
Сейчас ST предлагает для конфигурации тактирования куб - можно подглядеть внутренности HAL-овой или LL-вой реализации.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

Вот не понимаю зачем гадать где там что само нагенерилось? Неужели так трудно самому включить кварц и PLL? Ну это же не USB-стек, тут всего то около 10 строчек кода если размашисто писать.
Аватара пользователя
Oxford
Опытный кот
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение Oxford »

Любовь уповать на говнолибы, калокубы...Главное чтобы не изучать и не читать ничего, а потом форум зае...ывать вопросами. Буксуют на простейших вещах, включить альтернативную функцию, настроить тактирование....посмотреть регистр RCC_CR запущен ли внешний кварц и т.д.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Аватара пользователя
philosoraptor
Прорезались зубы
Сообщения: 225
Зарегистрирован: Сб янв 14, 2012 22:53:50

Re: STM32 новичку в ARM что к чему

Сообщение philosoraptor »

Как кто-то метко заметил однажды, не бывает плохих инструментов, бывают кривые руки (и все остальное).
Аватара пользователя
Oxford
Опытный кот
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение Oxford »

И плохие инструменты есть, и кривые руки, и все остальное. И даже philosoraptor который решил поиграть в "Самый умный на форуме"
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение WiseLord »

Oxford:
Когда сам уже сто раз подсмотрел в том же CubeMX примеры инициализации периферии, понял принцип (AFIO/тактирование/NVIC) и написал один раз свой аналогичный код, который потом дублируешь в свои проекты, становится очень легко называть использованные инструменты калом и говном. Вроде как сразу ЧСВ повышается до over9000.
Sergi
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Re: STM32 новичку в ARM что к чему

Сообщение Sergi »

В ранних версиях KEILа в файле system_stm32fxxxx легко можно было править настройку тактирования. Сейчас V5.23.0.0, и настройку провожу в первых строчках main. Также и в IARе.
Аватара пользователя
afz
Опытный кот
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Re: STM32 новичку в ARM что к чему

Сообщение afz »

WiseLord писал(а):На той же STM32F103 обязательно должен быть кварц с нагрузочной способностью 6пФ (даже не рекомендация, а чёткое требование в даташитах/мануалах), хотя те же китайские платы на C8T6 идут с неправильным кварцем
Угу, та самая плата. А зачем такое требование к кварцам? Они же, наверняка, более редкие, да и дороже. Или это из-за необходимости генерации на 25 МГц? Так АВР-ки весело работают с обычными кварцами до 20 МГц, а от 20 до 25 не так и далеко...

WiseLord писал(а):Я пока не заменил кварц и конденсаторы на правильные, вообще не мог понять, что не так с RTC - могут вообще не тикать, а берёшь плату в руку (наводки? земля?) - начинают, но с жуткой погрешностью.
Стоп-стоп, причем здесь RTC ? Я же о HSE спрашиваю...

VladislavS писал(а):while(!(RCC->CR & RCC_CR_HSERDY));
Это где такое? Я в system_stm32f10x.c нашел только такое:

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

 do
  {
    HSEStatus = RCC->CR & RCC_CR_HSERDY;
    StartUpCounter++; 
  } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
Оно вызывается из SystemInit, которая, в свою очередь, вызывается из startup_stm32f10x_md.s перед вызовом __main.

VladislavS писал(а):Вот не понимаю зачем гадать где там что само нагенерилось? Неужели так трудно самому включить кварц и PLL? Ну это же не USB-стек, тут всего то около 10 строчек кода если размашисто писать.
Естественно, можно и врукопашную. Но ведь все это уже есть в SystemInit(), хотелось бы просто разрулить это грамотно.

Oxford писал(а):Главное чтобы не изучать и не читать ничего, а потом форум зае...ывать вопросами.
Какие все мануальные терапевты! Как всегда, вместо простого ответа на вопрос, две страницы мануальной терапии!..

(Мануальный терапевт - это тот, кто вместо того, чтобы помочь, говорит RTFM. Эту фразу выдал кто-то из ФИДОшников лет так 20-25 назад, дословно и автора, увы, не помню...)

Sergi писал(а):В ранних версиях KEILа в файле system_stm32fxxxx легко можно было править настройку тактирования.
Вот-вот. Подкрутил в его Configuration Wizard'е что надо, и вперед.

Так что, получается, что это (детальную настройку) теперь похоронили? То есть всех пытаются загнать в кубики, да? Грустно... Ну чтож, придется, как советует WiseLord, поиграть-таки немного в кубики и списать инициализацию клока оттуда.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Sergi
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Re: STM32 новичку в ARM что к чему

Сообщение Sergi »

Ну в самом развернутом виде например для F0 это 11 строк

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

RCC->CR |= RCC_CR_HSEON;
   while (!(RCC->CR & RCC_CR_HSERDY)) {};
   FLASH->ACR |= FLASH_ACR_PRFTBE;
   FLASH->ACR |= FLASH_ACR_LATENCY;   
   RCC->CFGR |= RCC_CFGR_PLLSRC_HSE_PREDIV;
   RCC->CFGR |= RCC_CFGR_PLLXTPRE;
   RCC->CFGR2 = (4-1);                        //    26/4
   RCC->CFGR |= (10-2)<<18;                /// Xtall/4*10=65
   RCC->CR |= RCC_CR_PLLON;
   while (!(RCC->CR & RCC_CR_PLLRDY)) {};
   RCC->CFGR |= RCC_CFGR_SW_PLL;

Титаническая работа :))
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение WiseLord »

Sergi писал(а):Стоп-стоп, причем здесь RTC ? Я же о HSE спрашиваю...
Oops.. Я почему-то подумал именно о LSE. Видимо, это смутило.:
afz писал(а):Так вот, вечером засек по секундной стрелке часов, когда взморгнуло дважды, утром глянул - расползлось секунд на 20.
По HSE вроде таких ограничений нет. Но там точность вроде как и не нужна особо.

Добавлено after 4 minutes 7 seconds:
afz писал(а):Ну чтож, придется, как советует WiseLord, поиграть-таки немного в кубики и списать инициализацию клока оттуда.
Там будет что-то вроде https://github.com/WiseLord/ampcontrol- ... .c#L42-L75. Я за основу брал именно то, что CubeMX для LL сгенерировал.

Добавлено after 7 minutes 15 seconds:
Sergi писал(а):Титаническая работа :))
В том-то и дело, что в итоге это выглядит просто. Но даже в этом простом примере помимо изучения в reference manual регистров RCC (что достаточно очевидно) приходится ещё и в FLASH что-то делать (ту же latency на высоких частотах понижать). А это уже далеко не так очевидно и легко упускаемо.
Вот для таких вещей иногда хорошо подсмотреть в код от CubeMX. И утянуть именно основу - в каких регистрах что меняем. Не обязательно тащить HAL за собой при этом, можно хоть на базе CMSIS библиотеки, а хоть и свои #define для регистров сделать. Но вот саму последовательность действий - почему бы и не подсмотреть.
Ответить

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