MicroPython:Библиотеки/pyb/Класс CAN/CAN.init()

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


CAN.init(mode, extframe=False, prescaler=100, *, sjw=1, bs1=6, bs2=8, auto_restart=False)[1]

  • CAN.init(mode, extframe=False, prescaler=100, *, sjw=1, bs1=6, bs2=8, auto_restart=False) – инициализирует CAN-шину со следующими параметрами:
    • mode – здесь может быть NORMAL, LOOPBACK, SILENT или SILENT_LOOPBACK.
    • extframe – если задать здесь True, шина будет использовать в фреймах расширенные идентификаторы (29 бит). В противном случае она будет использовать в идентификаторах стандартные 11 бит.
    • prescaler – этот параметр используется, чтобы задать продолжительность 1 кванта времени. Чтобы рассчитать квант времени, значение в prescaler нужно поделить на входную частоту (PCLK1, более подробно читайте в описании метода pyb.freq()).
    • sjw – это ширина скачка синхронизации в квантах времени; здесь может быть «1», «2», «3» или «4».
    • bs1 – это место точки захвата (в квантах времени). Здесь может быть от «1» до «1024» включительно.
    • bs2 – это место точки передачи (в квантах времени). Здесь может быть от «1» до «16» включительно.
    • auto_restart – здесь задается, будет ли контроллер автоматически пытаться перезапустить коммуникацию после входа в режим Bus Off. Если здесь будет стоять False, то restart() можно будет использовать для выхода из режима Bus Off.

Квант времени – это базовая единица измерения времени для CAN-шины. Квант времени рассчитывается как значение предварительного делителя тактовой частоты (prescaler), поделенное на частоту PCLK1 (это частота внутренней периферийной шины 1). Более подробно о PCLK1 читайте в описании функции pyb.freq().

Один бит состоит из сегмента синхронизации (который всегда равен одному кванту), после чего идут сегмент бита 1 и сегмент бита 2. Точка захвата находится в конце сегмента бита 1, а точка передачи – в конце сегмента бита 2. Скорость передачи данных рассчитывается как 1, поделенное на время бита. Время бита – это (1 + сегмент бита 1 + сегмент бита 2), умноженное на квант времени.

Допустим, PCLK1 – это 42 МГц, предварительный делитель тактовой частоты (prescaler) – это 100, ширина скачка синхронизации (sjw) – 1, сегмент бита 1 (bs1) – 6, а сегмент бита 2 (bs2) – 8. Отсюда можно вычислить, что…

  • Квант времени составляет 2.38 микросекунд: 100 / 42 МГц = 2.38 мкс
  • Время бита составляет 35.7 микросекунд: (1 + 6 + 8) * 2.38 = 35.7 мкс
  • Скорость передачи данных составляет 28 КГц: 1 / 35.7 = 0.028

Более подробно читайте на странице 680 документации к STM32F405.

<syntaxhighlight lang="python" enclose="div">

См.также

Внешние ссылки