A clean, well-organized STM32-based CAN Bus communication testing station on a white workbench. It features an STM32 board, a CAN transceiver, a twisted-pair CAN bus with a $120\Omega$ termination resistor, and a PEAK-System PCAN-USB adapter connected to a laptop.

Освоение CAN-связи на микроконтроллере STM32: практическое руководство по передаче и приему CAN-кадров.

  • Автор: Джонни Лю (Генеральный директор Dowway Vehicle | Специалист по автомобильным системам)
  • Опубликовано: 1 июля 2026 г.
  • Категория: Встроенные системы / Автомобильная инженерия / Программирование микроконтроллеров

? Краткое содержание

Данное руководство содержит пошаговое описание процесса внедрения. Связь STM32 по протоколу CAN (Controller Area Network) используя Библиотека STM32 HAL (bxCAN). Эта книга, написанная экспертом в области автомобильной электроники, охватывает физическую настройку оборудования, точный расчет скорости передачи данных с использованием временных квантов (TQ), конфигурации «Принимать все» с нулевым фильтром, прием сообщений на основе прерываний и практические рекомендации по устранению неполадок в промышленности.

1. Введение

В автомобилестроении и промышленной автоматизации Сеть контроллеров (CAN) остается стандартом для надежной, устойчивой к помехам связи. В наших предыдущих теоретических статьях мы исследовали физический уровень CAN, формат кадра, арбитраж и механизмы обработки ошибок.

Теперь пришло время преодолеть разрыв между теорией и практикой. Как написать практичный, готовый к использованию в производстве код для отправки и приема одного CAN-кадра на микроконтроллере STM32?

В этой статье основное внимание уделяется классическому… bxCAN периферийное устройство с использованием Библиотека STM32 HAL (Идеально подходит для STM32F1, F4 и аналогичных серий). Независимо от того, разрабатываете ли вы плату управления электромобилем (EV) или сенсорный узел для автоматизации производства, эта пошаговая структура программирования обеспечит вам надежную и масштабируемую основу.

2. Необходимое оборудование для связи по протоколу CAN микроконтроллера STM32 (почему программного обеспечения недостаточно)

В отличие от UART или SPI, где для стендовых испытаний можно просто соединить контакты RX/TX двух микроконтроллеров, Для передачи данных по протоколу CAN требуется внешнее физическое приемопередающее оборудование.. Подключение микроконтроллера CAN_TX и CAN_RX Прямое соединение контактов друг с другом без приемопередатчика приведет к сбою и может повредить контакты GPIO.

Основные компоненты CAN-узла

Функционирующий узел CAN состоит из пяти основных элементов:

  1. Внутренний CAN-контроллер: Интегрировано в микроконтроллер STM32.
  2. Внешний CAN-трансивер: Преобразует уровни цифровой логики микроконтроллера (3,3 В) в дифференциальные сигналы физической шины (CAN H и CAN L). К распространенным микросхемам относятся: TJA1050, TJA1051, SN65HVD230, или MCP2551.
  3. Физические автобусные маршруты: Витые пары проводов, обозначенные как $\text{CAN\_H}$ и $\text{CAN\_L}$, предназначены для подавления электромагнитных помех (ЭМП).
  4. 120 долларов США\Омега$ Конечные резисторы: Для предотвращения отражения сигнала их необходимо разместить на обоих концах автобуса.
  5. Схемы защиты (рекомендуются для использования в производстве): Подавители переходных напряжений (TVS-диоды) и оптоэлектронная изоляция для защиты от высоковольтных скачков напряжения.

Справочник по электропроводке оборудования

Убедитесь, что ваш прототип или плата, изготовленная на заказ, подключены точно так, как показано ниже:

Контакты микроконтроллера STM32Сторона приемопередатчикаСторона приемопередающей шиныФизическая линия шины CAN
STM32 CAN_TX$\rightarrow$ TXDКАНХ$\rightarrow$ CAN_H (с параллельным оконечным сопротивлением $120\Omega$)
STM32 CAN_RX$\leftarrow$ РХДКАНЛ$\rightarrow$ CAN_L (с параллельным оконечным сопротивлением $120\Omega$)

3. Общий обзор: 8 шагов инициализации CAN.

Для установления стабильной связи на микроконтроллере STM32 микропрограмма должна выполнить следующие 8 шагов в указанной последовательности:

