CAN_start stm32f405rgt6

OP #3808407
Lesenswert?
• ▲
▼
Hallo

Ich hab ein Problem mit dem CAN-Bus. Ich habe ein Beispielprogramm auf 
dem Board MCBSTM32F400 das funktioniert. Auf meiner Hardware setze ich 
den stm32f405rgt6 ein.

Die Init wird durchlaufen und die nötigen Register nach meinem Wissen 
richtig gesetzt. Aber beim Starten des CAN1 bleibt er hängen.
1
CAN_ERROR CAN_hw_start (uint32_t ctrl)  {
2
  CAN_TypeDef *CANx = CAN_CTRL[ctrl-1];
3

4
  CANx->MCR &= ~(1 << 0);             /* normal operating mode, reset INRQ   */
5
  while (CANx->MSR & (1 << 0))
6
  {
7
    osDelay(50);
8
  }
9
  return CAN_OK;
10
}

Aus diesem While kommt er nicht wieder raus. Dies bedeutet, dass er den 
Initialization mode nicht abschliessen kann. Die CAN Hardware ist nicht 
mit dem CAN Bus synchronisiert.

Den CAN Bus Treiber auf meiner Hardware habe ich schon einige Male 
eingesetzt.

Hat jemand einen Tipp? Ich steh grad völlig an.

Vielen Dank und Gruss

MC Bu
OP #3809738
Lesenswert?
• ▲
▼
Hat niemand eine Idee oder Tip?

Auch die Takteinstellungen habe ich mehrfach überprüft
1
/************************* CAN Hardware Configuration ************************/
2

3
// *** <<< Use Configuration Wizard in Context Menu >>> ***
4

5
// <o> CAN Peripheral Clock (in Hz) <1-1000000000>
6
//     <i> Same as APB1 clock
7

8
#define CAN_CLK               42000000

Das Beispielprogramm hat den Namen CAN_Ex1.

ich seh echt keinen Unterschied und keinen Grund, weshalb es nicht 
laufen sollte...

Viele Dank!
OP #3809748
Lesenswert?
• ▲
▼
so sieht die Funktion aus, die der thread aufruft:
1
void tsk_CAN_dispatch(bool init)
2
{
3
  if(init)
4
  {    
5
    CAN_init (CAN_CTRL_NBR , 50000 );  // Drivers:   CAN controller 0 init, 50 kbit/s                                                           
6

7
                              
8
    CAN_rx_object (CAN_CTRL_NBR, cCAN_RXchannel,  0, 0, EXTENDED_FORMAT);  // Enable reception of
9
                                        // of message on controller 1, channel        
10
                                        // is not used for STM32 (can be set to       
11
                                        // whatever value), data frame with           
12
                                        // standard id 00                             
13
    // Transmit object does not have to be enabled but channel has to be              
14
    // reserved for transmitting, in this example channel 1 is reserved for           
15
    // transmission                                                                   
16

17
    CAN_start (CAN_CTRL_NBR);                      // Start CAN controller 0   
18
  }
19
  else
20
  {
21

22
      tsk_CAN_DBGdispatch(CANobj);
23
      tsk_CAN_REMOTEdispatch(CANobj);
24

25
  }
26
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.