Инструменты пользователя

Инструменты сайта


wiki:if:can:stm32-can-generator:start

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
wiki:if:can:stm32-can-generator:start [2025/12/09 16:29] – создано Артем Слеповwiki:if:can:stm32-can-generator:start [2025/12/10 12:56] (текущий) – [Базовый минимум] Сборка
Строка 1: Строка 1:
 ====== Генератор трафика CAN на основе STM32 ====== ====== Генератор трафика CAN на основе STM32 ======
 +
 +===== Базовый минимум =====
 +
 +  * STM32CubeIDE
 +  * Программатор для STM32 st-link v2
 +  * Проект ([[https://gitlab.inmys.online/Geruto/can_stm32f103c6t6.git|ссылка на репозиторий]])
 +
 +===== Подготовка =====
 +
 +==== Подключение программатора ====
 +
 +Необходимо соединить пины ''SWDIO'', ''GND'', ''SWCLK'' и ''3.3V'' с соответсвующими пинами на микроконтроллере.
 +
 +{{:wiki:if:can:stm32-can-generator:cangenstm32_1.jpg?400|}}
 +{{:wiki:if:can:stm32-can-generator:cangenstm32_2.jpg?200|}}
 +
 +==== Сборка и прошивка ====
 +
 +В STM32CubeIDE открыть проект.
 +
 +Для сборки и прошивки используется конфигурация ''CAN_STm32F103C6T6 Debug''
 +
 +{{:wiki:if:can:stm32-can-generator:cangenstm32_3.png?800|}}
 +
 +Нажать, подождать, готово!
 +
 +===== Описание работы программы =====
 +
 +==== Отправка ====
 +
 +Отправка сообщений происходит в бесконечном цикле, находящемся в функции ''main''.
 +
 +Генерация сообщений происходит следующим образом:
 +  * Очищается буфер с данными.
 +  * При помощи стандартной функции ''rand'' генерируется число ''n'' - количество шестнадцатеричных (4-битных) чисел, после чего вычисляется ''b'' - количество байт данных, которое будет отправлено (''TxHeader.DLC'').
 +  * Далее генерируется ''n'' 4-битных чисел и заполняется буфер данных.
 +  * По алгоритму ''CRC-11'' вычисляется заголовок (''TxHeader.StdId''), по которому можно проверить целостность данных при приёме.
 +  * Происходит отправка сообщения.
 +
 +==== Приём ====
 +
 +Приём происходит в функции ''HAL_CAN_RxFifo0MsgPendingCallback''.
 +
 +По полученным данным вычисляется идентификатор (по тому же алгоритму ''CRC-11''), который сравнивается с заголовком.
 +
 +===== Вывод ошибок =====
 +
 +Во время работы программы считается общее количество отправленных/принятых сообщений, а также считаются ошибки.
 +
 +Каждый раз при возникновении ошибки (будь то несоответствие чексуммы данных, или при аппаратных ошибках) все эти данные отправляются по UART.
 +
 +Для данного проекта используются следующие пины на микроконтроллере:
 +  * A9 -> TX
 +  * A10 -> RX
 +
 +Для подключения из консоли можно использовать следующую команду:
 +
 +<code>
 +picocom -b 115200 <port>
 +</code>
 +
 +Так выглядит вывод ошибок:
 +
 +{{:wiki:if:can:stm32-can-generator:cangenstm32_4.png?400|}}
 +
 +  * ''RX_CNT'' и ''TX_CNT'' - счётчики принятых и отправленных сообщений.
 +  * ''RX_ERRORS'' и ''TX_ERRORS'' - счётчики ошибок при принятии и отправке сообщений.
 +  * ''HARD_ERRORS'' - аппаратные ошибки.
wiki/if/can/stm32-can-generator/start.1765297797.txt.gz · Последнее изменение: Артем Слепов