diff --git a/src/drivers/uavcan/uavcan_drivers/stm32h7/driver/include/uavcan_stm32h7/can.hpp b/src/drivers/uavcan/uavcan_drivers/stm32h7/driver/include/uavcan_stm32h7/can.hpp index 984245b505..22f8ff739a 100644 --- a/src/drivers/uavcan/uavcan_drivers/stm32h7/driver/include/uavcan_stm32h7/can.hpp +++ b/src/drivers/uavcan/uavcan_drivers/stm32h7/driver/include/uavcan_stm32h7/can.hpp @@ -261,7 +261,7 @@ public: #else , num_ifaces_(1) #endif - , enabledInterfaces_(0x7) + , enabledInterfaces_(0x3) { uavcan::StaticAssert < (RxQueueCapacity <= CanIface::MaxRxQueueCapacity) >::check(); } diff --git a/src/drivers/uavcan/uavcan_drivers/stm32h7/driver/src/uc_stm32h7_can.cpp b/src/drivers/uavcan/uavcan_drivers/stm32h7/driver/src/uc_stm32h7_can.cpp index 92720faa24..9a5e32647a 100644 --- a/src/drivers/uavcan/uavcan_drivers/stm32h7/driver/src/uc_stm32h7_can.cpp +++ b/src/drivers/uavcan/uavcan_drivers/stm32h7/driver/src/uc_stm32h7_can.cpp @@ -1032,6 +1032,8 @@ int CanDriver::init(const uavcan::uint32_t bitrate, const CanIface::OperatingMod { int res = 0; + enabledInterfaces_ = enabledInterfaces; + UAVCAN_STM32H7_LOG("Bitrate %lu mode %d", static_cast(bitrate), static_cast(mode)); static bool initialized_once = false; @@ -1045,7 +1047,8 @@ int CanDriver::init(const uavcan::uint32_t bitrate, const CanIface::OperatingMod /* * FDCAN1 */ - if (enabledInterfaces & 1) { + if (enabledInterfaces_ & 1) { + num_ifaces_ = 1; UAVCAN_STM32H7_LOG("Initing iface 0..."); ifaces[0] = &if0_; // This link must be initialized first, res = if0_.init(bitrate, mode); // otherwise an IRQ may fire while the interface is not linked yet; @@ -1062,7 +1065,8 @@ int CanDriver::init(const uavcan::uint32_t bitrate, const CanIface::OperatingMod */ #if UAVCAN_STM32H7_NUM_IFACES > 1 - if (enabledInterfaces & 2) { + if (enabledInterfaces_ & 2) { + num_ifaces_ = 2; UAVCAN_STM32H7_LOG("Initing iface 1..."); ifaces[1] = &if1_; // Same thing here. res = if1_.init(bitrate, mode);