Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

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

Пн май 16, 2022 15:23:29

Для дрона уже простая абдурина не сгодится: там и флоаты нужны, и уйма всяких интерфейсов, и скорость вычислений…
Минимум какой-нибудь STM32F303. Хотя, понятное дело: абдуринщик и STM32 может по-абдурински "погромировать", достанет из широких штанин калокуб, сгенерит говнокод, накидает туда портянки другого выкачанного из интернета говнокода — вуаля!

Как показали боевые действия в Сирии и на Украине, при встрече с современной эшелонированной ПВО срок жизни дрона очень мал, поэтому абдурина очень хорошо подходит для таких одноразовых и маложивущих объектов.
Так что, Eddy_Em, забудь о вечном и не дуй щёки, а учись быстро делать изделия-презервативы со сроком жизни в несколько недель.

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

Пн май 16, 2022 15:25:36

Даже "изделия-презервативы" можно сделать аккуратно и качественно. А не "на скетчах и шилдах"!

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

Пн май 16, 2022 15:32:32

Боюсь что ваша точка зрения лечится только электичеством.
Мне на этот бред ответить нечего.
Называете меня хамом, а теперь найдите где я первый хамил.
Хотя мне это не интересно, варитесь в этой жиже сами.
Смотрю вам это намного интересней обсуждать.
И да, такого хамского отношения я не видел нигде на другом языке, это всё таки воспитание.

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

Пн май 16, 2022 15:48:02

Даже "изделия-презервативы" можно сделать аккуратно и качественно. А не "на скетчах и шилдах"!

В таких изделий основными критериями качества являются скорость создания изделия и его дешевизна, а это поле игры абдурины.

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

Пн май 16, 2022 16:14:03

tonyk, ну, не сказал бы! Иной раз как посмотришь на среднедеклассированного абдуринщика или калокубера: когда нормальный разработчик уже запилил бы изделие, этот третью неделю сидит и методом тыка пытается свою железяку заставить делать то, что ему надо!
Эти две категории считают чтение документации каким-то жесточайшим видом наказания. А уж написать какой-то код самостоятельно — да вы что?!! Такие же [censored] встречаются и в среде "разработчиков": это всякие "веб-мартышки", "питонокодеры" и прочие… Хорошо хоть, в линуксе таким делать нечего: они быстро сваливают оттуда на свою гребаную мастдайку.

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

Пн май 16, 2022 16:33:20

Концепция HAL - на самом деле очень даже правильная. В конечном счете, мы все приходим к такой концепции. Навряд ли кто пишет в main GPIOA->BSRR = 1. Нет, напишите Relay(MOTOR, ON), а уже в Relay напишите это GPIOA... после выбора конкретного реле и конкретного действия. И это совершенно нормально - абстракция уровней, компоновка текста программы по функциональной принадлежности. И чем объемнее программа, тем больше структурности она требует.

Для дрона уже простая абдурина не сгодится:

Это для квадрокоптера с четырьмя высокоскоростными пропеллерами и автостабилизацией не сгодится. А для БПЛА (беспилотник который) - еще как сгодится! Да они так и делаются - радиоканал, ардуино-шилды жипиэс, 9-осевой датчик положения в пространстве с барометром и термометром, сервомоторы. Более там ничего и не нужно. Аэрофотосъемка - обычный фотоаппарат с выведенным на транзистор контактом внешнего спуска затвора. БПЛА пилотируется дистанционно.
Последний раз редактировалось НовыйДень Пн май 16, 2022 19:01:26, всего редактировалось 1 раз.

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

Пн май 16, 2022 16:54:48

Концепция HAL - на самом деле очень даже правильная.

НовыйДень, ты не понял суть проблемы.
Проблема в том, что сейчас на Ардуино и ХАЛ выросло поколение погромистов, не приученных читать документацию, изучать архитектуру и работу "железа" и софта, а умеющих только быстро и бездумно тыкать мышкой. Они привыкли рыться в Инете в поисках скетча или скрипта, а не создавать самим. Зато они заваливают форумы тупыми вопросами, а не получив ответа поливают всех дерьмом.
Я не против, когда люди пользуются чьими-то наработками, для того мы тут и общаемся. Я не против графических средств программирования, но я против, когда человек после трёх дней тыканья мышкой в Кубе обзывает меня нехорошими словами за то, что я не смог/ не захотел ему объяснять то, что написано в документации.
К сожалению, такой подход очень характерен для пользователей Куба и Дуньки, поэтому темпераментные натуры как уважаемый Eddy_Em не без оснований бурно реагируют на слова "Куб" и "Ардуино", изрыгая на них поток колкостей и неприличных слов.

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

