STM32 CAN шина. Часть 1. Настройка и странности HAL
ฝัง
- เผยแพร่เมื่อ 28 ก.ย. 2024
- Созданная при моем участии программа обучения STM32. Переходи по ссылке, регистрируйся, присоединяйся к команде - go.redav.onlin...
Первое видео из цикла про CAN на процессоре STM32.
Калькулятор - www.bittiming.c...
Продолжение ролика - • STM32 CAN шина. Часть ...
------------------------------------------
Поддержать автора канала можно перейдя по ссылке:
yoomoney.ru/to...
Или просто отправив перевод на Yandex.кошелек:
4100116547550395
А также переводом по номеру карты Сбер:
4279-3000-1033-0561
------------------------------------------
Большое Спасибо! Наконец-то толковая и необходимая лекция .
Очень интересный урок!!! Огромное спасибо что сделали его, давно хотел поучится использованию шины can. Ждём следующего урока ! Супер 👍
Спасибо, очень толково!
И какой смысл использовать гальванически развязанный драйвер и не использовать изоляцию?
Огромное спасибо!
Владимир Добрый день!!! Исходником не поделитесь?
Круто , я начинающий stmщик и хотел бы узнать сколько вы учились всему этому . И как была построена ваша лестница обучения ( всмысле не в начале а в конце вашего обучения какой она была)
Не хочу вас разочаровывать. Но по STM32 это что-то около 10 часов во время которых просто показали идеологию и где искать документацию. Все что нужно знать описано в Reference guide на процессор. Сколько там? Около 1300 страниц. Шикарная подробная книга. Лучший курс.
DipTrace cool :)
Восхитительно! Спасибо!
Владимир, здравствуйте! Вопрос что за plc контроллер использовался в видео? Меня интересует существуют ли plc на базе stm32 и какие. Спсибо
Это мой собственный контроллер, я его делал про него есть даже видео на канале.
@@VladimirMedintsev супер!!! Тоже собираюсь
Здравствуйте сколько максимум устройств могут быть одновременно в сети ?
до 255
@@VladimirMedintsev чисто паралельно или нужны ретрансляторы каждые 32 устройства как в rs485?
Это стандартная сеть CAN, ее характеристики и параметры есть в интернете в свободном доступе.
На вашем видео вы в схеме связываете логическую землю и землю шины, с какой целью это делается?
Так же в документации рекомендуют питания разделять, земли разделять. Насколько наводки в сети can отражаются на стабильности питания при условии что мы питание не разделили?
В данном конкретном контроллере это связывание земли вполне допустимо т.к. на входе питания контроллера есть блок питания с гальванической развязкой. А также гальваническая развязка по всем входам-выходам. Таким образом тот факт, что внутренняя земля контроллера соединена с землей шины ни на что не влияет. В принципе за полтора года эксплуатации партии этих контроллеров проблем замечено не было. Ну их и не должно возникнуть при таком построении питания честно говоря.
@@ilmzil Внутри контроллера показанного в видео есть плата - блок питания. Этот блок питания обеспечивает гальваническую развязку контроллера. Кроме того все входы-выходы имеют гальваническую развязку. Это позволяет соединить землю контроллера с землей CAN шины.
@@VladimirMedintsev понял, но поздновато. Спасибо за объяснение. Ваши видео очень полезны.
Так это у вас пример работы CAN c новой версией HAL никак не пойму
Эта актуальная на момент публикации видео версия HAL. А что не так?
@@VladimirMedintsev Здравствуйте еще раз спасибо что ответили. В старом CUBE и сегодня скачал новый CUBE проект собирается где HAL_CAN_Transmit() и HAL_CAN_Receive или я что то не то делаю
@@VladimirMedintsev Нашел! Надо было обновить еще отдельно пакеты на серии микроконтроллеров.
Необходимо включить клокирование...
Ну пожалуйста, хватит уже говорить подтягивающие СОПРОТИВЛЕНИЯ!!! Это подтягивающие резисторы, в конце концов. И что вообще за термин КЛОКИРОВАНИЕ, кто его придумал? Бедный, бедный русский язык, как же тебя искалечили...
Простите, но я буду говорить так, как мне удобно.
@@VladimirMedintsev говорить как хочу, делать как хочу и кодить как хочу. В общем буду делать говно везде где только это возможно
@@KoGIch Делай, кто тебе мешает.
@@VladimirMedintsev по голосу вроде бы не пиздюк, а ума так и не нажил.
ну так-то резистор переводится как сопротивление🤣
Крайне забавно смотреть на подобное "профессиональное схемотехническое решение". Изолированный CAN драйвер и общая земля - это просто выброшенные на ветер деньги.
Огромное спасибо.
@@VladimirMedintsev Пожалуйста, но хотелось бы более конструктивного ответа по существу.
@@shulginoleg6561 Да уже рассказывал я народу по этому поводу. Там дальше в модуле питания этого конкретного контроллера есть развязка от общего питания. И по питающему напряжению и по земле. Так, что контроллер вместе с драйвером в "свободном полете". Это не нарушает никаких норм и многими производителями используется. Да и в самом видео этот кусочек схемы приводится как пример а не как некая догма. Ну и видео не о схемотехнике гальванической развязки CAN интерфейса, а больше о его программировании. Но просто есть люди которым нравится язвить по поводу "профессиональное схемотехническое решение", мне такое является неприятным, потому что есть критика, а есть "забавно смотреть", и последнее не каждому человеку приходится по вкусу.
Надеюсь удовлетворил ваш интерес.
@@VladimirMedintsev , может по питанию и земле и есть развязка, но контроллер гальванически связан с "внешним миром" через сигнальные цепи CANL и CANH трансивера. Как я понял, это схема из реального проекта, а не для примера. В таком случае не важно, тема о схемотехнике, или программировании, если вы себя позиционируете как разработчик серьёзного уровня, то так делать неправильно. Вам про это хотели донести.
Приведите примеры, когда такое решение "многими производителями используется".
@@ТимофейАнтоненко-х4д Защищать и развязывать необходимо там, где вашему устройству что-либо угрожает. Но я вам так скажу, если люди в комментариях по детски упирают на слове "профессионально" но это вызывает улыбку.
Добрый день, эти хитрецы умудрились в версии 1.21 библиотеки HAL исправить НИЧЕГО кроме CAN. Мало того, рефернс мануал они не перевыпустили. Ситуация эта длится с марта 2018 года и на данный момент (7 11 18) не исправлена. Поэтому огромное желание, чтобы вы продолжили изучать CAN в новом API 1.21. Таких уроков на просторе интернета 0. Спасибо огромное! Жду новых серий. И просьба разобрать работу именно с прерываниями для полуения и отправки, тк все остальное предельно ясно.
Да, я же в видео и показал, что документация и библиотеки не соответствуют друг другу.
Будет время в будущем я сделаю видео про работу с прерываниями.
С добрым)
Уважаемые знатоки, подскажите как, такое, реализовать:
1. один контроллер, множество подчиненных
2. динамическое подключение/отключение подчиненных
3. подключение подчиненных по сути параллельное, выделенной шины нет, возможна любая топология подключения (все что можно сделать простой скруткой - звезды, кольца и их любые сочетания). Подчиненный подключается соединением "красный к красному..." без дополнительной мыслительной деятельности
4. количество подчиненных устройств ~30
5. дистанция контроллер-подчиненный до 5м
6. скорость общения контроллер-подчиненный 5-10 килобайт в секунду, 5 - приемлемый минимум, 10 - желательно выжать при максимальном количестве устройств
Сам склоняюсь к вариации rs-232:
1. контроллер по кругу опрашивает и управляет подчиненными устройствами.
2. подчиненные при подключении кричат в шину свой адрес, контроллер его запоминает и включает в цикл опроса/управления
Смущает:
1. как сделать арбитраж шины
2. сможет ли она при такой топологии работать на нужной скорости при нужном количестве устройств
По сути сложность у вас только одна - арбитраж шины. Могу предложить почитать как это сделано в модбасе и применить эти знания к своему проекту. Там и библиотеки готовые есть.
@@VladimirMedintsev Владимир, спасибо)
на модбас смотрел, смущает отсутствие терминаторов и так сказать "топология" сможет ли модбас пробиться через такое?
Спасибо за видео
Спасибо!
ОТличное видео , видео, понравилось.
Как называется это программное обеспечение для схематического рисования?
Если для рисования схем, то Diptrace.
Вопрос. Т.е. к примеру два микроконтроллера STM лежащих передо мной на столе могут по витой паре "общаться" по встроенной CAN шине. Тут всё ясно, это касаеться и других протоколов передачи. А вот тонкость с трансивером не очень понятна, что измениться если я к каждому микроконтролееру в данной ситуации добавлю по трансиверу( версия без гальванической развязки), схема усложнилась немного, а преимущества какие? Ситуация1: два STM по CAN трындят без трансиверов. Ситуация2: ОНи же но у каждого свой трансивер(без гальв. розв.). Есть ли разница? Спасибо большое за видео и ответ.
Ну причины почему обязательно нужно использовать трансивер по сути две. Первая заключается в обеспечении нормальных условий работы микроконтроллера, а точнее в том, чтобы оградить его нежные выводы от тех перенапряжений и бросков, что наводятся в линии связи. А вторая причина а том, что нагрузочная способность вывода МК ограничена и он не сможет потянуть большую линию. Это если кратко.
@@VladimirMedintsev Ага, пронял. Буду знать. Для новичков этот момент очень важен в понимании самой сути. Тоесть микроконтроллеры по CAN шине в идеальных условиях на небольшом расстоянии между собой чисто технически общаться могут. Но трансиввер, а темболее с гальванической развязкой обеспечит нежные лапки микроконтроллера от выхода из строя/наводок/нежелательных помех которые остануться в пределах трансивера. К тому же сам трансивер, будучи самостоятельной микросхемой имеет своё питание и возможность генерировать сигналы за счёт своих ресурсов а не за счёт слабых лапок микроконтроллера которые помоему 200 миллиампер умеют и всё.
5 (пять) миллиампер на ногу.
Более подробно о нагрузке ног в даташите всегда проверять надо.
Спасибо. Полезно!
Там по CAN выходили всякие разъяснения что-то вроде "HAL CAN API Migration". HAL новых переделывали все функции CAN, а старый код переставал работать :(((( У меня с первого раза что-то не получилось :((( Я в итоге сделал в CMSIS. Сейчас осваиваю линейку F4 - вообще не хочется там руками что-то делать :((( Буду пробовать HAL :(((((
Круто ! Подскажите, мне надо написать кан фильтр на Infineon 1404, но опыт есть только на avr. Вопрос: на инфине примерно такая же логика написания, как на стм32?
Спасибо!
Интересный калькулятор, только напрягает такой момент - чип тактируется от 8мгц кварца, работает на 72 мгц, АРВ1 периферия - на 36 мгц. Если в калькулятор забить 36 мгц, то для мегабита выдает 18 квантов и, соответственно, эта строчка не желтая, а темно серая. В то же время перед табличкой расписано, что во времена разработки казалось хорошей идеей использовать 16 квантов, а в наше время, якобы надо выбирать как можно большее число квантов. Вот и задумался - хоть строка и темно-серая, возможно она будет лучшей для самой большой скорости для короткой шины на пару метров? Или все же пойти на поводу калькулятора и срезать тактирование периферии АРВ1?
А вообще - хотелось бы без использования HAL &/|| SPL задействовать CAN.
11:24, 11:56 : это не моменты перехода сигнала, а моменты чтения состояния шины. Сильно режет на слух. Да к тому же может сбивать с толку новичков.
Как же все таки это прекрасно :) "если мы будем отлаживать наше устройство, опять таки, то есть и уже будет имеется какая-то шина, которую мы не хотим нарушить ее работу.. пока"
Добрый день. По стандартам can Подсказать можете?
0:50 то есть можно 2 мк подключить к друг другу без трансивера? Можете дать ссылку как это сделать?
Документация в виде reference manual чем не подходит???
А почему у гальванической развязки у вас земли вместе? В вашем варианте гальванической развязки нет. У вас просто согласовать уровней. 3.3 5
Здравствуйте, очень познавательные у вас видео, а не могли вы рассказать, как конфигурировать и написать код, только для отправки сообщений в CAN, без получения ответа о полученном пакете.
В видео об этом рассказано. Посмотрите его вторую часть.
@@VladimirMedintsev я смотрел, но я так думаю, либо я что то не так делаю, либо kielv5 отличается от вашей программы, и у вас совсем другие файлы. Кстати у меня stm32f103c8.
@pavlovalexey99 Ну разумеется, для вашего процессора библиотека HAL будет полностью отличаться. Там на самом деле ничего сложного нету. Разобраться можно. Принцип я рассказал.
@@VladimirMedintsev да тоже ещё раз пересмотрел, впринцепе мало чем отличается. Для меня сейчас задача, что то хотя бы отправлять в шину.
@@VladimirMedintsev а можете поделиться ссылкой на файл main.c
Если стоит выбор использовать ли RS-485 или CAN, при том, что все аргументы в пользу одной шины и второй равнозначны, Вы бы выбрали какую из этих двох?
Я бы выбрал CAN. Причина - я в ней больше разобрался. Т. е. потратив несколько недель я теперь не идеально, но приемлемо понимаю и могу отлаживать эту шину. В отличии от 485й. В ней я пытался разобраться, но там столько понаворатили киповцы и иже с ними, что тихий ужас. Так что пожалуй это единственная причина. Тут конечно же очень много зависит от назначения. Пром-автоматика конечно из совместимости лучше 485 а если что-то для себя то пожалуй выбирать правильнее по простоте. Что больше освоилось и понятнее.
А в остальном приемо-передатчики для обоих не дорого стоят. Дальность тоже приемлемая.
Если взять практически любой промышленный прибор с поддержкой сетей, то в первую очередь там будет RS-485.....
Конечно modbus rtu - очень гибкий интерфейс, относительно легко реализуемый , позволяющий работать как с сетью пром приборов так и конфигурировать или просто обмениваться с устройствами не обязательно рассчитанными для сетевой работы.
1:20 гальваническая развязка на iso1050 , a GND у Вас общий на схеме, это как ) ?
У меня появитлся примерно такой же вопрос когда схема была на экране.
Владимир, если хотите обсудить это с глазу на глаз, то могу дать свой email.
@@NickAlexeev А тут нечего обсуждать. На видео показана часть схемы, из нее люди пытаются делать какие-то выводы. Чтобы что-то доказать мне придется показать всю схему, но вот этого делать я не хочу. По этой причине буду улыбаться и читать сообщения от профессионалов считающих, что автор дурак. Впредь наука не показывать схемы даже частично.
@@VladimirMedintsev Вы серьезно )? я например так не думал, просто было интересно из чего Вы исходили когда так сделали...
@@ukrfoil На самом деле комментариев по поводу замкнутой земли было достаточно много. И рассказывать о том, что земля разомкнута блоком питания на соседней плате меня признаться утомило. Вся проблема получилась в избыточности.
@@VladimirMedintsev Воля Ваша. Я для того и предлагал с глазу на глаз, чтобы Вам не публиковать схему на весь мир.
За обзор CAN на STM32 полюбому спасибо. (В STM32 и CAN я новичок. Гальванические развязки делаю с 2002г в медтехнике.)
Clock Rate 8 - это частота HSE ?
Спасибо, хорошее видео
Нравитцоооо.
Здравствуйте! Хочу рулит по данной шине частотниками насколько данная шина помехозащищеённая ?
Сильно защищенная.
@@VladimirMedintsev Скиньте пожалуйста схему с гальваноразвязкой . Сюда mag88_88@ukr.net
Спасибо за схемку !
А что именно должно быть выставлено в клокировании APB1 в CubeMX? Не получается запустить stm32f103 с SN65HVD230. Пересмотрел ваши видео 2 раза. Пытаюсь отправить и через секунду получить сообщение в режиме loopback, но на чтении получаю ошибку (!= HAL_OK). Каким способом лучше искать ошибку?
У меня в проекте APB1 выставлен на 36 Мгц.
@@VladimirMedintsev APB1 peripherial clocks? Как оказалось, без настройки фильтров получение сообщений не проходит. После добавления фильтров получилось принять сообщение в режиме лупбек. Но принять сообщения на другом устройстве не получается - ничего не принимается. Как можно диагностировать такую проблему?
@@OlegBovykin Разумеется без настройки фильтров ничего не проходит. Об этом в референс мануале написано.
Попробуйте посмотреть на ошибки которые выдает контроллер и проверьте AutoRetransmission = DISABLE;
Я удивлен что это занимает столько времени, CAN не сложная периферия вообще-то.
@@VladimirMedintsev А как лучше посмотреть ошибки? Почему-то в дебаге я вижу значения выполнения функций CAN как undefined, например int rx_num = HAL_CAN_GetRxFifoFillLevel(&hcan, CAN_RX_FIFO0); Я уже перепаял трансиверы на TJA1050. Оказывается, в режиме loopback процессору не требуется трансивер совсем: сообщения отправляются и принимаются без трансивера вообще. Может быть есть какие-то safe defaults по таймингам и скорости с которых стоит начинать?
@@OlegBovykin Вы не обижайтесь, пожалуйста, но ваши вопросы относительно "не вижу значения выполнения функций..." свидетельствуют о том, что вы плохо разобрались со средой программирования, а фраза "оказывается, в режиме loopback" говорит о том, что схватились за программирование не прочитав reference manual. Я не могу ответить на все имеющиеся у вас вопросы чисто физически. Рано или поздно вам придется прекратить задавать вопросы и сесть читать документацию. Там вся интересующая вас информация есть.
14:50 обещали поделится своим опытом насчет AutoRetransmission )
Считайте что обманул.
@@VladimirMedintsev если Вы реально хотите поделится опытом , то видео 3 про саn необходимо ибо много не до сказано ))
А так Вам решать..спасибо хоть за то что рассказали про саn).
Нет никакой необходимости в 3м видео на эту тему. Рассказано более чем достаточно, чтобы получился рабочий пример, а до всего остального специалист должен дойти самостоятельно. Опыт именно личный опыт является крайне важной составляющей.
Нет ну реально, мы же не требуем в ресторане чтобы нам пищу подавали уже пережованной, вот здесь такой же принцип.
@@VladimirMedintsev Возможно Вы правы, - это Ваш заработок... мне придется идти по вашему пути и потратить много времени на эксперименты )).. (я без претензий).
просто просмотрел много Ваших видео много в них интересного, видно Ваше желание поделится (разрекламировать себя - в хорошем смысле) и обратное уже коммерческое там пропустил или не досказал ..))) Из за этого видео какие то не полные. получаются....
Но это Ваш ютуб-канал и Вам решать))
Еще раз я без претензий и спасибо Вам за видео, необходимую информацию для старта они дают. -этим они ценны.
@@ukrfoil Это не обучающие видео, это не более чем блог. Более того, уже 6 месяцев как я вообще не призываю кого-либо подписываться на канал. Так, что слушатели могут сами решать или смотреть видео без тонкостей, либо искать канал, где рассказывают больше.
Классное видио - всё понятно и профессионально.
Клокирование блджат.
А на сmsis?
А смысл?
@@VladimirMedintsev мне хал не очень понятен.LL понятнее.
Пишите на LL или CMSIS не вижу не малейшей проблемы.
@@VladimirMedintsev спасибо
@@VladimirMedintsev Спасибо за уроки. а урок по цап есть?