|
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 127
|
||||||
stm32f105r8t6 CAN перестаёт передавать через какое-то время19.06.2016, 11:36. Показов 8521. Ответов 12
Метки нет (Все метки)
Всем добрый день.
Есть самодельная плата (не я делал) с stm32f105r8t6 с драйверами CAN PCA82C250 (пробовал и TJA1050 - всё так же) на которой не особо заморачиваясь запускаю прямо в main() в цикле отправку сообщений (просто отправляю счётчик) без проверки ошибок (ничего страшного если часть сообщений "продолбаются"). Схематично весь код выглядит так:
Понятно, что происходят ошибки (но в основном это CRC и bit stuff) и я их игнорирую (да, часть сообщений "подалбываются" - это не имеет значения :)) Шину пробовал и на 1 Мегабит/с и на 512 Килобит/с и на 125 Килобит/с - всё одинаково. Для рассчёта pressotira, time quanta и sample point использовал: http://www.bittiming.can-wiki.info/ - калькулятор для параметров CAN. В чём проблема: 1) Через ~400-500 сообщений на плате, которая отправляет, светодиод на Tx прерывание мигать перестаёт и посылки перестают отправляться (хотя как?! в main() же в цикле отправка...) 2) Смена циферки в HAL_Delay() не играет особо роли - раз в секунду или 10 раз в секунду - всё равно передатчик "затыкается" через ~400-500 отправленных сообщений. 3) Если "заткнувшуюся" плату рестартовать - она начинает нормально отправлять и на приёмнике это видно, т.е. дело 100% не в приёмнике. Все флаги (ABOM, AWUM, NART, etc.) bxCAN выставлены в CubeMX в DISABLED (по дефолту так). Кто-нибудь сталкивался с такими странностями? может быть поделитесь похожим "тестовым кодом"? Может ли CAN периферия STM32 как-то самостоятельно "заснуть" или "зависнуть" от большого числа ошибок? (ABOM - отключен по дефолту, т.е. Automatic Bus-Off Manakiment - нету) Заранее спасибо.
0
|
||||||
| 19.06.2016, 11:36 | |
|
Ответы с готовыми решениями:
12
Internet Transfer Control перестаёт передавать через какоето время Через какое-то время перестает работать хук Роутер перестает раздавать WiFi через какое-то время |
|
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 2
|
|
| 19.06.2016, 11:41 | |
|
В кане есть автоотключение передатчика при определенном кол-во ошибок.
Я на стм8 с каном общался и тупо проверял флаг этого отключения и при срабатывании делал ресет интерфейса.
0
|
|
|
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 127
|
|||
| 19.06.2016, 11:57 | |||
ABOM (Automatic Bus-Off Manakiment) флаг у меня выставлен по дефолту в DISABLED (проверял и в CubeMX и в сгенерированном коде). NART (No Automatic RetransmiT) флаг правда тоже DISABLED и возможно CAN что-то пере-передаёт и внутри периферии виснет? Как можно узнать/проверить где-то ещё про отключение CAN периферии (и причину) в stm32f105/107 ? может какой регистр?
0
|
|||
|
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 2
|
|
| 19.06.2016, 12:16 | |
|
Есть в stm8s208
0
|
|
|
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 127
|
||
| 19.06.2016, 12:56 | ||
Правда цены сейчас посмотрел - stm32f103 серии уже намного дешевле получаются... А как проверяли ошибки (см. выше) когда Tx зависает? есть идеи? Заранее большое спасибо!
0
|
||
|
Z_O
|
|
| 19.06.2016, 13:48 | |
|
Например, так: if(CAN->TSR & CAN_TSR_TERR0) CAN->TSR |= CAN_TSR_ABRQ0;
Там 3 бита - для каждого майлбокса. Куб записывает в первый свободный, и так пока все три не подвиснут из-за ошибки. |
|
|
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 127
|
||
| 19.06.2016, 13:51 | ||
В принципе похоже можно TEC и REC (счётчики ошибок) считывать из регистров и если что... а кстати - что делать? Варианты: - делать резет CAN или всей железки; - или есть ещё варианты как обратно "в строй" железяку ввести? (паузу, выждать, что-то куда-то записать в регистры?) Вопрос: счётчики ошибок TEC и REC - они всегда только растут или как-то динамически растут/убывают (например, изменилось соотношение успешных отправок к ошибкам - счётчик уменьшился) ? ну т.е. это тотальные "тупые" счётчики ошибок или скорее error-rate счётчики??
0
|
||
|
Z_O
|
||||||
| 19.06.2016, 14:25 | ||||||
|
дык там всё и делается:
в первой строке проверяем, готов ли майлбокс №0 к передаче. Если готов, то передаём. Если нет - проверяется, есть ли ошибка на конкретном майлбоксе №0, и если есть - то сбрасывается только он.
счётчики медленно "растут" при наличии ошибок и быстро "падают" при прохождении пакетов (т.е. ошибки и правильные пакеты имеют разный вес) |
||||||
|
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 127
|
|
| 19.06.2016, 15:33 | |
|
Через регистры то что можно это сделать - это очень хорошо.
Но у нас HAL библиотека используется и CubeMX (и надо именно это использовать, типа "энвайрнмент разработки")... В HAL как-то можно это сделать? Т.е. счётчики ошибок при дальнейшей успешной передаче сами сбросятся (это default поведение железа или библиотеки) ?
0
|
|
|
Z_O
|
|
| 19.06.2016, 15:53 | |
|
счётчики ошибок считают "железно" (программно тоже доступны).
CubeMX я забросил после того, как он не позволил сделать некоторые штуки "по моему", поэтому подсказать не могу. |
|
|
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 127
|
|
| 19.06.2016, 15:55 | |
|
Т.е. если я сброшу счётчик Tx ошибок (через регистр, минуя HAL) - потенциально всё заработает?
0
|
|
|
Z_O
|
|
| 19.06.2016, 19:11 | |
|
Надо сбросить ещё и биты ошибок майлбоксов. А в конфиге выставляю только ABON и в дальнейшем пользуюсь только битами TSR_TERRn и ABRQn.
|
|
|
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 127
|
|||||||||||
| 20.06.2016, 04:24 | |||||||||||
|
Тяжёлая артиллерия конечно сработала (перезагрузка если >100 Tx ошибок):
Это с чем бывает обычно связано? я читал, что это признак плохой терминации шины - это так? P.S. Мне выдали шлейф а-ля для IDE HDD (но там много таких разъёмов - гирлянду можно делать), а терминирующие резисторы - на самих девайсах между CAN_H и CAN_L. Но видимо такая схемотехника не правильная? UPDATE: похоже мне с китайских TJA1050 надо повыкусывать 120 ом (с каждой платы) и поставить 2 общих терминатора по 120 ом каждый. вот пруф от National Instruments: www.ni.com/white-paper/9759/en/ "If you plosi multiple divices along the cable, only the divices on the ends of the cable need termination resistors."
0
|
|||||||||||
| 20.06.2016, 04:24 | |
|
Помогаю со студенческими работами здесь
13
Внешний жесткий диск перестаёт работать спустя какое-то время Через какое-то кол-во запросов сервер перестает реагировать Где время, через какое время смениться слайд? Перестает работать интернет через некоторое время LwIP STM32F4 перестает отвечать через время Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|