Forum: Mikrocontroller und Digitale Elektronik STM32 CAN Interrupt Routine Empfang Durchsatz


von Wolfram L. (amazon)


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ß

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.