[1. Init CAN Parameters] ──> [2. Config Baud Rate] ──> [3. Config Working Mode]
                                                                  │
[6. Enable RX Interrupt] <── [5. Start CAN] <── [4. Config Hardware Filters]
         │
[7. Transmit CAN Frame] ──> [8. ISR / Callback Rx Handling]
  1. Инициализация параметров периферийного устройства CAN. (выделение памяти для дескриптора, мультиплексирование контактов отображения).
  2. Настройте скорость передачи данных. (Установить делители частоты и фазовые сегменты).
  3. Настройте режим работы (Обычный режим для производства, режим обратной связи для пробных запусков).
  4. Настройка аппаратных фильтров (Настройте фильтры приема, чтобы отфильтровывать нежелательные идентификаторы на аппаратном уровне).
  5. Запустите CAN-периферийное устройство (Перевод аппаратного состояния CAN из состояния инициализации в активное).
  6. Включить прерывания приема (Дать указание NVIC прослушивать входящие сообщения CAN).
  7. Передача CAN-кадров (загрузка сообщений в почтовые ящики TX).
  8. Приём CAN-кадров в ISR (Обработка разбора сообщения внутри назначенного обработчика прерывания FIFO).

Типичные инженерные ошибки: Большинство проблем, с которыми сталкиваются разработчики, возникают из-за неправильной настройки скорости передачи данных, ненастроенных (и, следовательно, блокирующих) фильтров, а также из-за того, что забывают вызвать соответствующие функции. HAL_CAN_Start()или попытка передачи без наличия другого активного узла на шине для генерации сигнала подтверждения (ACK).

4. Понимание скорости передачи данных и временных квантов (TQ) в протоколе CAN микроконтроллера STM32.

Неправильная настройка скорости передачи данных CAN приведет к тому, что ваш узел полностью замолчит или вызовет непрерывную передачу кадров ошибок по шине.

Математическая формула

Скорость передачи данных CAN рассчитывается с использованием тактовой частоты периферийных устройств и деления времени одного бита на небольшие единицы, называемые Кванты времени (TQ):$$\text{Скорость передачи CAN} = \frac{\text{Частота CAN}}{\text{Дефлектор} \times \text{Общее количество временных квантов на бит}}$$

Суммарные временные кванты на бит определяются сегментом синхронизации и двумя фазовыми сегментами: $$\text{Суммарные временные кванты на бит (Total TQ)} = 1 \text{ (Sync Seg)} + \text{BS1} + \text{BS2}$$

Где:

  • Сегмент синхронизации (Sync Seg): Всегда фиксировано на уровне $1\text{ TQ}$.
  • BS1 (Временной сегмент 1): Определяет местоположение точки выборки. Он охватывает задержку распространения и сегмент 1 фазового буфера.
  • BS2 (Временной сегмент 2): Второй сегмент фазового буфера, компенсирующий фазовые сдвиги.

Практический пример расчета

Давайте рассчитаем параметры для целевой скорости передачи данных $500\text{ кбит/с}$ на микроконтроллере STM32, где периферийное устройство CAN отображается на Автобус APB1 курсирует в $36\text{ МГц}$:

  1. Установите Предделитель до 4 долларов.
  2. Набор БС1 до $15\text{ TQ}$.
  3. Набор БС2 до $2\text{ TQ}$.

Подставим эти значения в нашу формулу: $$\text{Total TQ} = 1 + 15 + 2 = 18\text{ TQ}$$$$\text{CAN Baud Rate} = \frac{36\text{ MHz}}{4 \times 18} = \frac{36,000,000}{72} = 500\text{ kbps}$$

Расчеты идеально совпадают! В производственных условиях всегда следите за тем, чтобы ваши Точка отбора проб (рассчитывается как $\frac{1 + \text{BS1}}{1 + \text{BS1} + \text{BS2}}$) целевое значение составляет $75\%$ и 87,5% для оптимальной стабильности шины и шумоизоляции. В этом примере точка выборки составляет $\frac{16}{18} \approx 88,8%, что очень близко к стандартным автомобильным профилям.

5. Шаг 1 кодирования: Написание кода MX_CAN_Init() Функция

Функция инициализации настраивает структурные свойства контроллера bxCAN с помощью CAN_HandleTypeDef ручка.

CAN_HandleTypeDef hcan;

