pub

Fork of CANnucleo by Zoltan Hudak

Revision:
26:173eea49222f
Parent:
24:c5d348e65e24
Child:
27:321a5b290148
--- a/cannucleo_api.c	Tue Aug 16 21:09:11 2016 +0000
+++ b/cannucleo_api.c	Sun Dec 25 14:03:41 2016 +0000
@@ -164,6 +164,55 @@
         _canHandle.Init.BS2 = CAN_BS2_4TQ;
     }
     
+#elif defined(TARGET_NUCLEO_F303K8)
+    
+    // APB1 peripheral clock = 32000000Hz
+
+    switch(hz) {
+    case 1000000:
+        // 1000kbps bit rate
+        _canHandle.Init.Prescaler = 2;      // number of time quanta = 32000000/2/1000000 = 16
+        _canHandle.Init.SJW = CAN_SJW_1TQ;
+        _canHandle.Init.BS1 = CAN_BS1_11TQ; // sample point at: (1 + 11) / 16 * 100 = 75%
+        _canHandle.Init.BS2 = CAN_BS2_4TQ;
+        break;
+
+    case 500000:
+        // 500kbps bit rate
+        _canHandle.Init.Prescaler = 4;      // number of time quanta = 32000000/4/500000 = 16
+        _canHandle.Init.SJW = CAN_SJW_1TQ;
+        _canHandle.Init.BS1 = CAN_BS1_11TQ; // sample point at: (1 + 11) / 16 * 100 = 75%
+        _canHandle.Init.BS2 = CAN_BS2_4TQ;
+        break;
+
+    case 250000:
+        // 250kbps
+        _canHandle.Init.Prescaler = 8;      // number of time quanta = 32000000/8/250000 = 16
+        _canHandle.Init.SJW = CAN_SJW_1TQ;
+        _canHandle.Init.BS1 = CAN_BS1_11TQ; // sample point at: (1 + 11) / 16 * 100 = 75%
+        _canHandle.Init.BS2 = CAN_BS2_4TQ;
+        break;
+
+    case 125000:
+        // 125kbps
+        _canHandle.Init.Prescaler = 16;     // number of time quanta = 32000000/16/125000 = 16
+        _canHandle.Init.SJW = CAN_SJW_1TQ;
+        _canHandle.Init.BS1 = CAN_BS1_11TQ; // sample point at: (1 + 11) / 16 * 100 = 75%
+        _canHandle.Init.BS2 = CAN_BS2_4TQ;
+        break;
+
+    default:
+        // 125kbps (default)
+#if DEBUG
+        printf("Unknown frequency specified!\r\n");
+        printf("Using default 125kbps\r\n");
+#endif
+        _canHandle.Init.Prescaler = 16;     // number of time quanta = 32000000/16/125000 = 16
+        _canHandle.Init.SJW = CAN_SJW_1TQ;
+        _canHandle.Init.BS1 = CAN_BS1_11TQ; // sample point at: (1 + 11) / 16 * 100 = 75%
+        _canHandle.Init.BS2 = CAN_BS2_4TQ;
+    }
+
 #elif defined(TARGET_NUCLEO_F446RE)
     
     // APB1 peripheral clock = 45000000Hz