Перейти к содержанию

STM32 для чайника


ART_ME

Рекомендуемые сообщения

@Гость Гость Регистр, это что-то типа ОЗУ (если проводить аналогию), нет ограничения на кол-во операций с регистрами. Пишите в них столько сколько нужно, не думайте о ресурсе регистров)

Ссылка на комментарий
Поделиться на другие сайты

Ребята, подскажите, почему пока я не сброшу EXTI->PR, прерывания таймера не отрабатывают? Если перед обработкой внешнего прерывания в EXTI->PR ставлю 1, прерывание по таймеру работает. Т.е. из обработчика внешнего прерывания вызывается таймер и прерывание таймера не отрабатывает, пока не сброшу EXTI->PR.

Изменено пользователем Гость5
Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

@Гость5 Все предельно просто EXTI->PR регистр сброса флага прерывания. т.е. если в обработчике не сбрасывать флаг вы не выйдете из прерывания, а т.к. у EXTI приоритет выше, то и другой код не выполняеться. Его и так нужно сбрасывать. 

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

если флаг не сбрасывать, то по выходу из прерывания сразу же будет выполнен новый вход. И процык просто повиснет на обработчике в бесконечном цикле. Так что ответ - выходит, но сразу же заходит. Остальное я думаю понятно и так

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

11 час назад, Гость5 сказал:

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

Вы путаете флаг требования (request) и бит разрешения. В контроллере прерываний ядра они формируют запуск перехода по вектору через вентиль И. Сиречь, когда есть оба. Но требование возникает аппаратно, а разрешение устанавливается программно. Если особо не указано, что гасить флаг не требуется (так бывает, когда он сбрасывается иными действиями, например чтением определенного ассоциированного с флагом регистра), то флаг прерывания следует сбросить В НАЧАЛЕ обработчика, дабы не потерять событие прерывания, возникшее во время исполнения обработчика.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

А если мне надо на время прекратить формирование новых прерываний, правильно ли я понимаю, что для этого надо внести соответствующее значение в регистр ICER[x]?

Изменено пользователем Гость5
Ссылка на комментарий
Поделиться на другие сайты

@Гость5 А как вы разрешили прерывания EXTI? Вот точно также, только наоборот запрещаете.

Пути аж два 1.запретить в модуле периферии. 2. запретить в контроллере NVIC. в вашеи случеа это EXTI->IMR, второй да ICER[x], только если вы плохо понимаете что в этом регистре то лучше через функцию CMSIS. NVIC_DisableIRQ()

Ссылка на комментарий
Поделиться на другие сайты

Столкнулся с проблемой c постоянно занятым I2C на STM32f103. Она описана в эратте (п 2.14.7), и тут обсуждалась. И я о ней знал, не знал только к чему это может привести если работать через HAL. Суть проблемы: при старте мк аналоговый фильтр блокирует флаг I2C_FLAG_BUSY, и тот не может сброситься. В итоге I2C всегда занят. Что получается при работе с хал:

Проверяем состояние I2C : HAL_I2C_GetState(&hi2c1), если у вас ничего не передаётся в прерывании или по dma, то функция возвратит HAL_I2C_STATE_READY (это просто поле структуры I2C_HandleTypeDef которым управляет сам ХАЛ, к флагу I2C_FLAG_BUSY не имеет никакого значения). Функция сказала что всё хорошо, будем отсылать данные в прерывании с помощью функции HAL_I2C_Master_Transmit_IT(). По сути закинули данные и пошли дальше по циклу основной программы. Но есть небольшой нюанс HAL_I2C_Master_Transmit_IT() ждёт в своём теле, пока сбросится флаг I2C_FLAG_BUSY. А он не сбрасывается так как проявилась проблема (п 2.14.7). У функции ожидания флага I2C_WaitOnFlagUntilTimeout() есть таймаут. По истечению его, она выдаст HAL_TIMEOUT. Но таймаут на ожидание I2C_FLAG_BUSY 10 секунд!!! В итоге вы хотел отправить данные по I2C в прерывании, и застряли в основном цикле на 10 секунд. Браво хал!!! Если бы это проявлялось часто, я бы выловил это за 2 минуты. Но случалось такое крайне редко, словил в итоге случайно... Вот такой вот опыт, надеюсь будет полезен кому то. 