Пн май 16, 2022 17:07:08

Да эту то суть проблемы я давно знаю :) Ардуинщики и халоводы почти никогда не читают мануалов. С другой стороны, если есть например библиотека DSP с уже написанными аналитическими функциями, то грех ими не воспользоваться, не шибко то вникая в то, как они работают. И многие из нас пользуются вай-фай и или блютуз-модулями, не вникая в подробности стеков и прочей лабуды. Желающих ковыряться с радиомодулем в какой-нить ESP чето как-то не очень то есть. И даже STM32W55 как-то не получила большой популярности. В некотором роде это тоже ардуинство - взять готовый радиомодуль вместо того, чтобы в одном корпусе микросхемы сделать всё нужное за раз. Но, блин, готовый модуль - это быстро, удобно и без проблем.
Ну а Эдди - хех, а покажите, на что Эдди может спокойно реагировать? :))) У него лет 10 одна и та же нервная реакция с анальным словарным запасом на любую тему, это его жизненная позиция - нервироваться на любой раздражитель.

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

Пн май 16, 2022 18:01:37

но я против, когда человек после трёх дней тыканья мышкой в Кубе обзывает меня нехорошими словами за то, что я не смог/ не захотел ему объяснять то

Вас никто не обзывал из за того что вы чего то не хотите, вообще если честно наплевать на это.
Вас обзывали за ваше хамство. А вашу бесполезность можете обсудить со своим психологом.

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

Пн май 16, 2022 18:54:43

Как показали боевые действия в Сирии и на Украине, при встрече с современной эшелонированной ПВО срок жизни дрона очень мал
Какой бы эшелонированной ни была бы оборона, но иногда и крейсера тонут. 8)

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

Пн май 16, 2022 19:01:56

Эшелонированная оборона в теме:STM32 новичку в ARM что к чему
Ска-это дно

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

Сб май 21, 2022 11:10:41

Коллеги, подскажите, как правильно реализовать тайм-аут приема данных через железячный USART1 в STM32F103. Проблема вот какая: МК подключен к компьютеру через USART1. Когда компьютер отправляет символ микроконтроллеру, срабатывает прерывание USART1 и я забираю символ из USART1->DR. Команда от компьютера должна состоять из 8 символов, то есть прерывание должно сработать 8 раз. Но если мы получили только, например, шесть из 8 символов, контроллер бесконечно будет бесконечно ждать остальные, так как работает через прерывание. Хочу добавить сюда тайм-аут приема. Видел, что люди делают так: они при приеме первого символа обнуляют SysTick, и при следующем срабатывании прерывания смотрят - если натикало больше, чем надо, выдают ошибку. Но в таком случае о факте таймаута компьютер узнает только после приема первого опоздавшего символа. А мне нужно сделать так, чтобы сообщение об ошибке таймаута выдавалось на комп сразу же после таймаута, то есть не в прерывании USART1. Я беру таймер TIM4, настраиваю ARR на нужную задержку, и ставлю приоритет прерывания таймера выше приоритета USART1. По задумке, прерывание таймера должно блокировать прерывание USART1, обнулять счётчик принятых символов USART1 и выдавать ошибку на комп. Но здесь мне мешает Interrupt Nesting. В случае срабатывания прерывания USART1 по опоздавшему символу, и после того, как прерывание таймера отработало, контроллер возвращается не в основной цикл программы, а по стеку в предыдущее прерывание USART1.... в котором написано, что "если счётчик символов равен нулю, то запустить таймер таймаута...". Счётчик символов, который мы только что сбросили как раз в 0 в прерывании таймера таймаута. И начинается бесконечное прыгание из одного прерывания в другое. Так вот, вопрос: в микрочипах можно было вообще отключить Interrupt Nesting, оставив только приоритеты, может, здесь можно также? Заранее спасибо.

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

Сб май 21, 2022 11:49:21

Может, вам поможет прерывание по Idle? Я, правда, таким не пользовался, так что подробностей не знаю.

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

Сб май 21, 2022 11:59:53

Lum1noFor, если команда - ровно 8 байт, можно и DMA использовать. Приняли первый символ, засекли время и запустили прием остальных. Если через N миллисекунд DMA ещё ждёт - тайм-аут

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

Сб май 21, 2022 12:20:34

В F103 нет прерывания по Idle. Так что, работа с таймером из прерываний.

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

Сб май 21, 2022 14:54:03

