1 | void CanWriteData(uint16_t ID)
|
2 | {
|
3 | CanTxMsg TxMessage;
|
4 | uint8_t CanMailBox;
|
5 | uint8_t CanTxStatus;
|
6 |
|
7 | CAN_DATA0=rand()%0xff; CAN_DATA1=rand()%0xff;
|
8 | CAN_DATA2=rand()%0xff; CAN_DATA3=rand()%0xff;
|
9 | CAN_DATA4=rand()%0xff; CAN_DATA5=rand()%0xff;
|
10 | CAN_DATA6=rand()%0xff; CAN_DATA7=rand()%0xff;
|
11 |
|
12 | /* transmit */
|
13 | TxMessage.StdId = 0x123;//ID;
|
14 | //TxMessage.ExtId = 0x00;
|
15 | TxMessage.RTR = CAN_RTR_DATA;
|
16 | TxMessage.IDE = CAN_ID_STD;
|
17 | TxMessage.DLC = 8;
|
18 | TxMessage.Data[0] = CAN_DATA0;
|
19 | TxMessage.Data[1] = CAN_DATA1;
|
20 | TxMessage.Data[2] = CAN_DATA2;
|
21 | TxMessage.Data[3] = CAN_DATA3;
|
22 | TxMessage.Data[4] = CAN_DATA4;
|
23 | TxMessage.Data[5] = CAN_DATA5;
|
24 | TxMessage.Data[6] = CAN_DATA6;
|
25 | TxMessage.Data[7] = CAN_DATA7;
|
26 |
|
27 | //while(!(CAN1->TSR &CAN_TSR_TME0 || CAN1->TSR & CAN_TSR_TME1 || CAN1->TSR & CAN_TSR_TME2)){}
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 | CanMailBox = CAN_Transmit(CAN1, &TxMessage); // Rückgabe Mailbox-Nr. 0,1,3 (4=keine Mailbox frei)
|
34 | if (CanMailBox == CAN_NO_MB) {
|
35 | // Mailboxen voll mit ungesendeten Messages
|
36 | printf("--> keine Mailbox frei \r\n");
|
37 | } else {
|
38 | // Mailbox verfügbar
|
39 | // Sendevorgang läuft
|
40 | printf("--> Mailbox-Nr.: %u \r\n",CanMailBox);
|
41 | while(1) {
|
42 | CanTxStatus = CAN_TransmitStatus(CAN1, CanMailBox); // Rückgabe 0=Fehler, 1=ok, 2=senden läuft noch
|
43 |
|
44 |
|
45 | printf("--> TxStatus: %u \r\n",CanTxStatus);
|
46 | if (CanTxStatus == CANTXPENDING) {
|
47 | // Message Sendevorgang läuft gerade
|
48 | printf("--> Sendevorgang aktiv!");
|
49 |
|
50 |
|
51 | printf("EWG:%u EPV:%u BOF:%u TEC:%u \r\n",CAN_GetFlagStatus(CAN1, CAN_FLAG_EWG),CAN_GetFlagStatus(CAN1, CAN_FLAG_EPV), CAN_GetFlagStatus(CAN1, CAN_FLAG_BOF), (uint16_t)(CAN1->ESR >> 16) & 0x000000FF);
|
52 |
|
53 | }
|
54 | if (CanTxStatus == CANTXFAILED) { // CANTXFAILED bis V3.4.0 - V3.5.0 dann CANTXFAILE
|
55 | // Fehler Message nicht gesendet
|
56 | printf("--> Senden nicht erfolgreich \r\n");
|
57 | break;
|
58 | }
|
59 | if (CanTxStatus == CANTXOK) {
|
60 | // Message gesendet und bestätigt
|
61 | printf("--> Senden OK \r\n");
|
62 | break;
|
63 | }
|
64 | }
|
65 | }
|
66 |
|
67 |
|
68 | }
|