[Завершено] может для LibeMaple + F4

michael_l
Сб 08 сентября 2018 г. 13:27
Я стараюсь заставить библиотеку Phonog Hardwarecan работать с F4 Libmaple.

Вот оригинальный код: https: // github.com/phonog/arduino_stm32 ... Arecan/SRC

Я добавил rcc_can в rccf4.H/RCCF4.в

[Rcc_can] = { .clk_domain = apb1, .line_num = 25},

а также изменил инициалы NVIC, чтобы он собирал OK. Также AFIO RCC не используется в F4.

В настоящее время проблема заключается в том, что может входить в режим init, но не оставляет его, и это таймауты. Init выполняется в функции can_init.

Из ссылки:

После завершения инициализации программное обеспечение должно запросить аппаратное обеспечение для нормального ввода
Режим, чтобы иметь возможность синхронизировать на шине CAN и начало приема и трансмиссии.
Запрос на вход в обычный режим выдается путем очистки бита INRQ в CAN_MCR
зарегистрировать. BXCAN входит в нормальный режим и готов участвовать в мероприятиях автобуса, когда он
синхронизировался с передачей данных на шине CAN. Это делается в ожидании
Появление последовательности из 11 последовательных рецессивных битов (состояние простаивания автобусов). Переключатель на
Нормальный режим подтверждается аппаратным обеспечением путем очистки бита inak в can_msr
зарегистрировать.


У меня есть небольшая тестовая скамья, банка с 2 устройствами, завершенными с резисторами 120 Ом. Первым является адаптер USBTIN CAN-BUS, а другой-"Mini Blue Poard" AKA VCC_GND_F407. Я протестировал с помощью микропитона, который может работать с драйверами, а USBTIN получает сообщения от F4 и показывает их в программе просмотра, так что BAN BUB работает, и работает аппаратное обеспечение в F4.

Код Python: from pyb import CAN import time #250kBit, F4, PB8 (RX), PB9 (TX) can = CAN(1, CAN.NORMAL, extframe=False, prescaler=12, sjw=1, bs1=11, bs2=2) can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126)) # set a filter to receive messages with id=123, 124, 125 and 126 while True: print("sending...") can.send(b'00000000', 1) # send a message with id 123 time.sleep(.005) print(can.info())

Стивестронг
Сб 08 сентября 2018 г. 16:40
AFIO действительно не реализован в F4, но настройки GPIO выглядят хорошо.
В конце концов вы можете попытаться активировать подтягивание для RX PIN.

Убедитесь, что записи RCC_CAN1/2 в RCCF4.H/C имеет одинаковую позицию в соответствующих списках.

Некоторые намеки на то, что проверить: https: // Stackoverflow.com/a/13821030
Может, попробуйте режим Loopback?

Вы очистили бит INRQ?
Я бы проверил свою программу. Статус регистров CAN_MSR/MCR после каждого шага, который я делаю.
[michael_l - Сб 08 сентября 2018 г., 13:27] - BXCAN входит в нормальный режим и готов участвовать в мероприятиях автобуса, когда он
синхронизировался с передачей данных на шине CAN. Это делается в ожидании
Появление последовательности из 11 последовательных рецессивных битов (состояние простаивания автобусов).
Мне не ясно, откуда должны исходить эти рецессивные биты, от другого подключенного устройства?
Или они генерируются HW при отправке некоторых данных?
Постарайтесь отправить некоторые данные сразу после входа в обычный режим (очистив INRQ IT), и проверьте состояние регистров MSR/MCCR.

Не могли бы вы поделиться своей разработкой на GitHub, чтобы я мог проверить ваш текущий код?

Вы можете удалить все вещи, связанные с USB и AFIO из кода, изготовленного Phonog.

Я не уверен, где и как, но вы должны присвоить части кода этим прерываниям: __irq_can1_tx, __irq_can1_rx0, (__irq_can1_rx1 может быть необязательно). Associated NVIC_CAN1_TX, NVIC_CAN1_RX0, NVIC_CAN1_RX1 также следует использовать в NVIC_IRQ_... функции.

