STM32 CAN шина. Часть 2. Фильтрация и демонстрация работы
Вставка
- Опубліковано 15 жов 2024
- Продолжение видео о работе CAN шины на процессоре STM32.
Первый видеоролик доступен по ссылке - • STM32 CAN шина. Часть ...
------------------------------------------
Поддержать автора канала можно перейдя по ссылке:
yoomoney.ru/to...
Или просто отправив перевод на Yandex.кошелек:
4100116547550395
А также переводом по номеру карты Сбер:
4279-3000-1033-0561
------------------------------------------ - Наука та технологія
Как здорово, что видео выложено 4 года назад, а понадобилось только сейчас. Канал прям кладезь знаний по STM32 👍
Доброго времени суток. Все красиво и даже казалось бы понятно при просмотре. Но при написание чего то своего не хватает шпаргалки для посмотреть. Огромная просьба к Владимиру и другим авторам. Выкладывайте файлы проекта под видео. Так проще смотреть код. Не приходиться по 100 раз ставить на паузу или перематывать видео, чтобы разглядеть какой то момент.
Спасибо вам Владимир, вы очень интересно и доступно рассказываете, дай бог вам времени и здоровья, дальше создавать такие видео, чтоб такие бездарности как я, это все успешно переживали)))
Спасибо большое за видео! Очень полезная информация для меня
Спасибо за полезное видео !
Спасибо!
Не пойму, какие дегенераты ставят под этими видео палец вниз!? Однозначно лайк!
Большое спасибо!!!
Задам вопрос, уместный или нет решать Вам, какой алгоритм изучения МК СТМ 32, при условии нулевых познаний в мк. Спасибо
Нулевые познания в МК это не страшно. Вы быстрее его освоите если знаете классический язык СИ.
Если языка нет, то в начале заниматься именно им, а потом уже идти осваивать МК.
Что касается микроконтроллеров то нужно (на мой взгляд) брать простенькую и дешевую плату с алиэкспресс рублей за 200-300 и к ней покупать программатор. Эта связка обойдется дешевле 500 рублей.
Следующим шагом устанавливать CubeMX с сайта st.com и делать самый простой пример мигания светодиодом с использованием библиотеки HAL. Это всего несколько строк.
Когда это получится - переходим вначале к базовым операциям ввода - вывода, а потом к интерфейсам: I2C, USART, SPI.
Далее - DMA и прочее уже по необходимости. Как показывает практика при знании языка мы поднимали человека за месяц до весьма хорошего уровня. Дальше зависит от уровня владения языком и способностей.
@@VladimirMedintsev , спасибо за развёрнутый ответ.
Передачи команд или данных нет в CAN. Есть или передача данных или запрос данных remote. Самая страшная ошибка, это когда ни один из принимающих устройств на CAN шине не выставил подтверждение. Никто тебя не слушает. Здесь отсутствие подтверждения в нормальном режиме считается ошибкой передачи и кидает на подпрограмму обработки ошибок, хотя никакой ошибки фактически и нет. Еще очень сложно в этом камне сбросить количество ошибок до нуля, как по передаче, так и по приему, не считая полную перезагрузку процессора. Короче натрахался я с этой CAN ШИНОЙ пол года назад будь здоров. Программировал я на старой HAL-версии библиотеки, она существенно отличается от сегодняшней. CAN шина представляет интерес только для подключения к автомобилю, другое использование CAN шины мне не известно. ID айдишники всех грузовых автомобилей стандартизированы 29 бит. Айдишники легковых автомобилей 11 бит не стандартизированы, каждый производитель автомобиля лепит что хочет.
Автомобили это только малая часть айсберга. Огромное количество оборудования внутри себя имеет CAN-шину. И как правило это реализовано следующим образом: блоки между собой общаются по CAN, а наружу 485-й интерфейс. Пример - промышленные системы питания. Или популярные в России газотурбинные установки от Siemens там внутри системы управления крутится CAN интерфейс. Ну и таких примеров масса. Более того, то что крутится в автомобиле является не самой лучшей и полной реализацией протокола.
В чем может быть проблема, в режиме лук бэк программа работает данные шлет и принимает но на пинах мк тишина, в Нормал режиме тоже тишина. Ножки настроены.
аналогичная проблема
@@artemmelnyk5522 и у меня тоже. Решение нашли?
BluePill STM32F103C8T6 + MCP 2551 STM32CubeIDE170 + FW180.
CAN не работает вообще никак. В LoopMode можно запустить на кое каких настройках в NormalMode не работает и прерывания тоже не запускаются, кто нашёл решение дайте знать. Компилируется успешно, Функция HAL_CAN_AddTxMessage трабатывает без ошибок. Если у кого есть 100% рабочий проект для "BluePill STM32F103C8T6 + MCP 2551 STM32CubeIDE170 + FW180" буду признателен.
А не могли бы подробней рассказать об обработках ошибок при приёме или передачи данных в шине с прерываниями, желательно с выводом данных в консоль посредством fprint для полной наглядности?
Здравствуйте, подскажите, почему одни и те же сообщения отправляются через CAN1, но через CAN2 не отправляется?
А как получать с одного fifo сообщения разных адресов?
если быть точнее записывать сообщения с разных адресов в разные массивы.
У меня получается что все посылки записываются в один массив.
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
{
if(HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RxHeader, RxData) == HAL_OK)
{
HAL_GPIO_TogglePin(LED_plate_GPIO_Port, LED_plate_Pin);
}
}
И в итоге кучамала.
Как их распределить по массивам?
Спасибо за видео. Очень мало информации по данной теме. Я не до конца понял, а как все таки реализуется режим если нужно и принимать и передавать данные?. Что-то я такого не увидел в режимах, или их нужно переключать ?
На прием одна функция, на передачу другая. Просто вызываете ту, которая вам нужна в данный конкретный момент.
Жалко что не поделились своим примером в архиве. видео хорошие познавательные)
Мой код вам не даст абсолютно ничего. У вас наверняка другой микроконтроллер и если нет понимания как и что работает то код вас только запутает. Именно по этой причине на подобных моих видео кода и не бывает.
@@VladimirMedintsev Ваш пример просто помог бы с последовательностью заполнения структур разобраться, а то видео постоянно останавливать приходиться)) Но я понимаю Вас)), просто текстовка был сократила на пару дней, а так придется недельку помучаться)) Вот пример RTOS и использование CAN - в файле can.h обьявлена глобальная структура extern CAN_HandleTypeDef hcan , но почему она в потоки не подтягивается фиг разберешь...)) ошибка аргумент не определен .. Вы все настройки CAN в main.c производите ?
Я имею ввиду как пример функция void MX_FREERTOS_Init(void) , а в ней например создание потока Can_moduleHandle = osThreadNew(StartTask03, &hcan, &Can_module_attributes); - уже вызывает ошибку с неопределенным аргументом hcan. Так что если у Вас будет время может получится ролик СAN и free-rtos.)))
Честно говоря я не сумел понять что вызывает проблемы.
@@VladimirMedintsev При компиляции (CubemixIDE) структура CAN_HandleTypeDef hcan видна в main.c , а в файле freertos.c уже о ней ничего не известно)) .. ладно извините что загружая.. буду разбираться.
@@ukrfoil Can_moduleHandle = osThreadNew(StartTask03, &hcan, &Can_module_attributes) - это дичь какая-то, вы ни фига не понимаете что здесь написали, и я тоже... а по поводу видимости hcan в файле freertos.c в секции Private variables добавить extern CAN_HandleTypeDef hcan
Подскажите как там (11:58) с дистанциями ) - Вы провели эксперимент с большой бухтой'? какой результат?
Все очень даже не плохо. Все работает.
Подскажите, пожалуйста, если у нас одно устройство генерирует сообщение в can-шину, но при этом в can-шине будет два или более устройства, которые успешно считывают это сообщение, они же все должны сгенерировать Acknowledge bit? Не возникает ли при этом ошибок, если устройства-приемники одновременно пытаются ответить?
Не нужно делать широковещательную параллельную связь с подтверждением, только и всего.
Отличное видео. Всё понятно. Но появился вопрос по железу. В первом видео упоминается контроллер mcp2515. Но я так понимаю, его функциональность реализована в самом STM и можно просто подавать CANH, CANL с шины на пины чипа. Или контроллер всё таки нужен?
Я не использую mcp2515. Пересмотрите первую часть с самого начала ровно 2 минуты. Там ответ на ваш вопрос. Спойлер: контроллер не нужен, трансивер нужен.
Огромное спасибо за ваши видео, очень информативно. Воспринимаются, как уроки, на ура. Будут ли подобные видео, от Вас, по I2C и 1Wire?
По I2C скорее всего будет, по времени правда не знаю когда, а по однопроводному он в жизни используется только для домофонов, больше почти никто с ним не работает. Зачем про него что-то говорить?
Спасибо за быстрый ответ. Про 1w-мастер просто для полноты картины. На вашем канале в смысле. Логично предположить ,что если Вы сделаете видео по работе с основными шинами, на одном канале, популярность его возрастет (IMHO). Но если 1w не будет, то и не надо, и так все хорошо. Успехов и Удачи Вам!
Я даже не знал что это пока не загуглил.
@@VladimirMedintsev Согласен .
Некоторые работают с 1wire при помощи UART, хотя мне такой подход не нравится.
С I2C очень много пришлось бы рассказывать, там куча важных нюансов и косяков HAL...
Откуда взялась переменная структуры "TxHeader" в формировании заголовка?
Из инициализации
вот честно. Ничего не понял.
Где объявляется sFilterConfig, TxMailBox? не увидел. Чем заполняется TxMailBox?
Толи это стандартный код после Куба, толи самописное?
Видимо ролик только для тех, кто в теме.
Возьмите куб, создайте проект и все вопросы отпадут.
Видео для тех, кто не ленится и готов учиться.
Здравствуйте Владимир! Мне удалось отправить одно сообщение по ID ,но мне не удается отправить несколько сообщений. Не подскажите как это сделать? Спасибо!
Разумеется копать в сторону подтверждения доставки.
Владимир, подскажите, а существует какая либо версия HAL библиотеки ? ну типа там 2.34
Я просто смотрю, что в моём случае, некоторые параметры в функциях различаются от вашей...
Т.е ваш код в моей библиотеки HAL работать не будет, нужно править некоторые строки..
т.е если я найду какой либо код в интернете, то мне нужен будет полностью пакет со всеми файлами драйвера HAL иначе не факт что он заработает...
библиотека hal обновляется постоянно. ее новые версии можно получить через CubeMX.
В зависимости от семейства микроконтроллера функции могут немного меняться, но на общее понимание происходящего это не влияет. Просто используйте функции доступные для вашего семейства МК.
@@VladimirMedintsev Ок, это я понимаю, а можно где то увидеть версию HAL библиотеки ?
@@smart_electronics_il Версия библиотеки указана в виде константы __STM32(серия)xx_HAL_VERSION, ее определение находится в файле *_hal.c или можно просто запросить у функции HAL_GetHalVersion() она возвращает версию библиотеки. Ну и когда эту библиотеку вы берете в репозитории куба, то там версия указана в названии каталога. Ну и в настройке проекта в кубе есть выбор версии и там тоже указан номер.
По дистанциям там все просто: чем выше скорость - тем меньше дистанция
Возможно ли выложить исходник?
Показанный в ролике код создавался в процессе сьемки 1й и 2й части и ценности не представляет. Я такой код даже не сохраняю.
Спасибо Огромное! Хорошо бы на эту тему не вылазить из Вашего сайта) Есть ли он?
Сайта у меня нету.
@@VladimirMedintsev можете поделиться рабочим проэктом из видео, а то читаю книгу вижу фигу 😐, на примере будет легче разобраться, спасибо
@@videoCxema Я не храню эти проекты. Видео снял ненужные файлы стер.
@@VladimirMedintsev Посмотрел первую часть понял где потерялся, инфо из мануала не соответствует реальности. &pTxMailbox подскажите о нем, а то я опять потерялся
Я упорно не понимаю в чем там нужна помощь.
Просто уберите все мануалы и делайте по описанному в самих библиотеках.
Там в комментариях все есть.
Индетификатор.
Здравствуйте!
Я пытаюсь сделать самодельную систему индикации параметров двигателя где источник данных - КАН шина.
Я решил перейти от кучи проводов с аналоговыми приборами к мониторчику где все параметры и ещё и сигнализация критических параметров, но мозгов не хватает. Я ни разу не электронщик.
Насмотрелся в ютубе и собрал схему: Модуль каншины, ардуино, ноутбук. Данные получил.
Что делать дальше не могу найти информацию.
Можете проконсультировать?
В основном я строю самолёты, но электроника для меня новая среда.
Вот одно из видео и там весь мой канал: ua-cam.com/video/9RV3E2W64gA/v-deo.html