STM32F4: CAN2 spinnt

Der chaotische Hauptfaden

Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese

Antworten
Benutzeravatar
Nicki
Beiträge: 3128
Registriert: So 11. Aug 2013, 20:16
Wohnort: wo Mosel und Rhein sich treffen

STM32F4: CAN2 spinnt

Beitrag von Nicki »

Und ich wunder mich noch, warum die Dinger so billig sind...
CAN1 (senden und empfangen) rennt wunderbar, nur CAN2 gibt Datenmüll raus (wenn auch mit korrektem Timing) und will nichts empfangen -.-
Initialisiert habe ich ihn mit

Code: Alles auswählen

void CAN2_Config(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;

  /* CAN GPIOs configuration **************************************************/

  /* Enable GPIO clock */
  RCC_AHB1PeriphClockCmd(CAN2_GPIO_CLK, ENABLE);

  /* Connect CAN pins to AF9 */
  GPIO_PinAFConfig(CAN2_COM_PORT, CAN2_RX_SOURCE, GPIO_AF_CAN2);
  GPIO_PinAFConfig(CAN2_COM_PORT, CAN2_TX_SOURCE, GPIO_AF_CAN2);

  /* Configure CAN RX and TX pins */
  GPIO_InitStructure.GPIO_Pin = CAN2_RX_PIN | CAN2_TX_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
  GPIO_Init(CAN_COM_PORT, &GPIO_InitStructure);

  /* CAN configuration ********************************************************/
  /* Enable CAN clock */
  RCC_APB1PeriphClockCmd(CAN2_CLK, ENABLE);

  //CAN1
  /* CAN register init */
  CAN_DeInit(CAN2);

  /* CAN cell init */
  CAN_DBGFreeze(CAN2, DISABLE);
  CAN_InitStructure.CAN_TTCM = DISABLE;
  CAN_InitStructure.CAN_ABOM = DISABLE;
  CAN_InitStructure.CAN_AWUM = ENABLE;
  CAN_InitStructure.CAN_NART = ENABLE;
  CAN_InitStructure.CAN_RFLM = DISABLE;
  CAN_InitStructure.CAN_TXFP = ENABLE;
  CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
  CAN_InitStructure.CAN_SJW = CAN_SJW_2tq;

  /* CAN Baudrate = 50 kBps (CAN clocked at 42MHz) */
  CAN_InitStructure.CAN_BS1 = CAN_BS1_15tq;
  CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq;
  CAN_InitStructure.CAN_Prescaler = 4;
  CAN_Init(CAN2, &CAN_InitStructure);

  /* CAN filter init */
  CAN_FilterInitStructure.CAN_FilterNumber = 0;
  CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
  CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
  CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;
  CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;
  CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
  CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
  CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
  CAN_FilterInit(&CAN_FilterInitStructure);

  /* Transmit Structure preparation */
  TxMessage2.StdId = 0x334;
  TxMessage2.ExtId = 0x01;
  TxMessage2.RTR = CAN_RTR_DATA;
  TxMessage2.IDE = CAN_ID_STD;
  TxMessage2.DLC = 7;

  /* Enable FIFO 0 message pending Interrupt */
  CAN_ITConfig(CAN2, CAN_IT_FMP0, ENABLE);
}
Senden läuft dann mit der ST-Library ab.
Ich weiß nicht mehr weiter, die PIC32-Ersatzlieferung (aber da zickten die Status-LEDs und dann muss ich wieder TQFP löten... BÖRKS) ist in weiter Ferne und ich will den Kram endlich ans Laufen bringen :(
Habe ich was übersehen?
Benutzeravatar
Nicki
Beiträge: 3128
Registriert: So 11. Aug 2013, 20:16
Wohnort: wo Mosel und Rhein sich treffen

Re: STM32F4: CAN2 spinnt

Beitrag von Nicki »

Wenn ich den Takt vom CAN1 beim Initialisieren auch aktiviere, funktioniert immerhin die Ausgabe problemlos.
Empfangen geht aber immer noch nicht >.>
Benutzeravatar
Nicki
Beiträge: 3128
Registriert: So 11. Aug 2013, 20:16
Wohnort: wo Mosel und Rhein sich treffen

Re: STM32F4: CAN2 spinnt

Beitrag von Nicki »

Meine Befürchtung hat sich bewahrheitet, CAN2 ist kein vollwertiges, eigenständiges Modul, sondern auf CAN1 angewiesen, die Folgen versuche ich mir gerade anzulesen.
Was für ne Bombe muss man geköppt haben, um sowas mülliges zu entwickeln?! :evil:

Ich wünsche mir den PIC32 zurück :(
Benutzeravatar
Nicki
Beiträge: 3128
Registriert: So 11. Aug 2013, 20:16
Wohnort: wo Mosel und Rhein sich treffen

Re: STM32F4: CAN2 spinnt

Beitrag von Nicki »

Jetzt rennt die Drecksau doch tatsächlich...
Da verspüre ich doch glatt die Motivation, das Ding jetzt noch fertigzustellen (bzw. den Part für CAN2 fertig für die ersten Testfahrten mit dem Zuheizer zu programmieren)
Fehlt noch der PWM-Teil...
Ich hab das Geraffel (Achtung, müllig aber rennt wenigstens :D ) mal in die Dropbox gehauen:
https://www.dropbox.com/sh/84a1z61upbddmco/VwDpaCVcuS
Cluster One
Beiträge: 177
Registriert: Mo 12. Aug 2013, 03:06
Wohnort: nähe Minden (Ostwestfalen)

Re: STM32F4: CAN2 spinnt

Beitrag von Cluster One »

Hallo,

welchen Käfer aus der F4 Serie setzt du ein ?

Da die Kiste ja recht komplex ist, hier mal ein Überblick, was in der Dose so drin steckt :D
(Auf der vorletzten Slide findest du die Infos zum Can etwas übersichtlich dargestellt)

http://www.emcu.it/SILICA-STDay-2011/ST ... _1hour.pdf

Gruß

Cluster One
Benutzeravatar
Nicki
Beiträge: 3128
Registriert: So 11. Aug 2013, 20:16
Wohnort: wo Mosel und Rhein sich treffen

Re: STM32F4: CAN2 spinnt

Beitrag von Nicki »

407VGT6
Aber jetzt rennts ja fürs Erste ;)
Ich habe schon mal den ganzen boardspezifischen Kram in ne eigene Datei verfrachtet, um die main.c scrollarm zu halten.
Jetzt fehlen noch timergesteuerter Interrupt (für pseudo-time-triggered-CAN, ich brauch ja nicht jede Millisekunde die Kühlwassertemperatur) und PWM (für den Zuheizer)
Cluster One
Beiträge: 177
Registriert: Mo 12. Aug 2013, 03:06
Wohnort: nähe Minden (Ostwestfalen)

Re: STM32F4: CAN2 spinnt

Beitrag von Cluster One »

Filterst du die CAN-Nachrichten vor und nutzt nen Puffer ?

Das CAN-Modul in den Chips ist relativ mächtig vom Funktionsumfang (siehe PDF)
-> Nachricht vorfiltern und in einen Fifo schieben und dann via Interupt verarbeiten
Cluster One
Beiträge: 177
Registriert: Mo 12. Aug 2013, 03:06
Wohnort: nähe Minden (Ostwestfalen)

Re: STM32F4: CAN2 spinnt

Beitrag von Cluster One »

Ich hatte noch ganz vergessen - von KEIL gibt es auch ein nettes Paper - extra nur für CAN und STM32:

http://www.keil.com/appnotes/files/apnt_236.pdf
Benutzeravatar
Nicki
Beiträge: 3128
Registriert: So 11. Aug 2013, 20:16
Wohnort: wo Mosel und Rhein sich treffen

Re: STM32F4: CAN2 spinnt

Beitrag von Nicki »

Die Appnote habe ich schon durchgelesen, nur habe ich mir anschließend nach dem Codebeispiel im Internet und im Keil-Ordner auf meinem PC die Finger wund gesucht :(
Filtern lass ich vorerst mal weil zu fehleranfällig (in der Entwicklung, nicht im späteren Betrieb)
Die 168MHz wollen genutzt werden :D
Antworten