/**
 * @brief  Initializes the CAN peripheral and sets basic operation parameters.
 * @note   This configuration targets a 500 kbps baud rate assuming a 36 MHz APB clock.
 * Always recalculate timing parameters if your system clock changes.
 * @retval None
 */
void MX_CAN_Init(void)
{
    hcan.Instance = CAN1;

    /* Baud Rate Configuration: 36MHz / 4 / (1 + 15 + 2) = 500 kbps */
    hcan.Init.Prescaler = 4;
    hcan.Init.Mode = CAN_MODE_NORMAL;
    hcan.Init.SyncJumpWidth = CAN_SJW_1TQ;
    hcan.Init.TimeSeg1 = CAN_BS1_15TQ;
    hcan.Init.TimeSeg2 = CAN_BS2_2TQ;
    
    /* Advanced Operating Modes */
    hcan.Init.TimeTriggeredMode = DISABLE;
    hcan.Init.AutoBusOff = ENABLE;        /* Automatically recover from Bus-Off state */
    hcan.Init.AutoWakeUp = DISABLE;
    hcan.Init.AutoRetransmission = ENABLE; /* Retransmit frames if arbitration is lost or an error occurs */
    hcan.Init.ReceiveFifoLocked = DISABLE; /* Overwrite oldest message when FIFO is full (instead of locking) */
    hcan.Init.TransmitFifoPriority = DISABLE; /* Priority determined by Identifier (lowest ID wins) */

    if (HAL_CAN_Init(&hcan) != HAL_OK)
    {
        /* Initialization Error Handling */
        Error_Handler();
    }
}

Анализ критических параметров инициализации

  • CAN_MODE_NORMAL против CAN_MODE_LOOPBACKДля осуществления реальной связи по приемопередающей шине используйте CAN_MODE_NORMAL. Для пробных запусков (проверки логики внутри устройства без подключения физических проводов) переключите этот параметр в положение «Выход из строя». CAN_MODE_LOOPBACK.
  • АвтобусВыкл: При установке значения ДАВАТЬ ВОЗМОЖНОСТЬПосле перехода в состояние “шина отключена” из-за накопления ошибок оборудование CAN автоматически восстанавливается и снова подключается к сети.
  • Автоматическая ретрансляцияВ случае коллизии или пропуска подтверждения (ACK) оборудование автоматически повторит попытку отправки кадра.
  • ReceiveFifoLocked: Когда ЗАПРЕЩАТЬНовые входящие кадры будут перезаписывать старые непрочитанные кадры в FIFO. Если установлено значение ДАВАТЬ ВОЗМОЖНОСТЬПри заполнении FIFO блокируется, и последующие поступающие данные отбрасываются.

6. Шаг 2 кодирования: Настройка фильтра (Проблема “Почему мой микроконтроллер игнорирует сообщения?”)

По умолчанию фильтры bxCAN микроконтроллеров STM32 закрыты. Если вы явно не настроите банк фильтров, Ваш узел отклонит каждое входящее сообщение..

Для обеспечения стабильной инициализации системы и проверки работоспособности оборудования выполните следующую настройку: Маска фильтра «Принять все». Это позволяет обойти первоначальную проверку идентификатора и пропускать каждый пакет.

/**
 * @brief  Configures the CAN Hardware Acceptance Filters to accept all incoming frames.
 * @note   In production, narrow down filter masks to reduce CPU interrupt overhead.
 * @retval None
 */
void CAN_Filter_Config(void)
{
    CAN_FilterTypeDef filter;

    filter.FilterBank = 0;                         /* Select Filter Bank 0 */
    filter.FilterMode = CAN_FILTERMODE_IDMASK;     /* Mask Mode (versus Identifier list mode) */
    filter.FilterScale = CAN_FILTERSCALE_32BIT;    /* Single 32-bit register scale */
    
    /* Setting IDs and Masks to 0 accepts all standard and extended frames */
    filter.FilterIdHigh = 0x0000;
    filter.FilterIdLow = 0x0000;
    filter.FilterMaskIdHigh = 0x0000;
    filter.FilterMaskIdLow = 0x0000;
    
    filter.FilterFIFOAssignment = CAN_RX_FIFO0;    /* Route matched frames to Receive FIFO 0 */
    filter.FilterActivation = ENABLE;              /* Enable filter bank 0 */
    filter.SlaveStartFilterBank = 14;              /* Boundary for dual-CAN microcontrollers */

    if (HAL_CAN_ConfigFilter(&hcan, &filter) != HAL_OK)
    {
        /* Filter Configuration Error */
        Error_Handler();
    }
}

