Каковы правильные настройки Can Bus для STM32F4-Disc для скорости 250 кбит/с при использовании nanoFramework?
Я пытаюсь подключить плату BluePill (настроенную STM32CubeMX) с STM32F4-Discovery (настроенную ChibiOS и nanoFramework).
BluePill имеет следующие параметры:
- Периферийная тактовая частота APB1: 24 МГц
- Прескалер (для кванта времени): 6
- Квант времени: 250,0 нс [как результат]
- Временные кванты в битовом сегменте 1: 13 раз
- Временные кванты в битовом сегменте 2: 2 раза
- Время на один бит: 4000 нс [как результат]
- Скорость передачи данных: 250 000 бит/с [как результат]
- Ширина прыжка ресинхронизации: 1 раз
Конфигурация часов в ChibiOS для платы Discovery (mcuconf.h):
#define STM32_SW STM32_SW_PLL
#define STM32_PLLSRC STM32_PLLSRC_HSE
#define STM32_PLLM_VALUE 4
#define STM32_PLLN_VALUE 168
#define STM32_PLLP_VALUE 2
#define STM32_PLLQ_VALUE 7
#define STM32_HPRE STM32_HPRE_DIV1
#define STM32_PPRE1 STM32_PPRE1_DIV8
Мой расчет для периферийных часов APB1 платы Discovery:
Fext_osc / PLLM * PLLN / PLLP / HPRE / PPRE1 = 8 000 000 / 4 * 168 / 2 / 1 / 8 = 21 MHz
Я попытался настроить плату CAN of Discovery в коде:
var canSettings = new CanSettings(6, 11, 2, 1);
где
- Предварительный делитель скорости передачи данных по шине: 6
- [Квант времени: 6/21+E6 = 285,71 нс в результате]
- Фазовый сегмент 1: 11
- Фазовый сегмент 2: 2
- [Время для одного бита: 285.71-E9 * (1 + 11 + 2) = 4000 нс в результате]
- [Скорость передачи данных: 1/4-E6 = 250 000 бит/с в результате]
- Ширина прыжка синхронизации: 1
Соединение не работает.
Если я использую настройки из какого-то примера кода для неизвестной скорости — CanSettings(6, 8, 1, 0) — это работает, но это 350 кбит/с (для тактовой частоты APB1 21 МГц).
Я ценю любую помощь в понимании этого.
1 ответ
Вот документ оCanSettings
.
Обязательно передайте эти значения конструктору с правильными параметрами. Я не проверял, верны ли они. Чтобы упростить задачу, предложите вам воспользоваться одним из калькуляторов STM.