STM32 новичку в ARM что к чему
Re: STM32 новичку в ARM что к чему
[uquote="jcxz",url="/forum/viewtopic.php?p=3460980#p3460980"]По DMA-запросу (изменение на внешнем пине)[/uquote]
Осталась самая малость, сущий пустячок- найти этот несуществующий реквест...
Осталась самая малость, сущий пустячок- найти этот несуществующий реквест...
Re: STM32 новичку в ARM что к чему
[uquote="dosikus",url="/forum/viewtopic.php?p=3461343#p3461343"]Осталась самая малость, сущий пустячок- найти этот несуществующий реквест...[/uquote]
А что - это проблема?
Я так понимаю - раз автор вопроса молчит, значит он всё уже давно сделал и у него уже давно всё работает.
А что - это проблема?
Я так понимаю - раз автор вопроса молчит, значит он всё уже давно сделал и у него уже давно всё работает.
Re: STM32 новичку в ARM что к чему
jcxz, только если как-то через через Capture таймера
Re: STM32 новичку в ARM что к чему
[uquote="dosikus",url="/forum/viewtopic.php?p=3461395#p3461395"]jcxz, только если как-то через через Capture таймера[/uquote]
Вот именно. Или через любую другую удобную периферию. Хоть UART
Вот именно. Или через любую другую удобную периферию. Хоть UART
Re: STM32 новичку в ARM что к чему
jcxz, да не все так гладко, обеспечить минимальное время реакции на смену уровня на пине через "хоть UART" не выйдет.
Re: STM32 новичку в ARM что к чему
[uquote="dosikus",url="/forum/viewtopic.php?p=3461433#p3461433"]jcxz, да не все так гладко, обеспечить минимальное время реакции на смену уровня на пине через "хоть UART" не выйдет.[/uquote]
Автор не озвучил ни длительность импульса ни периодичность его повторения ни требуемое время реакции на него.
Удобнее конечно через таймер. Но при желании и UART можно - загнать его на максимальную скорость, oversampling8 и минимальное число бит в символе.
Там подводный камень может быть в другом: нужно не забывать вычитывать из этой периферии причину request-а - байт из UART-а или защёлкнутое значение из таймера, чтобы сбросить этот request. Для этого можно использовать такой DMA-request, который идёт на два разных DMA-канала, и вторым каналом прочитать эту причину (поставив каналу приоритет пониже).
Автор не озвучил ни длительность импульса ни периодичность его повторения ни требуемое время реакции на него.
Удобнее конечно через таймер. Но при желании и UART можно - загнать его на максимальную скорость, oversampling8 и минимальное число бит в символе.
Там подводный камень может быть в другом: нужно не забывать вычитывать из этой периферии причину request-а - байт из UART-а или защёлкнутое значение из таймера, чтобы сбросить этот request. Для этого можно использовать такой DMA-request, который идёт на два разных DMA-канала, и вторым каналом прочитать эту причину (поставив каналу приоритет пониже).
Re: STM32 новичку в ARM что к чему
Благодарю всех, за ответ, это я подключаю winzet 5100(5300) через FMSC, и хотел по максимум задействовать аппаратные возможности процессора, что бы по выводу прерываний от wiznet (пришел запрос на считывания пакета данных, или запрос на закидывания следующего пакета ) сразу уже закидывать подготовленные данные или считывать данные автоматом, а после уже разбирать что пришло. Но походу получиться больше геморроя, так что сделаю, либо на прерывании по выводу int запускать считывание DMA, либо вообще его в майне опрашивать полингом, и там уже запускать дальнейшие операции.
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: STM32 новичку в ARM что к чему
А подскажите, плз, как правильно объяснить CMSIS'у под Кейлом, что нужно использовать внешний ВЧ-генератор (кварц)? Просмотрел RTE_Device.h в кейловском Configuration Wizard'е, там High-speed External Clock был 25 МГц, поставил 8 МГц (мой кварц), но, похоже, на кварц так и не переключилось, продолжает работать от внутреннего клока. А принудительного переключения на кварц в этом визарде нет.
И, кстати, как попроще глянуть (отладчиком), действительно оно не переключилось, или это у меня кварц поганый попался?
Проверял своей любимой программкой мигания - она раз в секунду коротко взмаргивает светодиодом и считает минуты, а в начале каждой минуты взмаргивает дважды. Так вот, вечером засек по секундной стрелке часов, когда взморгнуло дважды, утром глянул - расползлось секунд на 20. Аналогичная программуля на разных АВР-ках расползалась с часами за ночь не более, чем на секунду-другую. Глядя на эти 20 секунд (а может и не 20, а больше на целое число минут, оно-то считается по модулю 60), я сделал вывод, что на STM32 клок остался от HSI - на всех АВР-ках те же китайские кварцы, а тут какой-то особенный, да?..
И, кстати, как попроще глянуть (отладчиком), действительно оно не переключилось, или это у меня кварц поганый попался?
Проверял своей любимой программкой мигания - она раз в секунду коротко взмаргивает светодиодом и считает минуты, а в начале каждой минуты взмаргивает дважды. Так вот, вечером засек по секундной стрелке часов, когда взморгнуло дважды, утром глянул - расползлось секунд на 20. Аналогичная программуля на разных АВР-ках расползалась с часами за ночь не более, чем на секунду-другую. Глядя на эти 20 секунд (а может и не 20, а больше на целое число минут, оно-то считается по модулю 60), я сделал вывод, что на STM32 клок остался от HSI - на всех АВР-ках те же китайские кварцы, а тут какой-то особенный, да?..
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
А что за STM32? На той же STM32F103 обязательно должен быть кварц с нагрузочной способностью 6пФ (даже не рекомендация, а чёткое требование в даташитах/мануалах), хотя те же китайские платы на C8T6 идут с неправильным кварцем и конденсаторами в нагрузке, судя по мультиметру, где-то на 15пФ.
Я пока не заменил кварц и конденсаторы на правильные, вообще не мог понять, что не так с RTC - могут вообще не тикать, а берёшь плату в руку (наводки? земля?) - начинают, но с жуткой погрешностью.
А с нормальным кварцем - уход порядка секунды в сутки, да и тот можно скорректировать.
Я пока не заменил кварц и конденсаторы на правильные, вообще не мог понять, что не так с RTC - могут вообще не тикать, а берёшь плату в руку (наводки? земля?) - начинают, но с жуткой погрешностью.
А с нормальным кварцем - уход порядка секунды в сутки, да и тот можно скорректировать.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 новичку в ARM что к чему
[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 что к чему
[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-вой реализации.
у 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 что к чему
Вот не понимаю зачем гадать где там что само нагенерилось? Неужели так трудно самому включить кварц и PLL? Ну это же не USB-стек, тут всего то около 10 строчек кода если размашисто писать.
- Oxford
- Опытный кот
- Сообщения: 819
- Зарегистрирован: Вт окт 23, 2012 13:17:25
- Откуда: Прокопьевск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Любовь уповать на говнолибы, калокубы...Главное чтобы не изучать и не читать ничего, а потом форум зае...ывать вопросами. Буксуют на простейших вещах, включить альтернативную функцию, настроить тактирование....посмотреть регистр RCC_CR запущен ли внешний кварц и т.д.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- philosoraptor
- Прорезались зубы
- Сообщения: 225
- Зарегистрирован: Сб янв 14, 2012 22:53:50
Re: STM32 новичку в ARM что к чему
Как кто-то метко заметил однажды, не бывает плохих инструментов, бывают кривые руки (и все остальное).
- Oxford
- Опытный кот
- Сообщения: 819
- Зарегистрирован: Вт окт 23, 2012 13:17:25
- Откуда: Прокопьевск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
И плохие инструменты есть, и кривые руки, и все остальное. И даже philosoraptor который решил поиграть в "Самый умный на форуме"
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Oxford:
Когда сам уже сто раз подсмотрел в том же CubeMX примеры инициализации периферии, понял принцип (AFIO/тактирование/NVIC) и написал один раз свой аналогичный код, который потом дублируешь в свои проекты, становится очень легко называть использованные инструменты калом и говном. Вроде как сразу ЧСВ повышается до over9000.
Когда сам уже сто раз подсмотрел в том же CubeMX примеры инициализации периферии, понял принцип (AFIO/тактирование/NVIC) и написал один раз свой аналогичный код, который потом дублируешь в свои проекты, становится очень легко называть использованные инструменты калом и говном. Вроде как сразу ЧСВ повышается до over9000.
Re: STM32 новичку в ARM что к чему
В ранних версиях KEILа в файле system_stm32fxxxx легко можно было править настройку тактирования. Сейчас V5.23.0.0, и настройку провожу в первых строчках main. Также и в IARе.
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: STM32 новичку в ARM что к чему
Угу, та самая плата. А зачем такое требование к кварцам? Они же, наверняка, более редкие, да и дороже. Или это из-за необходимости генерации на 25 МГц? Так АВР-ки весело работают с обычными кварцами до 20 МГц, а от 20 до 25 не так и далеко...WiseLord писал(а):На той же STM32F103 обязательно должен быть кварц с нагрузочной способностью 6пФ (даже не рекомендация, а чёткое требование в даташитах/мануалах), хотя те же китайские платы на C8T6 идут с неправильным кварцем
Стоп-стоп, причем здесь RTC ? Я же о HSE спрашиваю...WiseLord писал(а):Я пока не заменил кварц и конденсаторы на правильные, вообще не мог понять, что не так с RTC - могут вообще не тикать, а берёшь плату в руку (наводки? земля?) - начинают, но с жуткой погрешностью.
Это где такое? Я в system_stm32f10x.c нашел только такое:VladislavS писал(а):while(!(RCC->CR & RCC_CR_HSERDY));
Код: Выделить всё
do
{
HSEStatus = RCC->CR & RCC_CR_HSERDY;
StartUpCounter++;
} while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));Естественно, можно и врукопашную. Но ведь все это уже есть в SystemInit(), хотелось бы просто разрулить это грамотно.VladislavS писал(а):Вот не понимаю зачем гадать где там что само нагенерилось? Неужели так трудно самому включить кварц и PLL? Ну это же не USB-стек, тут всего то около 10 строчек кода если размашисто писать.
Какие все мануальные терапевты! Как всегда, вместо простого ответа на вопрос, две страницы мануальной терапии!..Oxford писал(а):Главное чтобы не изучать и не читать ничего, а потом форум зае...ывать вопросами.
(Мануальный терапевт - это тот, кто вместо того, чтобы помочь, говорит RTFM. Эту фразу выдал кто-то из ФИДОшников лет так 20-25 назад, дословно и автора, увы, не помню...)
Вот-вот. Подкрутил в его Configuration Wizard'е что надо, и вперед.Sergi писал(а):В ранних версиях KEILа в файле system_stm32fxxxx легко можно было править настройку тактирования.
Так что, получается, что это (детальную настройку) теперь похоронили? То есть всех пытаются загнать в кубики, да? Грустно... Ну чтож, придется, как советует WiseLord, поиграть-таки немного в кубики и списать инициализацию клока оттуда.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Re: STM32 новичку в ARM что к чему
Ну в самом развернутом виде например для 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 что к чему
Oops.. Я почему-то подумал именно о LSE. Видимо, это смутило.:Sergi писал(а):Стоп-стоп, причем здесь RTC ? Я же о HSE спрашиваю...
По HSE вроде таких ограничений нет. Но там точность вроде как и не нужна особо.afz писал(а):Так вот, вечером засек по секундной стрелке часов, когда взморгнуло дважды, утром глянул - расползлось секунд на 20.
Добавлено after 4 minutes 7 seconds:
Там будет что-то вроде https://github.com/WiseLord/ampcontrol- ... .c#L42-L75. Я за основу брал именно то, что CubeMX для LL сгенерировал.afz писал(а):Ну чтож, придется, как советует WiseLord, поиграть-таки немного в кубики и списать инициализацию клока оттуда.
Добавлено after 7 minutes 15 seconds:
В том-то и дело, что в итоге это выглядит просто. Но даже в этом простом примере помимо изучения в reference manual регистров RCC (что достаточно очевидно) приходится ещё и в FLASH что-то делать (ту же latency на высоких частотах понижать). А это уже далеко не так очевидно и легко упускаемо.Sergi писал(а):Титаническая работа
Вот для таких вещей иногда хорошо подсмотреть в код от CubeMX. И утянуть именно основу - в каких регистрах что меняем. Не обязательно тащить HAL за собой при этом, можно хоть на базе CMSIS библиотеки, а хоть и свои #define для регистров сделать. Но вот саму последовательность действий - почему бы и не подсмотреть.