STM32: Implementierung CAN-Filter

Gast #5762985
Lesenswert?

Hallo zusammen,

ich möchte einen Filter für zwei CAN-IDs implementieren und bin mir aber 
um deren Funktion nicht ganz sicher. Im Anhang habe ich die hoffentlich 
dafür notwendigen Dokumente angefügt.

Kurz zur Planung:
Filtermodus: Liste
Filterskalierung: 16 Bit
Filterbank: 0
Filternummer: 0 und 1 (aber wie weise ich beide Nummern zu?)

Ist meine Implementation so korrekt? Und sind die IDs left align?
1
  CAN_FilterConfig.BankNumber = 0; 
2
  CAN_FilterConfig.FilterNumber = 0; // aber was ist mit 1?!?!?
3
  CAN_FilterConfig.FilterMode = CAN_FILTERMODE_IDLIST;
4
  CAN_FilterConfig.FilterScale = CAN_FILTERSCALE_16BIT;
5

6
  /* CAN_FxR1 Konfiguration */
7
  CAN_FilterConfig.FilterIdHigh = (0x701<<5);
8
  CAN_FilterConfig.FilterIdLow = (0x581<<5);;
9
  
10
  CAN_FilterConfig.FilterFIFOAssignment = CAN_FILTER_FIFO0;
11
  CAN_FilterConfig.FilterActivation = ENABLE;
12

13
  if (HAL_CAN_ConfigFilter(&hcan, &CAN_FilterConfig) != HAL_OK){
14
    Error_Handler();
15
  }

Vielen Dank :)
Angehängte Dateien:
Gast #5763022
Lesenswert?

Das HAL-API für die Filter ist ziemlich dämlich. Man muss erst reverse 
engineeren wie es intern funktioniert um dann die Eingaben entsprechend 
anzupassen. Insbesondere die ID-Angabe wird dank HAL komplizierter als 
direkter Register-Zugriff!

Daher die Empfehlung: Konfiguriere die Filter direkt per Register. Die 
sind wenigstens komplett dokumentiert.

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