MicroPython:Библиотеки/pyb/Класс CAN/CAN.init(): различия между версиями
Myagkij (обсуждение | вклад) (Новая страница: «{{MicroPython/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =CAN.init(mode, extframe=False, prescaler=100, *,...») |
Myagkij (обсуждение | вклад) Нет описания правки |
||
Строка 6: | Строка 6: | ||
* CAN.init(mode, extframe=False, prescaler=100, *, sjw=1, bs1=6, bs2=8, auto_restart=False) – инициализирует CAN-шину со следующими параметрами: | * CAN.init(mode, extframe=False, prescaler=100, *, sjw=1, bs1=6, bs2=8, auto_restart=False) – инициализирует CAN-шину со следующими параметрами: | ||
** mode – здесь может быть NORMAL, LOOPBACK, SILENT или SILENT_LOOPBACK. | ** '''mode''' – здесь может быть NORMAL, LOOPBACK, SILENT или SILENT_LOOPBACK. | ||
** extframe – если задать здесь True, шина будет использовать в фреймах расширенные идентификаторы (29 бит). В противном случае она будет использовать в идентификаторах стандартные 11 бит. | ** '''extframe''' – если задать здесь ''True'', шина будет использовать в фреймах расширенные идентификаторы (''29 бит''). В противном случае она будет использовать в идентификаторах стандартные ''11 бит''. | ||
** prescaler – этот параметр используется, чтобы задать продолжительность 1 кванта времени. Чтобы рассчитать квант времени, значение в prescaler нужно поделить на входную частоту (PCLK1, более подробно читайте в описании метода [http://docs.micropython.org/en/latest/library/pyb.html#pyb.freq pyb.freq()]). | ** '''prescaler''' – этот параметр используется, чтобы задать продолжительность ''1 кванта времени''. Чтобы рассчитать квант времени, значение в ''prescaler'' нужно поделить на входную частоту (''PCLK1'', более подробно читайте в описании метода [http://docs.micropython.org/en/latest/library/pyb.html#pyb.freq pyb.freq()]). | ||
** sjw – это ширина скачка синхронизации в квантах времени; здесь может быть «1», «2», «3» или «4». | ** '''sjw''' – это ширина скачка синхронизации в квантах времени; здесь может быть ''«1»'', ''«2»'', ''«3»'' или ''«4»''. | ||
** bs1 – это место точки захвата (в квантах времени). Здесь может быть от «1» до «1024» включительно. | ** '''bs1''' – это место точки захвата (в квантах времени). Здесь может быть ''от «1» до «1024»'' включительно. | ||
** bs2 – это место точки передачи (в квантах времени). Здесь может быть от «1» до «16» включительно. | ** '''bs2''' – это место точки передачи (в квантах времени). Здесь может быть ''от «1» до «16»'' включительно. | ||
** auto_restart – здесь задается, будет ли контроллер автоматически пытаться перезапустить коммуникацию после входа в режим Bus Off. Если здесь будет стоять False, то restart() можно будет использовать для выхода из режима Bus Off. | ** '''auto_restart''' – здесь задается, будет ли [[контроллер]] автоматически пытаться перезапустить коммуникацию после входа в режим ''Bus Off''. Если здесь будет стоять ''False'', то restart() можно будет использовать для выхода из режима ''Bus Off''. | ||
Квант времени – это базовая единица измерения времени для CAN-шины. Квант времени рассчитывается как значение предварительного делителя тактовой частоты (prescaler), поделенное на частоту PCLK1 (это частота внутренней периферийной шины 1). Более подробно о PCLK1 читайте в описании функции [http://docs.micropython.org/en/latest/library/pyb.html#pyb.freq pyb.freq()]. | |||
Один бит состоит из сегмента синхронизации (который всегда равен одному кванту), после чего идут сегмент бита 1 и сегмент бита 2. Точка захвата находится в конце сегмента бита 1, а точка передачи – в конце сегмента бита 2. Скорость передачи данных рассчитывается как 1, поделенное на время бита. Время бита – это (1 + сегмент бита 1 + сегмент бита 2), умноженное на квант времени. | '''Квант времени''' – это базовая единица измерения времени для [[CAN-шины]]. Квант времени рассчитывается как значение предварительного делителя тактовой частоты (''prescaler''), поделенное на частоту ''PCLK1'' (это частота внутренней периферийной шины 1). Более подробно о ''PCLK1'' читайте в описании функции [http://docs.micropython.org/en/latest/library/pyb.html#pyb.freq pyb.freq()]. | ||
Допустим, PCLK1 – это 42 МГц, предварительный делитель тактовой частоты (prescaler) – это 100, ширина скачка синхронизации (sjw) – 1, сегмент бита 1 (bs1) – 6, а сегмент бита 2 (bs2) – 8. Отсюда можно вычислить, что… | |||
Один бит состоит из сегмента синхронизации (который всегда равен одному кванту), после чего идут сегмент ''бита 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]]. | Более подробно читайте на странице 680 документации к [[STM32F405]]. |
Текущая версия от 21:41, 4 октября 2020
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">