0. Настройка производилась для STM32H743 при частоте работы CPU 480 МГц и частоте FDCAN 120 МГц
1. Для того что бы открыть настройки FDCANx есть следующий путь: «Connectivity» -> «FDCANx» -> «Activated»
2. Описание базовых настроек
-
Frame Format:
-
Classic Mode — будет использован идентификатор (ID) стандартного размера.
-
FD mode without BitRate Switching — будет использован расширенный идентификатор без изменения скорости передачи данных.
-
FD mode with BitRate Switching — будет использован расширенный идентификатор и разрешена разная скорость передачи для байт данных (зеленные шестиугольники) и байт информации (все остальные). (Как я понял, можно настроить скорость передачи байт данных например на скорость 100КБ/с, а всех остальных байт на 500КБ/с или наоборот).
-
-
Mode:
-
Normal mode — данные отправляются в шину и читаются из нее.
-
Restricted operation — принимаются данные из шины, могут отправляться сигналы подтверждения.
-
Bus monitoring mode — данные только принимаются из шины и ничего в шину не отправляется.
-
Internal LoopBack mode — данные не отправляются в шину, а отправляются на вход CAN (замыкание производится аппаратно, ничего самому замыкать не надо). Принимаются только отправленные нами данные, чтение из шины не производится.
-
External LoopBack mode — данные отправляются и в шину, и на вход CAN (замыкание производится аппаратно, ничего самому замыкать не надо). Принимаются только отправленные нами данные, чтение из шины не производится.
Я для себя сделал такую картинку, НО из Reference manual, я так и не смог до конца понять Restricted operation, поэтому картинка может быть не точной (поправьте в комментариях).
-
-
Auto Retransmission — разрешает или запрещает повторную отправку сообщений.
-
Transmit Pause — дополнительная пауза при передаче. Такая пауза необходима для того чтобы дать другим передатчикам доступ к шине в случае, если их приоритет мал.
-
Protocol Exception — разрешение события Protocol Exception. При нормальной работе за битом FDF должен следовать резервный доминантный (LOW) бит (res). Данное событие генерируется в случаях, когда резервный бит имеет рецессивное значение (HIGH).
-
Nominal Sync Jump Width — количество временных квантов расширения, определяет допустимое расширение границ битовых сегментов «Nominal Time Seg1(2)».
-
Data Prescaler — делитель для настройки частоты передачи байт данных (зеленых шестиугольников).
Имеет значение только при Frame Format — FD mode with BitRate Switching -
Data Sync Jump Width — количество временных квантов расширения, определяет допустимое расширение границ битовых сегментов «Data Time Seg1(2)»
Имеет значение только при Frame Format — FD mode with BitRate Switching -
Data Time Seg1 / Seg2 — количество временных квантов в битовом сегменте 1 / 2
Имеет значение только при Frame Format — FD mode with BitRate Switching -
Massage Ram Offset — Указывает стартовый адрес RAM сообщения.
-
Std Filters Nbr — разрешенное количество фильтров со стандартным идентификатором.
-
Ext Filters Nbr — разрешенное количество фильтров с расширенным идентификатором.
-
Rx Fifo0/1 Elmts Nbr — число входных элементов FIFO0/1 (Место куда сохраняются принятые данные).
-
Rx Fifo0/1 Elmts Size — размер в байтах входных элементов FIFO0/1.
-
Rx Buffers Nbr — число входных буферов (Место куда сохраняются принятые данные).
-
Rx Buffer Size — размер в байтах входных буферов RxBuffer.
-
Tx Events Nbr — ??? (Сам так и не разобрался, думаю в комментариях подскажут).
-
Tx Buffers Nbr — число буферов для отправляемых сообщений.
-
Tx Fifo Queue Elmts Nbr — размер очереди в которой хранятся сообщения готовые к отправке.
-
Tx Fifo Queue Mode — режим работы передающего буфера:
-
Fifo Mode — Fifo буфер.
-
Queue Mode — режим очереди.
-
-
Tx Elmt Size — размер отправляемых сообщений в байтах.
Базовые настройки у меня получились следующие.
3. Калибровка частоты — Disable
4. Параметры таймингов битов — здесь настраивается скорость работы FDCAN
-
Nominal Prescaler — предделитель входной частоты.
-
Nominal time quantum — длительность одного кванта.
-
Nominal Time Seg1(2) — количество временных квантов в битовом сегменте 1(2).
-
Nominal Time for one Bit — время необходимое для передачи одного бита.
-
Nominal Baud Rate — итоговая скорость передачи данных для FDCAN.
Для правильной настройки этого блока следует использовать онлайн калькулятор:
http://bittiming.can-wiki.info/
Выбираем ST Microelectronics bxCAN, в Clock Rate указываем входную частоту FDCAN, Sample Point — это точка в которой происходит «захват» бита (у меня это 75%, часто используется 87.5), SJW это «Nominal Sync Jump Width», это значение от 1 до 4 на которое может аппаратно увеличиваться или уменьшаться длительность сегментов Seg1/2 для лучшего захвата бита. Последняя ячейка это скорость на которую мы настраиваем FDCAN.
Результатом будет таблица с рекомендуемыми значениями (желтые строки — наилучшие настройки). Отсюда берем «Prescaler» -> «Nominal Prescaler»,
«Seg1» -> «Nominal Time Seg1», «Seg2» -> «Nominal Time Seg2».
5. Включаем прерывание
У меня в прерываниях происходит чтение принимаемых данных.
Это все настройки FDCAN, которые я проводил в CubeMx.
Эта статья изначально была написана для внутреннего форума на предприятии, но я решил, что такая информация может быть полезна и другим. Честно признаюсь, что в статье есть прямые копирования с других статей, (где именно уже не помню), но оставлю ссылки, откуда я точно брал информацию, надеюсь их авторы на меня не обидятся:
https://www.compel.ru/lib/142251
https://istarik.ru/blog/stm32/159.html
И вообще это моя первая статья (туториал), уверен что где-то допустил ошибки, поэтому поправьте в комментариях.
ссылка на оригинал статьи https://habr.com/ru/post/719358/
Добавить комментарий