Сообщение от eddy
|
Вполне можно с этим бороться, я на STM32F042 тоже сначала мучился (при отсутствии "слушателей" на шине было невесело), но настройками удалось выкрутиться.
Вот так все ошибки сбрасываются:
Код:
|
if(CAN-›ESR & (CAN_ESR_BOFF | CAN_ESR_EPVF | CAN_ESR_EWGF)){ // much errors - restart CAN BUS
MSG("bus-off, restarting\n");
// request abort for all mailboxes
CAN-›TSR |= CAN_TSR_ABRQ0 | CAN_TSR_ABRQ1 | CAN_TSR_ABRQ2;
// reset CAN bus
RCC-›APB1RSTR |= RCC_APB1RSTR_CANRST;
RCC-›APB1RSTR &= ~RCC_APB1RSTR_CANRST;
can_status = CAN_ERROR;
} |
|
Ну ты корифей, я только не понял, что то за функция
MSG("bus-off, restarting\n"); // объясни как этим пользоваться
У меня еще вторая проблема
В библиотеке HAL есть функция деинициализации CAN шины, называется HAL_CAN_DeInit ( ( &hcan2 ) ) , так вот эта функция не только выключает CAN шину но и переводит эти два пина в обычные входы. Если эта функция вызывается до того как CAN шина запускалась, то она работает нормально, но если CAN шина уже запускалась, то сразу после команды
/* Configure IO Direction in Input Floating Mode */
GPIOx-›MODER &= ~(GPIO_MODER_MODER0 ‹‹ (position * 2U));
выскакивает 0xf9 счетчик ошибок REC по приему на CAN1 и нормально на CAN2. В последствии я вообще перестал использовать эту функцию деинициализации. Я подозреваю, что там получается соединились два входа. Вход Тх микросхемы Mcp 2551 и вход микропроцессора B9, надо наверно поставить резистор на 3,3V килоом 5.