From bc17626b4a1a1506c05990fa0a567b901a991cef Mon Sep 17 00:00:00 2001 From: Jacob Chisholm Date: Mon, 6 Mar 2023 16:05:00 -0500 Subject: [PATCH] add autoretransmit disable option --- st-f4can/include/can.hpp | 4 +++- st-f4can/src/can.cpp | 16 +++++++++------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/st-f4can/include/can.hpp b/st-f4can/include/can.hpp index eb835ea..6226c0d 100644 --- a/st-f4can/include/can.hpp +++ b/st-f4can/include/can.hpp @@ -74,9 +74,11 @@ extern void CANSetFilter(uint8_t index, uint8_t scale, uint8_t mode, uint8_t fif * =2: CAN2_RX mapped to PB12, CAN2_TX mapped to PB13 * * =3: CAN2_RX mapped to PB12, CAN2_TX mapped to PB13 + * + * @param automaticRetransmission - allow automatic retransmission to be disabled * */ -extern bool CANInit(BITRATE bitrate, int _CAN1, int _CAN2); +extern bool CANInit(BITRATE bitrate, int _CAN1, int _CAN2, bool automaticRetransmission = true); /** * Decodes CAN messages from the data registers and populates a diff --git a/st-f4can/src/can.cpp b/st-f4can/src/can.cpp index abaf3d2..d0bb398 100644 --- a/st-f4can/src/can.cpp +++ b/st-f4can/src/can.cpp @@ -103,7 +103,7 @@ void CANSetFilter(uint8_t index, uint8_t scale, uint8_t mode, uint8_t fifo, uint } -bool CANInit(BITRATE bitrate, int _CAN1, int _CAN2) +bool CANInit(BITRATE bitrate, int _CAN1, int _CAN2, bool automaticRetransmission) { // Reference manual // https://www.st.com/content/ccc/resource/technical/document/reference_manual/4d/ed/bc/89/b5/70/40/dc/DM00135183.pdf/files/DM00135183.pdf/jcr:content/translations/en.DM00135183.pdf @@ -157,12 +157,14 @@ bool CANInit(BITRATE bitrate, int _CAN1, int _CAN2) CAN2->MCR |= 0x1UL; // Require CAN2 to Initialization mode while (!(CAN2->MSR & 0x1UL)); // Wait for Initialization mode //printRegister("CAN2->MCR=", CAN2->MCR); - - //CAN1->MCR = 0x51UL; // Hardware initialization(No automatic retransmission) - CAN1->MCR = 0x41UL; // Hardware initialization(With automatic retransmission) - - //CAN2->MCR = 0x51UL; // Hardware initialization(No automatic retransmission) - CAN2->MCR = 0x41UL; // Hardware initialization(With automatic retransmission) + if(automaticRetransmission){ + CAN1->MCR = 0x41UL; // Hardware initialization(With automatic retransmission) + CAN2->MCR = 0x41UL; // Hardware initialization(With automatic retransmission) + } + else{ + CAN1->MCR = 0x51UL; // Hardware initialization(No automatic retransmission) + CAN2->MCR = 0x51UL; // Hardware initialization(No automatic retransmission) + } // Set bit rates