0 / 0 / 0
Регистрация: 19.01.2017
Сообщений: 13
|
|||||||||||
1 | |||||||||||
STM32F030C6T6 Режиме захвата19.11.2023, 18:11. Показов 605. Ответов 32
Метки нет Все метки)
(
Привет всем!
Сразу прошу не посылать в бескрайние просторы интернета. Изучал и данный раздел в котором размещаю эту тему. Прошу, помогите! Сил нен уже. Попалось устройство в котором необходимо реализован генератор прямоугольных импульсов с изменяющейся частотой (датчик), которую необходимо измерять. Схемотехнически устройство реализовано так, что сигнал поступает на PA4(TIM14_CH1). Порядок частот - мегагерцы. Для проверки я взял частоту из ремапа от MCO. И вот теперь, как я только не пробовал частоту выше 187,5 кГц не получается измерить. Не считает переполнения, почему понять не могу. Не силен в работе с прерываниями. Вообще с микроконтроллерами дел почти не имел. Получалось, но были задачки простые. Понимаю, что что-то не так, но разобраться не получается. Прошу помогите. Делал в STM32CubeIDE. Текст программы: main.c
Прошу понять и простить ![]() P.S. В Keil таже программа позволила считать то 375 кГц
0
|
|
19.11.2023, 18:11 | |
Ответы с готовыми решениями:
32
Таймер в режиме захвата Каскадное включение таймеров в режиме захвата [РЕШЕНО] f030 таймер в режиме захвата Таймер в режиме захвата. Не могу понять что не так |
0 / 0 / 0
Регистрация: 19.01.2017
Сообщений: 13
|
||||||
19.11.2023, 20:58 [ТС] | 3 | |||||
Вот инициализация таймера
0
|
0 / 0 / 0
Регистрация: 19.01.2017
Сообщений: 13
|
||||||
20.11.2023, 13:54 [ТС] | 5 | |||||
Содержимое файла tim.c сгенерированного CubeIDE.
Вроде как MX_TIM14Init() вызывает HAL_TIM_Base_MspInit() Вот я и не понимаю как правильно проинициализировать и обработать прерывания. Вроде как у 14 таймера одно глобальное. Тут к сожалению я уже запутался.
0
|
175 / 160 / 29
Регистрация: 14.02.2013
Сообщений: 1,365
|
|
20.11.2023, 15:54 | 6 |
dm_sinner, почему думаешь что STM32F030C6T6 сможет в CubeIDE обработать с выше 187,5 кГц?
0
|
0 / 0 / 0
Регистрация: 19.01.2017
Сообщений: 13
|
|
20.11.2023, 17:25 [ТС] | 7 |
Я пробовал ту же программу, только обработку прерывания засунул перед IRQHandler и тсчитало 375кГц. Так как один раз срабатывало переполнение. При отладке алгоритм работает правильно. Но в реале в прерывания переполнения не заходит. Тут проблема видимо в обработке прерываний и правилтноц последовательности. Захват срабатывает и перехватывает и переполнения не считает. Импульсы считает но не заходит в обработчик от переполнения, где подсчет переполнений ведется.
0
|
175 / 160 / 29
Регистрация: 14.02.2013
Сообщений: 1,365
|
|
20.11.2023, 17:58 | 8 |
dm_sinner, почитай
https://istarik.ru/blog/stm32/118.html
1
|
Маздаененавистник
|
|
20.11.2023, 19:58 | 9 |
Ну зачем там прерывания, если у таймеров есть и счетный вход, и вход compare-capture? [censored] портянки не читал, т.к. ничего в этой жути все равно не понять. Достаточно правильный код написать. Без этой дряни.
В простейшем случае, если импульсы - обычный меандр с 50% заполнением, достаточно их воткнуть на счетный вход и считать количество колебаний за определенное время (для этого нужно использовать связь со второго таймера; можно вообще вторым таймером при помощи DMA куда-то в буфер сохранять текущее значение CNT, а потом перезапускать ведомый таймер). Так как таймеры там всего-то 16-битные, то дальше 65535 досчитать не удастся → нужно перестраивать частоту ведущего таймера. Скажем, начать с малых времен - если насчитываем слишком мало, то увеличивать частоту вдвое, потом - еще раз вдвое, и так до тех пор, пока CNT ведомого не будет в интервале 20000..40000 - по этому числу и вычисляем частоту. Точность получим не хуже 0.01%.
1
|
175 / 160 / 29
Регистрация: 14.02.2013
Сообщений: 1,365
|
||||||
20.11.2023, 20:19 | 10 | |||||
Eddy_Em, верно. Автор напихал в колбек переменных как фантиков, а ведь у этих несчастных STM очень медленная скорость работы с памятью.
1
|
0 / 0 / 0
Регистрация: 19.01.2017
Сообщений: 13
|
|
20.11.2023, 22:27 [ТС] | 11 |
Читал, и вроде как понятно, но что делать когда у тебя только один General-purpose таймер TIM14?
Добавлено через 2 минуты Всем спасибо, ваши подсказки наталкивают на мысль. Буду разбираться. Напомню что у меня только один таймер, это General-purpose TIM14. Я так понял там не все фишки о которых вы пишите можно реализовать
0
|
Маздаененавистник
|
|
20.11.2023, 22:37 | 12 |
А куда остальные девались? Все заняты? В этом случае стоит выбрать другой микроконтроллер. TIM14 даже DMA пинать не умеет - нафиг этот график? А на прерывания такие накладные расходы, что даже на несчастной сотне килогерц МК будет большую часть времени в прерывании сидеть…
Не по теме: Судя по стилю программирования, вы, батенька, или пытаетесь "галопом по Европам" войти в МК (не бывает такого!), или даже этого не пытаетесь!
0
|
0 / 0 / 0
Регистрация: 19.01.2017
Сообщений: 13
|
|
21.11.2023, 11:54 [ТС] | 13 |
Уважаемые форумчане. Спасибо за ваши ответы из которых я понял, что я ничего не знаю, не понимаю, пытаюсь "галопом по европам" войти в мир МК и т.п. Но дело в том, что я не пытаюсь войти в мир МК, по крайней мере сейчас. Сейчас мне необходимо решить конкретную задачу на конкретной железке на которой стоит конкретный микроконтроллер. Сигнал приходит на ножку pa4 которая подключена к TIM14_CH1. Или есть возможность завести сигнал на другие таймеры? Я просил совета как можно выйти из положения. Или не смогу я решить задачу? А то, что нужно сначала пойти учиться я знаю. Но времени нет заново все осваивать. К сожалению. От доброго совета не откажусь. Что дурак знаю сам. Спасибо
0
|
Маздаененавистник
|
|
21.11.2023, 12:33 | 14 |
![]() РешениеНе по теме: Дать по голове разработчику и заставить все переделывать нормально. В общем, если нет схемотехника, то лучше сразу отказаться от выполнения этой задачи. Либо самому придется еще и схемы рисовать, платы разводить, паять прототипы… Ну и да, если не хочется понимать, как там что работает, то лучше вообще уйти из этой области! Уж за использование HAL я своих студентов больно бью!
1
|
175 / 160 / 29
Регистрация: 14.02.2013
Сообщений: 1,365
|
|
21.11.2023, 12:34 | 15 |
![]() Решение
dm_sinner, в STM32CubeIDE переход по вектору прерывания происходит через жирную функцию которая тратит ресурсы МК на саму себя. По сути если бы перейти в прерывания как то сразу и в нем остановить регистр таймера потом просто поднять флаг и уже по этому флагу провести все расчёты в основном цикле программы.
1
|
175 / 160 / 29
Регистрация: 14.02.2013
Сообщений: 1,365
|
|||||||||||
21.11.2023, 15:01 | 16 | ||||||||||
Есть mikroC PRO for ARM демо бесплатно. В ней есть ассистент создания точки входа прерывания по вектору без всякого мусора .
В
1
|
0 / 0 / 0
Регистрация: 19.01.2017
Сообщений: 13
|
|
21.11.2023, 17:14 [ТС] | 17 |
Спасибо. Может буду брать скальпель в руки
![]() ![]() Добавлено через 2 минуты Товарищи, всем спасибо за помощь и подсказки. Буду пробовать решать задачу. Как решу отпишусь. Кстати пробовал реализовать код из RM. Тоже самое как и на HAL. Странно.
0
|
Маздаененавистник
|
|
21.11.2023, 17:58 | 18 |
dm_sinner, на сайте ST есть сниппеты для F0, сам пользуюсь (ну и у меня или других можно подсмотреть). Честная инициализация и работа с регистрами без убогих прослоек.
А то, что ST свой HAL продвигает, связано лишь с упертым мнением забугорных "товарищей", что каждый работник должен иметь крайне узкую специализацию и не лезть в поле другого (иначе он "лишает того работы"). Поэтому разработчик под МК обязан быть полным нулем в программировании и вместо решения задачи наиболее логичным способом, пользоваться чужими прослойками (которые сильно усложняют разработку, а тем более дальнейшую поддержку кода + заставляют под простые задачи выбирать значительно более дорогие МК).
0
|
175 / 160 / 29
Регистрация: 14.02.2013
Сообщений: 1,365
|
|
21.11.2023, 18:15 | 19 |
Eddy_Em, Но самое интересное ST обязана выпустить плагин, а лучше программку для конфигурации клока.
0
|
Маздаененавистник
|
|
21.11.2023, 18:43 | 20 |
Не по теме: С чего бы гости понаехали? ST обязана сопровождать свою продукцию подробной документацией. Всë — больше ничего она не обязана! А все эти [censored] (увы, меня тут банят за называние слов своими именами), что она впаривает, я считаю, мягко говоря, вредительством. А, сорян, не понял сарказма…
0
|
21.11.2023, 18:43 | |
21.11.2023, 18:43 | |
Помогаю со студенческими работами здесь
20
Таймер в режиме захвата Настройка таймера в режиме захвата STM32 Режим захвата Режим захвата Почему не работает виртуальный компорт в режиме отладки, а в нормальном режиме работет Два роутера в режиме моста + usb камера в режиме флешки Различные значения ComboBox в режиме отладки и в режиме обычного запуска Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |