STM32 CAN Interrupt Routine Empfang Durchsatz

OP #4396574
Lesenswert?

Hallo,
ich experimentiere gerade mit dem STM32F103. Dort möchte ich zwischen 
zwei STM32 Chips CAN-Daten austauschen. Hierzu habe ich beide 
Prozessoren per CAN miteinander verbunden.
Im Prinzip funktioniert das auch prima - bis auf - ja bis auf den Ich 
Durchsatz, der nur einem Teil der möglichen Baudrate entspricht. Ich 
betreibe den Bus mit 125kbaud, erreiche aber nur so etwa 1/10 Durchsatz. 
Kabelverbindung ist 50cm zwischen Sender und Empfänger 
(Abschlusswiderstände sind dran)

Falls ich zu schnell sende, werden beim Empfänger einfach Frames 
verschluckt.

Nachfolgend meine Interrupt Routine
1
void USB_LP_CAN1_RX0_IRQHandler(void) {
2

3
  CanRxMsg RxMessage;
4

5
  CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);
6
  can_counter++;
7
  //blink_yellow();  // just indicate we have received a CAN telegram
8
  LastCANmsg = RxMessage;
9
  //if (RxMessage.Data[0] == 1) {
10

11
  cand[0] = RxMessage.StdId;
12
  cand[1] = RxMessage.Data[0];
13
  cand[2] = RxMessage.Data[1];
14
  cand[3] = RxMessage.Data[2];
15
  cand[4] = RxMessage.Data[3];
16
  cand[5] = RxMessage.Data[4];
17
  cand[6] = RxMessage.Data[5];
18
  cand[7] = RxMessage.Data[6];
19
  cand[8] = RxMessage.Data[7];
20
  //print_can(RxMessage);
21
}

Beim senden teste ich den Transmitstatus:
1
TransmitMailbox = CAN_Transmit(CAN1, &canMessage);
2
while((CAN_TransmitStatus(CAN1, TransmitMailbox) != CANTXOK) && (i < 200000))
3
  {
4
    delay_us(1);
5
    i++;
6
  }
Meine Frage lautet:
Bei der Intitialisierung des CAN Busses setze ich:
1
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;

Wie gross ist denn der CAN FiFo 0 und wo stellt man dessen Größe ein?
Beim senden überprüfe ich die Tx REegister
Gruß

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren