Hallo
Bei mir funktioniert leider die HAL Funktion nicht, deshalb bin ich
dabei die Funktion liesDaten zu schreiben.
Ich habe sie soweit fertig und versuche damit die angekommenen Daten
RDLR_ und RDHR_ Byteweise in Data[0-8] zu schreiben.
Aber irgendwie schreibt er mir nur die Data[0] und Data[4], welche
zufällig so richtig sind.
Deshalb würde ich gerne wissen, was ich da nicht richtig mache.
Unten in der for versuche ich solange i kleiner 3 ist zu verunden und
schiebe immer 8 bits nach links, um Data[0-3] zu erhalten.
Wenn msk = 0 ist stelle ich auf den Anfanswert zurück und beginne von
neu, diesmal aber mit dem HB
1 | ausführung im main (einmal)
|
2 |
|
3 | main:
|
4 | CAN_getData(&rxMessage.Data[0]);
|
5 |
|
6 | can.c
|
7 | CanTxMsgTypeDef txMessage;
|
8 | CanRxMsgTypeDef rxMessage;
|
9 |
|
10 | can.h
|
11 | extern CanTxMsgTypeDef txMessage;
|
12 | extern CanRxMsgTypeDef rxMessage;
|
13 | void CAN_getData(uint8_t* msg);
|
14 |
|
15 | im can.c
|
16 | function:
|
17 | void liesDaten(uint8_t* msg)
|
18 | {
|
19 | /* check if a message is filtered and received by FIFO 0 */
|
20 | if ((CAN->RF0R & CAN_RF0R_FMP0)!=0)
|
21 | {
|
22 | uint32_t LB = 0;
|
23 | uint32_t HB= 0;
|
24 |
|
25 | LB = CAN->sFIFOMailBox[0].RDLR; // read data low bits register
|
26 | HB= CAN->sFIFOMailBox[0].RDHR; // read data high bits register
|
27 | releaseFIFOx(FIFO_0); // FIFO must be released
|
28 |
|
29 | uint32_t msk = 0xFF;
|
30 |
|
31 | for(uint8_t i = 0; i<8; i++)
|
32 | {
|
33 | if(i<=3)
|
34 | {
|
35 | msg[i] = LB& msk;
|
36 | msk <<= 8;
|
37 | }else
|
38 | {
|
39 | msg[i] = HB & msk;
|
40 | msk <<= 8;
|
41 | }
|
42 |
|
43 | if(msk == 0)
|
44 | msk = 0xFF;
|
45 | }
|
46 | }
|
47 |
|
48 | }
|
Ich wäre um Ratschläge sehr dankbar