1 | GPIO_InitTypeDef GPIO_InitStructure;
|
2 | CAN_InitTypeDef CAN_InitStructure;
|
3 | CAN_FilterInitTypeDef CAN_FilterInitStructure;
|
4 |
|
5 | // Aktiviert die Clocks für den CAN-Bus
|
6 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE);
|
7 | RCC_APB1PeriphClockCmd(CAN1_RCC, ENABLE);
|
8 |
|
9 | // CAN Configure pin RX
|
10 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // PD0 => CANRX
|
11 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
|
12 | GPIO_Init(GPIOD, &GPIO_InitStructure);
|
13 |
|
14 | // CAN Configure pin TX
|
15 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; // PD1 => CANTX
|
16 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
|
17 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
18 | GPIO_Init(GPIOD, &GPIO_InitStructure);
|
19 |
|
20 | // CAN1 PD0 -> CAN1_RX, PD1 -> CAN1_TX
|
21 | GPIO_PinRemapConfig(GPIO_Remap2_CAN1, ENABLE);
|
22 |
|
23 | // CAN register init
|
24 | CAN_StructInit(&CAN_InitStructure);
|
25 | CAN_DeInit(CAN1);
|
26 |
|
27 | CAN_InitStructure.CAN_TTCM = DISABLE;
|
28 | CAN_InitStructure.CAN_ABOM = ENABLE;
|
29 | CAN_InitStructure.CAN_AWUM = DISABLE;
|
30 | CAN_InitStructure.CAN_NART = DISABLE;
|
31 | CAN_InitStructure.CAN_RFLM = DISABLE;
|
32 | CAN_InitStructure.CAN_TXFP = DISABLE;
|
33 | CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
|
34 |
|
35 | // Konfiguriert die CAN Baudrate für eine 72MHz Clock
|
36 | CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; // SJW 1-4
|
37 | CAN_InitStructure.CAN_BS1 = CAN_BS1_12tq; // Samplepoint 72%
|
38 | CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq; // Samplepoint 72%
|
39 | // Specifies the length of a time quantum. It ranges from 1 to 1024.
|
40 | //CAN_InitStructure.CAN_Prescaler = 2; // 1000 kbit/s = 1Mbit/s
|
41 | //CAN_InitStructure.CAN_Prescaler = 16; // 250 kbit/s
|
42 | CAN_InitStructure.CAN_Prescaler = 32; // 125 kbit/s
|
43 | //CAN_InitStructure.CAN_Prescaler = 80; // 50 kbit/s
|
44 |
|
45 | // Initialize the CAN_BS2 member
|
46 | CAN_Init(CAN1, &CAN_InitStructure);
|
47 |
|
48 | // CAN filter init
|
49 | CAN_FilterInitStructure.CAN_FilterNumber=0;
|
50 | CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
|
51 | CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
|
52 | CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;
|
53 | CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
|
54 | CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;
|
55 | CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
|
56 | CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;
|
57 | CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
|
58 | CAN_FilterInit(&CAN_FilterInitStructure);
|