Debug-Probleme während CAN Tx

Gast #3217166
Hallo,

ich programmiere im Moment einen STM32F207 Mikrocontroller. Bisher habe 
ich CAN lediglich dazu verwendet, Nachrichten an den Mikrocontroller zu 
senden. Als Entwicklungsumgebung habe ich im Moment noch Atollic 
TrueSTUDIO Lite installiert.

Ich verwende CAN1 mit PD0: Rx PD1: Tx. Das Programm läuft ohne Probleme 
und lässt sich auch ohne Probleme debuggen, bis CAN_Transmit(CAN1, 
&canTx); aufgerufen wird. Egal ob der Aufruf innerhalb eines Interrupts 
oder außerhalb stattfindet funktioniert es nicht.
Bereits nach wenigen Sendevorgängen lößt der Mikrocontroller keinen 
einzigen Interrupt mehr aus und verliert die Verbindung zum Debugger. 
Selbst die zuvor aktivierten LEDs schalten sich dann aus.

Wird das Debuggen beendet und der Mikrocontroller neugestartet, dann 
funktioniert das Programm ohne Probleme. Der Debugger verwendet PA14, 
PA13, PA15, PB3 und PB4 - also PINs, die nicht von CAN verwendet werden.

Nachfolgend noch der verwendete Code zum initialisieren von CAN.
1
GPIO_InitTypeDef GPIO_InitStructure;
2
  CAN_InitTypeDef CAN_InitStructure;
3
  CAN_FilterInitTypeDef CAN_FilterInitStructure;
4
  NVIC_InitTypeDef NVIC_InitStructure;
5

6
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
7
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
8

9
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_CAN1);
10
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_CAN1);
11

12
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
13
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
14
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
15
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
16
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
17

18
  GPIO_Init(GPIOD, &GPIO_InitStructure);
19

20
  CAN_InitStructure.CAN_TTCM = DISABLE;
21
  CAN_InitStructure.CAN_ABOM = DISABLE;
22
  CAN_InitStructure.CAN_AWUM = DISABLE;
23
  CAN_InitStructure.CAN_NART = DISABLE;
24
  CAN_InitStructure.CAN_RFLM = DISABLE;
25
  CAN_InitStructure.CAN_TXFP = DISABLE;
26
  CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
27
  CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
28

29
  //500KBps (CAN mit 30MHz)
30
  CAN_InitStructure.CAN_BS1 = CAN_BS1_6tq;
31
  CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq;
32
  CAN_InitStructure.CAN_Prescaler = 4;
33
  CAN_Init(CAN1, & CAN_InitStructure);
34

35
  CAN_FilterInitStructure.CAN_FilterNumber = 0;
36
  CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
37
  CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
38
  CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;
39
  CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
40
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;
41
  CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
42
  CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
43
  CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
44
  CAN_FilterInit(&CAN_FilterInitStructure);
45

46
  CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
47

48
  NVIC_InitStructure.NVIC_IRQChannel=CAN1_RX0_IRQn;
49
  NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
50
  NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x16;
51
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x16;
52
  NVIC_Init(&NVIC_InitStructure);

Viele Grüße,
Florian

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.