pub
Fork of CANnucleo by
Diff: cannucleo_api.c
- 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