From 93fe54bb21bf09aef3ca6dcad5703357523a352a Mon Sep 17 00:00:00 2001 From: Pavel Kirienko Date: Fri, 9 Oct 2015 05:10:13 +0300 Subject: [PATCH] Experimental fix to CAN bus lockup bug --- libuavcan_drivers/stm32/driver/src/uc_stm32_can.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libuavcan_drivers/stm32/driver/src/uc_stm32_can.cpp b/libuavcan_drivers/stm32/driver/src/uc_stm32_can.cpp index 77b8378a02..6d5fa5212b 100644 --- a/libuavcan_drivers/stm32/driver/src/uc_stm32_can.cpp +++ b/libuavcan_drivers/stm32/driver/src/uc_stm32_can.cpp @@ -516,8 +516,12 @@ int CanIface::init(const uavcan::uint32_t bitrate, const OperatingMode mode) /* * Hardware initialization */ - can_->MCR &= ~bxcan::MCR_SLEEP; // Exit sleep mode - can_->MCR |= bxcan::MCR_INRQ; // Request init + { + CriticalSectionLocker lock; + + can_->MCR &= ~bxcan::MCR_SLEEP; // Exit sleep mode + can_->MCR |= bxcan::MCR_INRQ; // Request init + } if (!waitMsrINakBitStateChange(true)) {