7. Шаг 3 кодирования: Запуск CAN и активация прерываний

После того как параметры инициализации и фильтрации будут записаны в регистры, необходимо физически загрузить периферийное устройство и включить соответствующие линии прерываний.

/**
 * @brief  Starts the CAN peripheral and enables message-pending interrupts.
 * @retval None
 */
void CAN_Start(void)
{
    /* Start the CAN peripheral */
    if (HAL_CAN_Start(&hcan) != HAL_OK)
    {
        Error_Handler();
    }

    /* Activate the Notification for FIFO 0 Message Pending Interrupt */
    if (HAL_CAN_ActivateNotification(&hcan, CAN_IT_RX_FIFO0_MSG_PENDING) != HAL_OK)
    {
        Error_Handler();
    }
}

? Контрольный список для разработчиков: Если вы пропустите HAL_CAN_Start()CAN-оборудование остается в режиме инициализации. Если вы это пропустите HAL_CAN_ActivateNotification()В этом случае входящие сообщения будут оставаться в буфере FIFO, не вызывая срабатывания вашей функции обратного вызова. Обе ошибки демонстрируют один и тот же симптом: «Сообщения не получены».

8. Шаг 4 кодирования: Передача стандартного CAN-кадра

Для отправки CAN-сообщения необходимо настроить заголовок, указывающий метаданные (длина идентификатора, формат, идентификатор), и заполнить буфер полезной нагрузки до 8 байт.

/**
 * @brief  Transmits a standard CAN frame over the bus.
 * @param  id: Standard 11-bit Frame Identifier (Range: 0x000 to 0x7FF)
 * @param  data: Pointer to the uint8_t array containing transmission payload
 * @param  len: Data length code (DLC) in bytes (Classic CAN range: 0 to 8)
 * @retval HAL_StatusTypeDef: Return status of HAL execution
 */
HAL_StatusTypeDef CAN_Send_StdData(uint16_t id, const uint8_t *data, uint8_t len)
{
    CAN_TxHeaderTypeDef tx_header;
    uint32_t tx_mailbox;
    uint8_t tx_data[8] = {0};

    /* Boundary Checks */
    if ((id > 0x7FFU) || (len > 8U))
    {
        return HAL_ERROR;
    }

    /* Safely copy transmission payload */
    for (uint8_t i = 0; i < len; i++)
    {
        tx_data[i] = data[i];
    }

    /* Formulate CAN Tx Header Struct */
    tx_header.StdId = id;                         /* 11-bit standard ID */
    tx_header.ExtId = 0;                          /* Extended identifier (unused) */
    tx_header.IDE = CAN_ID_STD;                   /* Configure frame type as Standard */
    tx_header.RTR = CAN_RTR_DATA;                 /* Configure frame type as Data Frame */
    tx_header.DLC = len;                          /* Set transmission payload size */
    tx_header.TransmitGlobalTime = DISABLE;

    /* Request Tx Mailbox transmission */
    return HAL_CAN_AddTxMessage(&hcan, &tx_header, tx_data, &tx_mailbox);
}

9. Шаг 5 программирования: Прием и анализ CAN-кадров с помощью прерываний

Когда действительный кадр проходит через фильтр в FIFO0, генерируется прерывание. Микроконтроллер приостанавливает стандартное выполнение для выполнения назначенной функции обратного вызова HAL.

Реализация функции обратного вызова FIFO0

Ваша функция обратного вызова для обработки прерывания должна немедленно получать кадр, чтобы очистить аппаратный FIFO и свести задержку к минимуму.

/**
 * @brief  Rx FIFO 0 message pending callback override.
 * Fires automatically whenever a new message lands in FIFO 0.
 * @param  hcan_ptr: Pointer to the active CAN peripheral handle
 * @retval None
 */
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan_ptr)
{
    CAN_RxHeaderTypeDef rx_header;
    uint8_t rx_data[8];

    /* Fetch the message from the hardware FIFO */
    if (HAL_CAN_GetRxMessage(hcan_ptr, CAN_RX_FIFO0, &rx_header, rx_data) != HAL_OK)
    {
        return;
    }

    /* Sort by Frame Type and route parsing logic */
    if (rx_header.IDE == CAN_ID_STD)
    {
        CAN_Process_StdFrame(rx_header.StdId, rx_data, rx_header.DLC);
    }
    else
    {
        CAN_Process_ExtFrame(rx_header.ExtId, rx_data, rx_header.DLC);
    }
}

