1 | //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
2 | void stm32F7_HAS_CAN_GPIO_Init(){
|
3 | //~~~~~~~~~~~~ HAL_GPIO_Init(); ~~~~~~~~~~~~~~~~~~~~~~~~
|
4 |
|
5 | GPIO_InitTypeDef GPIO_InitStruct;
|
6 |
|
7 | GPIO_InitStruct.Pin = CAN1_TX | CAN1_RX;
|
8 | GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
9 | GPIO_InitStruct.Pull = GPIO_NOPULL;
|
10 | GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
|
11 | GPIO_InitStruct.Alternate = GPIO_AF9_CAN1;
|
12 |
|
13 | HAL_GPIO_Init(CAN1_PORT, &GPIO_InitStruct);
|
14 | }
|
15 |
|
16 |
|
17 | //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
18 |
|
19 | void stm32F7_HAS_CAN_Init(){
|
20 |
|
21 | CANx_CLK_ENABLE();
|
22 | CANx_GPIO_CLK_ENABLE();
|
23 |
|
24 |
|
25 | stm32F7_HAS_CAN_GPIO_Init();
|
26 |
|
27 | CAN_FilterConfTypeDef sFilterConfig;
|
28 |
|
29 | /*##-1- Configure the CAN peripheral #######################################*/
|
30 | CanHandle.Instance = CAN1;
|
31 | CanHandle.pTxMsg = &TxMessage;
|
32 | CanHandle.pRxMsg = &RxMessage;
|
33 |
|
34 |
|
35 |
|
36 | CanHandle.Init.TTCM = DISABLE;
|
37 | CanHandle.Init.ABOM = DISABLE;
|
38 | CanHandle.Init.AWUM = DISABLE;
|
39 | CanHandle.Init.NART = DISABLE;
|
40 | CanHandle.Init.RFLM = DISABLE;
|
41 | CanHandle.Init.TXFP = DISABLE;
|
42 | // CanHandle.Init.Mode = CAN_MODE_NORMAL;
|
43 | CanHandle.Init.Mode = CAN_MODE_LOOPBACK;
|
44 | CanHandle.Init.SJW = CAN_SJW_1TQ;
|
45 | CanHandle.Init.BS1 = CAN_BS1_7TQ;
|
46 | CanHandle.Init.BS2 = CAN_BS2_2TQ;
|
47 | CanHandle.Init.Prescaler = 10; //500 Mbps
|
48 |
|
49 | /*##-2- Configure the CAN Filter ###########################################*/
|
50 | sFilterConfig.FilterNumber = 0;
|
51 | sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
|
52 | sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
|
53 | sFilterConfig.FilterIdHigh = 0x0000;
|
54 | sFilterConfig.FilterIdLow = 0x0000;
|
55 | sFilterConfig.FilterMaskIdHigh = 0x0000;
|
56 | sFilterConfig.FilterMaskIdLow = 0x0000;
|
57 | sFilterConfig.FilterFIFOAssignment = 0;
|
58 | sFilterConfig.FilterActivation = ENABLE;
|
59 | sFilterConfig.BankNumber = 14;
|
60 |
|
61 |
|
62 |
|
63 | /*##-3- Configure Transmission process #####################################*/
|
64 | CanHandle.pTxMsg->StdId = 0x321;
|
65 | CanHandle.pTxMsg->ExtId = 0x01;
|
66 | CanHandle.pTxMsg->RTR = CAN_RTR_DATA;
|
67 | CanHandle.pTxMsg->IDE = CAN_ID_STD;
|
68 | CanHandle.pTxMsg->DLC = 8;
|
69 |
|
70 | HAL_CAN_Init(&CanHandle);
|
71 | HAL_CAN_ConfigFilter(&CanHandle, &sFilterConfig);
|
72 |
|
73 | HAL_CAN_Transmit(&CanHandle, 500);
|
74 |
|
75 |
|
76 | HAL_NVIC_SetPriority(CAN1_RX0_IRQn, 3, 0);
|
77 | HAL_NVIC_EnableIRQ(CAN1_RX0_IRQn);
|
78 |
|
79 |
|
80 | }
|
81 | //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
82 | void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* CanHandle)
|
83 | {
|
84 | RxMsgCNT++;
|
85 |
|
86 | }
|