Forum: Mikrocontroller und Digitale Elektronik Debug-Probleme während CAN Tx


von Florian (Gast)


Lesenswert?

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

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.