====== Генератор трафика 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 Для подключения из консоли можно использовать следующую команду: picocom -b 115200 Так выглядит вывод ошибок: {{:wiki:if:can:stm32-can-generator:cangenstm32_4.png?400|}} * ''RX_CNT'' и ''TX_CNT'' - счётчики принятых и отправленных сообщений. * ''RX_ERRORS'' и ''TX_ERRORS'' - счётчики ошибок при принятии и отправке сообщений. * ''HARD_ERRORS'' - аппаратные ошибки.