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

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