michael_l
Сб 08 сентября 2018 г. 18:49
Спасибо за помощь!

Хорошо, я ушел из режима init, работая, изменив это:

gpio_set_mode (pd0, gpio_input_floting); --> gpio_set_mode (pd0, gpio_af_input);

Я не понял, что это нужно.

RCC_APB1RSTR AT BIT 25 IS для CAN1. Я использую только модуль can1 здесь. Также тот же бит 25 для rcc_apb1enr.

Отправка сообщений по -прежнему терпит неудачу... Так что это странно. Думаю, мне придется начать отладку. Рецессивные биты читаются из автобуса

Режим Loopback остановит программу, поэтому я не пробовал ее так много.

Да, я положу код в GitHub, но позже. Прилагается .zip -файл. Хотя он содержит некоторые твердые кодированные вещи, например, использование PD0/PD1 для выводов. Я использовал HardwareCanexample.INO для тестирования и модифицированного его с помощью последовательных принтов

michael_l
Солнце 09 сентября 2018 г., 21:21
Небольшое обновление, которое я получил. И RX также работает в режиме опроса. Пришлось изобретать небольшой взлом для этого.

1. Конфигурация скорости бодского уровня для 500 кбит была неверной
2. Мне пришлось отключить, можно прерывать, или это видит MCU <-- это то, что нужно исправить дальше

Когда я включаю это прерывание nvic_irq_enable(NVIC_CAN1_TX);

Стивестронг
Пн 10 сентября 2018 г., 6:41
Ищите аналогичные прерывания в ядре, как они обрабатываются и как они определены.
Может быть
extern "c" void __irq_can_tx (void)
...
}
помогает?

Кроме того, вы можете проверить с отладчиком адрес вектора прерывания для этого IRQ.
Просмотр просмотра файлов карты также может иногда помочь: http: // www.Sikorskiy.net/prj/amap/

michael_l
Пн 10 сентября 2018 г., 11:47
Нашел ошибку!

Правильное имя функции: __irq_can1_tx и я использую __irq_can_tx . :рулон: Вот почему обработчик никогда не называл...

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

Стивестронг
Пн 10 сентября 2018 г. 12:19
Я рад, что вы сделали это, я упомянул (правильно) имена функций ISR В моем посте выше, Мой первый ответ.
Держите нас в курсе!

michael_l
Пн 10 сентября 2018 г. 22:26
Я немного проверял это, и, кажется, работает нормально после того, как я исправил конфигурации скорости бодского уровня и добавил правильные имена функций обработки прерывания. Я думаю, что показатели бодли немного неверны в репо Фоноге, так как он использует 18 TQ, но сберегает на BTR то, что указывает на TQ 21, но, конечно, они все еще могут работать нормально. Я не знаю. В моем случае только 125 КБ сработало, и мне пришлось изменить другие конфигурации, чтобы они работали на меня. Я протестирую еще немного и выпустим код

michael_l
Ср 12 сентября 2018 г. 12:11
Итак, здесь работает библиотека CAN для Libmaple/F4. Хорошая вещь по сравнению с F1 - это то, что USB -серийные работы также с банкой.

Я протестировал все скорости передачи данных, также добавил функцию статистики ошибки. Два примера для нормального режима и петли.

Стивестронг
Ср 12 сентября 2018 12:58
@michael_i, хорошая работа, чем ты.
Я добавлю его в свою репо в качестве библиотеки, если вы ничего не имеете против.

michael_l
Ср 12 сентября 2018 г., 13:19
[Стивестронг - Ср 12 сентября 2018 12:58] - @michael_i, хорошая работа, чем ты.
Я добавлю его в свою репо в качестве библиотеки, если вы ничего не имеете против.
Конечно, во что бы то ни стало !