1 | //Global
|
2 | //---------------------------------
|
3 | CAN_TxHeaderTypeDef TXHeader;
|
4 | uint32_t usedMailbox;
|
5 | uint8_t RXdata[8];
|
6 | uint16_t RXid;
|
7 | //---------------------------------
|
8 |
|
9 | void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan){
|
10 |
|
11 | RXid = can->rxFrame0.header.StdId;
|
12 | RXdata[0] = can->rxFrame0.data[0];
|
13 | RXdata[1] = can->rxFrame0.data[1];
|
14 | RXdata[2] = can->rxFrame0.data[2];
|
15 | RXdata[3] = can->rxFrame0.data[3];
|
16 | RXdata[4] = can->rxFrame0.data[4];
|
17 | RXdata[5] = can->rxFrame0.data[5];
|
18 | RXdata[6] = can->rxFrame0.data[6];
|
19 | RXdata[7] = can->rxFrame0.data[7];
|
20 | }
|
21 |
|
22 | void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan){
|
23 | RXid = can->rxFrame0.header.StdId;
|
24 | RXdata[0] = can->rxFrame1.data[0];
|
25 | RXdata[1] = can->rxFrame1.data[1];
|
26 | RXdata[2] = can->rxFrame1.data[2];
|
27 | RXdata[3] = can->rxFrame1.data[3];
|
28 | RXdata[4] = can->rxFrame1.data[4];
|
29 | RXdata[5] = can->rxFrame1.data[5];
|
30 | RXdata[6] = can->rxFrame1.data[6];
|
31 | RXdata[7] = can->rxFrame1.data[7];
|
32 | }
|
33 |
|
34 | HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan){
|
35 | //zu verschickende Daten handhaben
|
36 | CAN_Send (uint16_t id, uint8_t * data, uint8_t dlc);
|
37 | }
|
38 |
|
39 | HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan){
|
40 | //zu verschickende Daten handhaben
|
41 | CAN_Send (uint16_t id, uint8_t * data, uint8_t dlc);
|
42 | }
|
43 |
|
44 | HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan){
|
45 | //zu verschickende Daten handhaben
|
46 | CAN_Send (uint16_t id, uint8_t * data, uint8_t dlc);
|
47 | }
|
48 |
|
49 | void CAN_Init(){
|
50 |
|
51 | HAL_CAN_Start(hcan);
|
52 |
|
53 | HAL_CAN_ActivateNotification(hcan, CAN_IT_RX_FIFO0_MSG_PENDING);
|
54 | HAL_CAN_ActivateNotification(hcan, CAN_IT_RX_FIFO1_MSG_PENDING);
|
55 | HAL_CAN_ActivateNotification(hcan, CAN_IT_TX_MAILBOX_EMPTY);
|
56 | HAL_CAN_ActivateNotification(hcan, CAN_IT_ERROR_PASSIVE);
|
57 | HAL_CAN_ActivateNotification(hcan, CAN_IT_ERROR_WARNING);
|
58 | HAL_CAN_ActivateNotification(hcan, CAN_IT_BUSOFF);
|
59 | HAL_CAN_ActivateNotification(hcan, CAN_IT_LAST_ERROR_CODE);
|
60 | HAL_CAN_ActivateNotification(hcan, CAN_IT_ERROR);
|
61 |
|
62 | }
|
63 |
|
64 | void CAN_Send (uint16_t id, uint8_t * data, uint8_t dlc) {
|
65 |
|
66 | TXHeader.StdId = id;
|
67 | TXHeader.DLC = dlc;
|
68 |
|
69 | HAL_CAN_DeactivateNotification(hcan, CAN_IT_TX_MAILBOX_EMPTY);
|
70 |
|
71 | if (HAL_CAN_GetTxMailboxesFreeLevel(hcan)) {
|
72 | HAL_CAN_AddTxMessage(hcan, &TXHeader, data, &usedMailbox);
|
73 | }
|
74 | HAL_CAN_ActivateNotification(can->IO.hcan, CAN_IT_TX_MAILBOX_EMPTY);
|
75 | }
|