1 | void CAN_Init()
|
2 | {
|
3 | GPIO_InitTypeDef GPIO_InitStructure;
|
4 | CAN_InitTypeDef CAN_InitStructure;
|
5 | NVIC_InitTypeDef NVIC_InitStructure;
|
6 | CAN_FilterInitTypeDef CAN_FilterInitStructure;
|
7 |
|
8 | //Init clock
|
9 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
|
10 |
|
11 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
|
12 |
|
13 | //For Olimex boards
|
14 | //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
|
15 |
|
16 | //Init GPIO Pins
|
17 | //For Olimex boards
|
18 | /*GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
|
19 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
|
20 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
21 | GPIO_Init(GPIOB, &GPIO_InitStructure);
|
22 |
|
23 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
|
24 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
|
25 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
26 | GPIO_Init(GPIOB, &GPIO_InitStructure);
|
27 |
|
28 | GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE);*/
|
29 |
|
30 | //CAN RX
|
31 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
|
32 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
|
33 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
34 | GPIO_Init(GPIOA, &GPIO_InitStructure);
|
35 |
|
36 | //CAN TX
|
37 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
|
38 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
|
39 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
40 | GPIO_Init(GPIOA, &GPIO_InitStructure);
|
41 |
|
42 | //Init CAN
|
43 | CAN_InitStructure.CAN_Prescaler = 2;
|
44 | CAN_InitStructure.CAN_SJW = CAN_SJW_2tq;
|
45 | CAN_InitStructure.CAN_BS1 = CAN_BS1_11tq;
|
46 | CAN_InitStructure.CAN_BS2 = CAN_BS2_4tq;
|
47 | CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
|
48 | CAN_InitStructure.CAN_TTCM = DISABLE;
|
49 | CAN_InitStructure.CAN_ABOM = DISABLE;
|
50 | CAN_InitStructure.CAN_AWUM = DISABLE;
|
51 | CAN_InitStructure.CAN_NART = ENABLE;
|
52 | CAN_InitStructure.CAN_RFLM = DISABLE;
|
53 | CAN_InitStructure.CAN_TXFP = DISABLE;
|
54 | CAN_Init(CAN1, &CAN_InitStructure);
|
55 |
|
56 | //Init NVIC
|
57 | NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
|
58 |
|
59 | NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
|
60 | NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
|
61 | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
|
62 | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
63 | NVIC_Init(&NVIC_InitStructure);
|
64 |
|
65 | CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
|
66 |
|
67 | CAN_AddFilter_16(0x0000, 0x0000, 0);
|
68 |
|
69 | //Init Vars
|
70 | memset(CanOutData, '\0', 8);
|
71 | }
|