8 бит команду я привел только для примера в описании принципа работы. В реальном варианте команда состоит из 10 бит. С DMA я работать не умею, на разбирательство уйдет много времени, так как я пишу полностью на регистрах, без HAL или чего-то подобного. Поэтому DMA пока отпадает. Единственное, что я ещё не попробовал - это насильно сбросить флаг прерывания USART1 сразу же после входа в него. В обычном режиме этот флаг сбрасывается сам после чтения из регистра USART1->DR. Есть шанс, что контроллер увидит, что прерывание уже "отработало" и не нужно в него возвращаться по стеку. Доберусь до компьютера в понедельник - проверю.

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

Сб май 21, 2022 15:48:09

DMA тут особо то и нафик не нужен. Хотя конечно вам надобно его изучить, там не сложно. Но в конкретно этом примере он как бы что он есть, что его нет, не важно.

В F103 нет прерывания по Idle.

Чой-то нет? Есть! RM0008:
Изображение

Idle character
When an idle frame is detected, there is the same procedure as a data received character
plus an interrupt if the IDLEIE bit is set.
(При обнаружении состояния Idle выполняется такая же процедура, как и при нормальном приеме, плюс прерывание IDLEIE, если оное разрешено).

Bit 4 IDLE: IDLE line detected
This bit is set by hardware when an Idle Line is detected. An interrupt is generated if the
IDLEIE=1 in the USART_CR1 register. It is cleared by a software sequence (an read to the
USART_SR register followed by a read to the USART_DR register).
0: No Idle Line is detected
1: Idle Line is detected
Note: The IDLE bit will not be set again until the RXNE bit has been set itself (i.e. a new idle
line occurs).
(Этот бит устанавливается аппаратно при обнаружении состояния Idle (свободная линия). Прерывание генерируется если бит IDLEIE=1 в регистре USART_CR1.
Сброс бита IDLE методом чтения регистра состояния SR и регистра данных DR)


Вначале после запуска UART и разрешения приема через интервал полного байта будет обнаружено состояние Idle и сгенериурется прерывание по этому событию. В этом прерывании нужно сбросить счетчик принятых байт на 0 (или запустить канал DMA на ожидание приема нужного числа байт). Сбросить бит состояния Idle как выше написано. Затем принимать байты в прерывании или по DMA. Когда внешнее устройство прекратит передачу, оно освободит линию и будет детектировано состояние Idle снова. Снова произойдет прерывание, и в нем проверяем, сколько байт принято - либо через программный счетчик, либо через счетчик CNTR в DMA (он считает назад до 0).
Если приняты не все байты, можно считать, что произошел разрыв передачи пакета. Дальше уже как хотите - либо целиком отбросить пакет, как неполный, либо запустить таймер и ждать какое-то время (тайм-аут).
Но обычно в пакете все байты передаются неразрывно. Тут уж надо знать конкретную ситуацию, как конкретно ведет себя передающее устройство.
Так же, коммуникация через UART обычно подразумевает некоторые специальные символы (из набора ANSI) для обозначения начала и конца пакета.

. В обычном режиме этот флаг сбрасывается сам после чтения из регистра USART1->DR. Есть шанс, что контроллер увидит, что прерывание уже "отработало" и не нужно в него возвращаться по стеку. .

Эммм. чота я не понял момента. В мануале сказано:

In single buffer mode, clearing the RXNE bit is performed by a software read to the
USART_DR register. The RXNE flag can also be cleared by writing a zero to it. The
RXNE bit must be cleared before the end of the reception of the next character to avoid
an overrun error.
(Сброс бита RXNE выполняется программным чтением регистра DR, либо записью 0 в этот бит.
Бит RXNE должен быть сброшен до момента окончания приема следующего байта, чтобы не произошла ошибка переполнения приемного буфера)

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

Сб май 21, 2022 17:50:09

если я правильно понял расклад,
запускайте таймер при приеме первого байта, а при приеме последующих обнуляйте таймер;
пока байты приходят с приемлемой паузой - прерывания от таймера не будет.

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

Сб май 21, 2022 18:06:30

IDLE- это обрубок, то, что остаётся у несчастного после кастрации.
За неимением лучшего, использовал его при реализации Модбас, работающем с использованием DMA. По-идее, IDLE задуман как детектор ошибок для Модбас, а нормальный UART, помимо IDLE, содержит ещё RTO. Если предполагается активное использование UART для коммуникаций, то я бы взял МК с полноценным UART. В F1 и F4 таких нет. В остальных надо внимательно смотреть. Как правило, это старшие МК в линейках. Кстати, RTO, если не ошибаюсь, идёт в комплекте с блоком автоуправления сигналом DE трансивера для RS-485.

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

Сб май 21, 2022 18:14:40

Чой-то нет? Есть!
Это не тот idle, что нужен. В F103 только таймер.
Ответить