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:
Вот оригинальный код: 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 после каждого шага, который я делаю.
Или они генерируются 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_... функции.
В конце концов вы можете попытаться активировать подтягивание для 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 для тестирования и модифицированного его с помощью последовательных принтов
Хорошо, я ушел из режима 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 <-- это то, что нужно исправить дальше
Когда я включаю это прерывание
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/
Может быть
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 . Вот почему обработчик никогда не называл...
Я попробую это сегодня вечером. В основном прерывания здесь не нужны, но эта библиотека была построена так, чтобы она хранила сообщения во внутреннем буфере, поэтому я оставлю их как есть. Может быть, я добавлю несколько диагностических функций, чтобы узнать состояние контроллера и различные счетчики ошибок.
Правильное имя функции: __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, хорошая работа, чем ты.Конечно, во что бы то ни стало !
Я добавлю его в свою репо в качестве библиотеки, если вы ничего не имеете против.