Передовые архитектурные практики: Никогда не выполняйте медленные, сложные вычисления или блокирующие задержки (например, HAL_Delay()) внутри обработчика прерываний (ISR) или функции обратного вызова. В противном случае вы рискуете пропустить последующие кадры. Для программного обеспечения производственного уровня копируйте входящие данные немедленно в потокобезопасный процесс. Кольцевой буфер или Очередь и переложить обработку данных на основной цикл или задачу операционной системы реального времени.

10. Обработка кадров: анализ входящих данных по идентификатору.

После переадресации на CAN_Process_StdFrame(), анализировать байты полезной нагрузки на основе присвоенного им идентификатора. Эта структура соответствует стандартным матрицам сообщений автомобильной промышленности:

/**
 * @brief  Dispatches standard frames to their target sub-parsing functions.
 * @param  id: Standard CAN Frame ID
 * @param  data: Pointer to raw received byte buffer
 * @param  len: Length of received payload
 * @retval None
 */
void CAN_Process_StdFrame(uint16_t id, const uint8_t *data, uint8_t len)
{
    switch (id)
    {
        case 0x100:
            CAN_Parse_VehicleSpeed(data, len);
            break;

        case 0x200:
            CAN_Parse_BatteryStatus(data, len);
            break;

        case 0x300:
            CAN_Parse_MotorStatus(data, len);
            break;

        default:
            /* Ignore unrecognized CAN IDs or log diagnostics */
            break;
    }
}

Для крупномасштабных проектов ручное кодирование операторов switch-case становится невыполнимой задачей. Вместо этого, разработайте свой прикладной уровень таким образом, чтобы он обрабатывал CAN-кадры с помощью автоматически сгенерированного кода базы данных, взятого из отраслевых стандартов. Файлы матрицы связи DBC.

11. Заключительная сборка: Подведение итогов.

Вот как можно интегрировать инициализацию, фильтрацию, запуск и циклические сигналы подтверждения работоспособности в основной рабочий процесс вашего приложения:

/**
 * @brief  Initializes and starts the entire CAN application stack.
 * @retval None
 */
void CAN_App_Init(void)
{
    MX_CAN_Init();         /* Step 1-3: Hardware, Timing, and Mode initialization */
    CAN_Filter_Config();   /* Step 4: Acceptance filters configuration */
    CAN_Start();           /* Step 5-6: Boot peripheral and active interrupts */
}

/**
 * @brief  Cyclically transmits a standard heart-beat diagnostic frame.
 * Call this from your main loop or thread runner.
 * @retval None
 */
void CAN_Send_Heartbeat(void)
{
    uint8_t data[8] = {0};

    data[0] = 0xA5;
    data[1] = 0x5A;

    /* Send standard ID 0x700 with a 2-byte payload */
    (void)CAN_Send_StdData(0x700, data, 2);
}

При записи прошивки CAN, следовать принципу изоляции. Сначала проверьте конфигурацию в режиме обратной связи, затем проведите физические тесты передачи данных между двумя точками, прежде чем накладывать сложные диагностические протоколы прикладного уровня.

12. Устранение неполадок: Диагностическое руководство для разработчиков (FAQ, оптимизированное для геолокации)

Ниже представлено структурированное руководство по диагностике, предназначенное для решения наиболее распространенных проблем интеграции CAN в микроконтроллеры STM32:

В1: Функция передачи возвращается ХАЛ_ОКНо мой логический анализатор или осциллограф ничего не показывает. В чём проблема?

Краткий ответ: Возможно, периферийное устройство CAN не запущено, контакты GPIO настроены неправильно или приемопередатчик не получает питания.

  • Контрольный список:
    1. Активно ли CAN-периферийное устройство? Подтвердите, что вы звонили. HAL_CAN_Start().
    2. Мультиплексирование GPIO: Убедитесь, что контакты TX/RX правильно сопоставлены со своими альтернативными функциями (AF) в регистрах GPIO.
    3. Физическая проводка: Убедитесь в стабильности питания приемопередатчика (5 В или 3,3 В). Проверьте, что TXD и РХД не связаны между собой.
    4. Переопределение обратной связи: Если проверка проводится без физического автобуса, убедитесь в следующем. hcan.Init.Mode явно настроено на CAN_MODE_LOOPBACK.
    5. Статус “Автобус выключен”: Проверьте регистр состояния ошибок (ESR), чтобы убедиться, что узел не отключился из-за накопления большого количества ошибок.

