Как установить скорость передачи в бодах 500K для контроллера STM32 - PullRequest
0 голосов
/ 18 января 2020

Я пытаюсь установить связь CAN (сеть контроллера) между STM32446E-EVAL и программным приложением на моем P C. Проблема заключается в том, что, как только я пытаюсь получить или передать байт, в одном из регистров появляется ошибка «доминирующий бит ошибки», и я подозреваю, что это как-то связано со скоростью передачи данных из того, что я читаю на других форумах, но я Не удалось найти ни одной опции в официальной среде STM для установки скорости передачи ... У кого-нибудь есть идеи о том, как я могу установить ее правильно?

Ответы [ 3 ]

0 голосов
/ 18 января 2020

У меня была похожая проблема, когда я работал над проектом. Я не использовал ту же плату, что и вы, но это был STM32, и я использовал CubeMx IDE. Скорее всего, в вашем проекте есть файл .io c, и у вас есть поле «Настройки параметров», где вы найдете больше полей. В моем случае я изменил прескалер и битовые кванты времени 1 и 2, как упоминалось в ответе выше. Теперь, конечно, это зависит от конфигурации вашей конкретной доски, но в моем случае "выигрышная комбинация" была 8 для Prescaler и 6 и 5 для количеств . Я использовал осциллограф для измерения, пока не обнаружил, что это правильные значения. Изменение этих трех параметров должно помочь.

0 голосов
/ 18 января 2020

Из справочника §30.7.7 Битовая синхронизация: enter image description here

Изменение порядка: BRP = (F PCLK / (BaudRate x (TS1 + TS2 + 3))) - 1

Не все значения TS1 и TS2 приводят к целочисленному значению для приведенной выше формулы, поэтому не будут генерировать правильный бод ставка. Кроме того, вы должны учитывать точку выборки - различные протоколы приложений CAN имеют определенные c предпочтительные рекомендации точки выборки, но в любом случае они должны составлять от 50% до 90%. Точка выборки в процентах:

1 - ((TS2 + 1) / (TS2 + TS1 + 3)) x 100%

Таким образом, существует несколько Решения относительно значений TS1 / TS2, но каждое из них дает отдельную точку выборки, поэтому вам нужно выбрать значения, которые:

  1. Генерируют ровно 500 Кбит / с (NBT = 2 микросекунды).
  2. Имеет точку выборки как можно ближе к предпочтительному значению в диапазоне от 50 до 90%.

Возможно, это не просто, и без знания вашего F PCLK нет можно посоветовать конкретно. Я создал электронную таблицу, которая генерирует все допустимые возможности с соответствующей точкой выборки.

Пример для F PCLK = 42 МГц: enter image description here

На основании вышеизложенного TS1 = 10, TS2 = 1, BRP = 5 , приведет к 500 Кбит / с с точкой выборки 85,7% - близко к рекомендации CANopen 87,5%.

Эти значения согласуются с калькулятором на http://www.bittiming.can-wiki.info/ enter image description here Отметив, что значения в таблице являются значениями регистра + 1.

0 голосов
/ 18 января 2020

Шаг первый: узнайте, что такое кванты времени CAN: http://www.bittiming.can-wiki.info/

Шаг второй: проверьте, какие часы у вас есть: из вашего проекта.

Шаг три: поместите это значение на страницу выше.

Шаг четвертый: подготовьте свои значения !!

Шаг пятый: запрограммируйте соответствующий регистр CAN (или члены структуры, если вы используете HAL) с помощью значения step4.

Шаг шестой: праздновать успех.

...