Ссылка на комментарий
Поделиться на другие сайты

так ерата не только для хала пишется. Отключать надо аналоговый фильтр при работе с I2C, хоть на асме пиши

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Да ясно, ерата  для контроллера пишется. Я акцентирую внимание на том, что при попытке отправки данных по I2C в прерывании, можно застрять в основном цикле, при чём на долго.

Изменено пользователем GOR23
Ссылка на комментарий
Поделиться на другие сайты

В 13.02.2018 в 13:47, mail_robot сказал:

так ерата не только для хала пишется. Отключать надо аналоговый фильтр при работе с I2C, хоть на асме пиши

Блин ну детский сад прямо, а кто это утверждал то?)) Тема хоть и для не опытных, но люди разные заходят, зачем на каждый комментарий что-то подобное отвечать.

Ссылка на комментарий
Поделиться на другие сайты

@dosikus да есть недочеты. Когда то ловил косяк с обработкой ошибок на уарте, тоже не очень приятно было. Но вообще куб экономит времени сильно... Для протоипирования самое оно, ну а с серийным прибором конечно спорный вопрос. Будут и плюсы и минусы.

Изменено пользователем GOR23
Ссылка на комментарий
Поделиться на другие сайты

парадокс в том, что когда прототип заработает нормально на хал, уже не будет смысла переписывать код

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Парадокс в том , что пытаясь облегчить свою участь используя калокуб, нубы наоборот усложняют себе жизнь.

    Да и вместо того что бы использовать всю прелесть периферии , получают в итоге софтовое ногодрочерство.

  Собственно все закономерно - при снижении порога вхождения , снижается уровень самих разработок...

Ссылка на комментарий
Поделиться на другие сайты

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

в STM32 нет такого понятия, как макетирование. Есть задача и есть выбор инструмента. Для многих задач (очень многих) и хала с калокубом достаточно

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Hardware Abstraction Layer (HAL, Слой аппаратных абстракций) — слой абстрагирования, реализованный в программном обеспечении, находящийся между физическим уровнем аппаратного обеспечения и программным обеспечением, запускаемом на этом компьютере. HAL предназначен для скрытия различий в аппаратном обеспечении от основной части ядра операционной системы, таким образом, чтобы большая часть кода, работающая в режиме ядра, не нуждалась в изменении при её запуске на системах с различным аппаратным обеспечением.

 

http://www.st.com/content/ccc/resource/technical/document/user_manual/2f/71/ba/b8/75/54/47/cf/DM00105879.pdf/files/DM00105879.pdf/jcr:content/translations/en.DM00105879.pdf

чтиво первое для прочтения

Изменено пользователем Oxford
Ссылка на комментарий
Поделиться на другие сайты

давненько тут так никто не капитанил. Медаль "Кэп года" отходит оксфорду

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

10 часов назад, mail_robot сказал:

давненько тут так никто не капитанил. Медаль "Кэп года" отходит оксфорду

Да еще и по всем темам за последние пол года одновременно :lol:

Изменено пользователем MasterElectric
Ссылка на комментарий
Поделиться на другие сайты

Может кто-нибудь подсказать, как производить проверку на корректность работы АЦП? Т.е. интересует, чтобы вдруг не случилось так, что АЦП стал выдавать неправильные значения, может просто подвис (значения АЦП не обновляются и висят постоянно старые значения) или еще что-то, в результате чего все устройство стало работать неправильно. Как в таком случае правильно производить контроль?

Ссылка на комментарий
Поделиться на другие сайты

а с чего бы он вдруг подвис? Или он у вас под виндой работает?

У АЦП есть флаг окончания преобразования. Можно по его состоянию обнулять тот же WDT если преобразования регулярные. Или контроль таймаута вести. Еще вариант - использовать только ручной запуск, если значения надо получать не сильно часто. Если почитать мануал и хорошо подумать, то способов наизобретать можно. Вопрос только - для чего так осторожно дуть на воду?

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...