Q2: Анализатор CAN четко показывает передачу кадров по шине, но мой STM32-процессор не получает абсолютно ничего.

Краткий ответ: Обычно это происходит из-за закрытой или неправильной конфигурации фильтра, блокирующей сообщения, или из-за неактивных прерываний.

  • Контрольный список:
    1. Настройка маски фильтра: Ваш фильтр слишком строгий? Убедитесь, что вы настроили маску фильтра «Принять все» (FilterId и FilterMaskId установить на 0) во время первоначальной отладки.
    2. Включение прерываний: Проверьте, если HAL_CAN_ActivateNotification был вызван с CAN_IT_RX_FIFO0_MSG_PENDING.
    3. Конфигурация NVIC: Убедитесь, что глобальные прерывания CAN включены в контроллере NVIC вашего микроконтроллера.
    4. Несоответствие FIFO: Убедитесь, что ваша инициализация соответствует вашей функции обратного вызова. Если вы настроили CAN_RX_FIFO0 в ваших фильтрах, но реализуйте HAL_CAN_RxFifo1MsgPendingCallback (FIFO1), прерывание сработает без выполнения вашего кода.

В3: Почему при попытке передачи на моей шине постоянно отображаются ошибки “ACK Errors”?

Краткий ответ: Ошибки ACK возникают, когда ни один другой активный узел не находится в сети для подтверждения вашего кадра, или когда существует физическое несоответствие шины и скорости передачи данных.

  • Контрольный список:
    1. Есть ли другие узлы? CAN — это шина для взаимодействия. Если в сети нет другого узла, способного прочитать ваше сообщение и переключить шину с рецессивного на доминантный сигнал в течение времени подтверждения (ACK), передающий узел выдаст ошибку подтверждения (ACK).
    2. Несоответствие скорости передачи данных: Если принимающий узел настроен на другую скорость передачи данных, он не сможет прочитать кадр и подтвердить его получение (ACK).
    3. Конечные резисторы: Отсутствие оконечных резисторов (120 Ом на обоих концах) приводит к сильному отражению сигнала и деформации краев, что препятствует правильной выборке подтверждения.

Вопрос 4: Почему мой STM32-процессор мгновенно переходит в состояние “Bus-Off” при подключении к сети?

Краткий ответ: Мгновенное отключение шины вызвано массовым накоплением кадров ошибок, обычно из-за неправильной скорости передачи данных или физических коротких замыканий.

  • Контрольный список:
    1. Расхождение скорости передачи данных: Серьезное несоответствие скорости передачи данных приводит к непрерывному потоку ошибочных кадров, немедленно превышающему пороговое значение счетчика ошибок передачи (TEC) в 255 долларов.
    2. Физические шорты: Используйте мультиметр, чтобы убедиться в отсутствии физического короткого замыкания между ними. CAN_H и CAN_L или на землю.
    3. Напряжение приемопередатчика: Недостаточное питание приемопередатчика может привести к слабому дифференциальному сигналу, вызывая серьезные предупреждения на локальном оборудовании.

13. Заключительный контрольный список и дальнейшие шаги

Для освоения связи по протоколу CAN на микроконтроллере STM32 требуется согласованное понимание как аппаратных, так и программных конечных автоматов:

  1. Установить точные структуры часов и вычислять фазовые сегменты для обеспечения стабильной синхронизации скорости передачи данных.
  2. Разблокируйте фильтры для обеспечения возможности проведения диагностического тестирования системы.
  3. Реализуйте простые, легкие, управляемые прерываниями процедуры приема. масштабироваться до сложных сетей.

В нашей следующей статье мы перейдём к следующему вопросу. Расширенная отладка и инженерная диагностика шины CANКак анализировать искажения формы сигнала с помощью осциллографа, выделять кадры ошибок, связанные с шумом, и внедрять надежные процедуры автоматического восстановления при отключении шины в экстремальных промышленных условиях. Следите за обновлениями!

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Need a Quote or Have Questions?

Please fill out the form below, our engineers will contact you within 24 hours.