Осталась самая малость, сущий пустячок- найти этот несуществующий реквест...
STM32 новичку в ARM что к чему
- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
[uquote="jcxz",url="/forum/viewtopic.php?p=3460980#p3460980"]По DMA-запросу (изменение на внешнем пине)[/uquote]
Осталась самая малость, сущий пустячок- найти этот несуществующий реквест...
Осталась самая малость, сущий пустячок- найти этот несуществующий реквест...
- Реклама
- Сообщения: 1734
- Зарегистрирован: Вт авг 15, 2017 10:51:13
[uquote="dosikus",url="/forum/viewtopic.php?p=3461343#p3461343"]Осталась самая малость, сущий пустячок- найти этот несуществующий реквест...[/uquote]
А что - это проблема?
Я так понимаю - раз автор вопроса молчит, значит он всё уже давно сделал и у него уже давно всё работает.
А что - это проблема?
Я так понимаю - раз автор вопроса молчит, значит он всё уже давно сделал и у него уже давно всё работает.
- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
- Сообщения: 1734
- Зарегистрирован: Вт авг 15, 2017 10:51:13
[uquote="dosikus",url="/forum/viewtopic.php?p=3461395#p3461395"]jcxz, только если как-то через через Capture таймера[/uquote]
Вот именно. Или через любую другую удобную периферию. Хоть UART
Вот именно. Или через любую другую удобную периферию. Хоть UART
- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
jcxz, да не все так гладко, обеспечить минимальное время реакции на смену уровня на пине через "хоть UART" не выйдет.
- Реклама
- Сообщения: 1734
- Зарегистрирован: Вт авг 15, 2017 10:51:13
[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-канала, и вторым каналом прочитать эту причину (поставив каналу приоритет пониже).
- Сообщения: 574
- Зарегистрирован: Вт ноя 02, 2010 17:46:37
Благодарю всех, за ответ, это я подключаю winzet 5100(5300) через FMSC, и хотел по максимум задействовать аппаратные возможности процессора, что бы по выводу прерываний от wiznet (пришел запрос на считывания пакета данных, или запрос на закидывания следующего пакета ) сразу уже закидывать подготовленные данные или считывать данные автоматом, а после уже разбирать что пришло. Но походу получиться больше геморроя, так что сделаю, либо на прерывании по выводу int запускать считывание DMA, либо вообще его в майне опрашивать полингом, и там уже запускать дальнейшие операции.
А подскажите, плз, как правильно объяснить 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)
А что за STM32? На той же STM32F103 обязательно должен быть кварц с нагрузочной способностью 6пФ (даже не рекомендация, а чёткое требование в даташитах/мануалах), хотя те же китайские платы на C8T6 идут с неправильным кварцем и конденсаторами в нагрузке, судя по мультиметру, где-то на 15пФ.
Я пока не заменил кварц и конденсаторы на правильные, вообще не мог понять, что не так с RTC - могут вообще не тикать, а берёшь плату в руку (наводки? земля?) - начинают, но с жуткой погрешностью.
А с нормальным кварцем - уход порядка секунды в сутки, да и тот можно скорректировать.
Я пока не заменил кварц и конденсаторы на правильные, вообще не мог понять, что не так с RTC - могут вообще не тикать, а берёшь плату в руку (наводки? земля?) - начинают, но с жуткой погрешностью.
А с нормальным кварцем - уход порядка секунды в сутки, да и тот можно скорректировать.
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="afz",url="/forum/viewtopic.php?p=3462001#p3462001"]И, кстати, как попроще глянуть (отладчиком), действительно оно не переключилось, или это у меня кварц поганый попался?[/uquote]Если кварц не включен, то на этой строке повиснете навсегда.
Код: Выделить всё
while(!(RCC->CR & RCC_CR_HSERDY));- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
[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-вой реализации.
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Вот не понимаю зачем гадать где там что само нагенерилось? Неужели так трудно самому включить кварц и PLL? Ну это же не USB-стек, тут всего то около 10 строчек кода если размашисто писать.
Любовь уповать на говнолибы, калокубы...Главное чтобы не изучать и не читать ничего, а потом форум зае...ывать вопросами. Буксуют на простейших вещах, включить альтернативную функцию, настроить тактирование....посмотреть регистр RCC_CR запущен ли внешний кварц и т.д.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Сообщения: 225
- Зарегистрирован: Сб янв 14, 2012 22:53:50
Как кто-то метко заметил однажды, не бывает плохих инструментов, бывают кривые руки (и все остальное).
И плохие инструменты есть, и кривые руки, и все остальное. И даже philosoraptor который решил поиграть в "Самый умный на форуме"
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Oxford:
Когда сам уже сто раз подсмотрел в том же CubeMX примеры инициализации периферии, понял принцип (AFIO/тактирование/NVIC) и написал один раз свой аналогичный код, который потом дублируешь в свои проекты, становится очень легко называть использованные инструменты калом и говном. Вроде как сразу ЧСВ повышается до over9000.
Когда сам уже сто раз подсмотрел в том же CubeMX примеры инициализации периферии, понял принцип (AFIO/тактирование/NVIC) и написал один раз свой аналогичный код, который потом дублируешь в свои проекты, становится очень легко называть использованные инструменты калом и говном. Вроде как сразу ЧСВ повышается до over9000.
В ранних версиях KEILа в файле system_stm32fxxxx легко можно было править настройку тактирования. Сейчас V5.23.0.0, и настройку провожу в первых строчках main. Также и в IARе.
Угу, та самая плата. А зачем такое требование к кварцам? Они же, наверняка, более редкие, да и дороже. Или это из-за необходимости генерации на 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)
Ну в самом развернутом виде например для 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;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 для регистров сделать. Но вот саму последовательность действий - почему бы и не подсмотреть.


