Оказалось, что действительно CAN на F303 очень сильно похож на CAN у F103. Портирование прошло очень даже безболезненно (разве что несколько иные имена прерываний и настройки пинов как в F0). Вот — код. Я спаял на мелкой макетке MCP2551 с минимальной обвязкой, подключил — вуаля, не работает. Проверил: перепутал cantx и canrx. Потом — бац, опять не работает (а, здесь уже скорости разные вышли). В конце-концов туда-сюда все ОК. Правда, глянул я на "flood ping": если слать сообщения каждую миллисекунду, то некоторые пропускаются. Все-таки, если понадобится делать надежный монитор шины, не отваливающийся даже при адовом потоке данных, заполнение буфера нужно будет сделать в прерываниях, а не поллингом, как сейчас. С другой стороны, нет сообщений об ошибке переполнения буфера (но, возможно, это просто я где-то накосячил и нужный флаг не выставил). В реальных условиях, когда от силы пара десятков сообщений в секунду по шине бегает, все ОК. UPD: добавил "мегафлуд" (не ограничивая интервал — только по занятости шины). Увидел много приколов. Во-первых, таки пакеты никуда не теряются, как ни странно. Во-вторых, я где-то неправильно флаги выставил, из-за чего первые два пакета, попадающих в очередь, выплевываются последними! В-третьих, USB адово лажает: когда я заканчиваю "флудинг", в соседней консоли еще несколько секунд льется поток данных… Ну и в-четвертых: поднять скорость выше 500кбод на проводках длиной 15см у меня не получилось. Виноваты: а) руки из жопы, б) какой-то из преобразователей уровня (или MCP2551, или ISO1050), в) смесь из говна и палок (натыкал, паимашь, убогими абдуринопроводочками…). Во, какая убогость: