Hallo zusammen,
bin dabei einen CANopen-Stack auf dem Nucleo-64 091RC Board mit dem µC
STM32F091RC in Betrieb zu nehmen. Laut Datenblatt sollte es möglich sein
CAN_RX an Pin PA11 und PB8 und und CAN_TX an Pin PA12 und PB9 zu hängen.
Leider funktioniert es bei mir nur am Port B, wenn ich den
CAN-Controller an Port A hänge werden keine CAN-Telegramme versendet.
Hier der Code:
//#define CAN_PORT_A
#if defined( CAN_PORT_A )
RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA, ENABLE );
GPIO_PinAFConfig( GPIOA, GPIO_PinSource11, GPIO_AF_4 ); /* see page 41
in data sheet */
GPIO_PinAFConfig( GPIOA, GPIO_PinSource12, GPIO_AF_4 );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12;
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( GPIOA, &GPIO_InitStructure );
#else
RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOB, ENABLE );
GPIO_PinAFConfig( GPIOB, GPIO_PinSource8, GPIO_AF_4 ); /* see page 42
in data sheet */
GPIO_PinAFConfig( GPIOB, GPIO_PinSource9, GPIO_AF_4 );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
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( GPIOB, &GPIO_InitStructure );
#endif
Wäre super, wenn mir jemand helfen könnte.
pegel schrieb:> Ich verstehe nicht ganz, wieso es an B funktioniert, oder hast Du noch> irgendwo ein "RCC_APB1ENR_CANEN" versteckt?
Ich habe nur die Portpin-Initialierung veröffentlicht. Die
Initialisierung vom CAN-Controller ist ja unabhängig von der
Pin-Initialisierung.
Guest schrieb:> Sicher das du an den richtigen Pins bist? An den Nucleos steckt man ja> auch gern mal daneben.>> Unabhängig davon wozu der Pull-Up?
Ich habe auch mal versucht den Pin 11 und Pin 12 vom Port A als normale
GPIO-Pins zu schalten. Das hat einwandfrei funktioniert. Also gesteckt
ist alles richtig. Ich schaffe es nur nicht den CAN-Controller mit
diesen Pins zu verbinden. Errata-Sheet habe ich auch schon
durchgeschaut. Aber vielleicht ist es doch ein Bug im Silicium.
Jan H. schrieb:> Beim Wechsel von pinconfig erst sysclock starten (hier für ein F3).> RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
Hallo Jan,
was soll das bringen? Bei mir ist generell eines der ersten Dinge die
ich mache den Systemtakt richtig zu setzen also bevor ich mit der
Initialisierung der Portpins starte.
PA und PB sind auch elektrisch anders, PB ist lt. Datasheet als FTf
gekennzeichnet. Wie ich das verstehe kann der mehr Strom treiben und
kann höhere Taktraten. Wird der CAN Bus da am Limit betrieben?
pegel schrieb:> mega_clever schrieb:>> #if defined( CAN_PORT_A )>> Wenn Du so etwas öfter benutzt, sollte man genau nachsehen.>> Da ist man gern mal falsch abgebogen.
Nicht wenn man Atollic TrueStudio benutzt ;-). Hier werden die per
Compilerswitch deaktivierten Bereiche automatisch "ausgegraut".
Johannes S. schrieb:> PA und PB sind auch elektrisch anders, PB ist lt. Datasheet als FTf> gekennzeichnet. Wie ich das verstehe kann der mehr Strom treiben und> kann höhere Taktraten. Wird der CAN Bus da am Limit betrieben?
Das habe ich auch schon gesehen. Der CAN-Bus wird nur mit 250kbit/s
betrieben. Das sollte kein Problem sein. Ich habe auch schon direkt mit
dem Oszi am CAN_TX-Pin (PortA Pin12) gemessen. Hier ist keinerlei
Aktivität zu messen.
moin,
ich arbeite mit dem STM32F103.
Der hat ein CAN-Modul, diese kann auch zwischen 2 Portpins umgeschaltet
werden.
Gibt es bei dem MC auch so etwas wie: AFIO MAPR CAN REMAP
VG
Pieter
Pieter schrieb:> moin,>> ich arbeite mit dem STM32F103.> Der hat ein CAN-Modul, diese kann auch zwischen 2 Portpins umgeschaltet> werden.> Gibt es bei dem MC auch so etwas wie: AFIO MAPR CAN REMAP>> VG> Pieter
Hallo Pieter,
Remapping gibt es bei diesem µC nicht. Den Pins können nur die in der
obigen Tabelle aufgelisteten Funktionen zugeordnet werden.
Das Nucleo F091RC habe ich auch, ich habe da mal ein Testprogram mit
Mbed reingeschoben. Die Daten kommen ordentlich auf PA oder PB raus, der
Chip kann es also.
Was ich auf die Schnelle als Unterschied sehe ist, das in Mbed mit
NoPullUp initialisiert wird.
Nachtrag:
Init mit PullUp macht hier aber auch keinen Unterschied, funktioniert.
Ich habe allerdings keinen CAN Treiber/Bus dran.
Johannes S. schrieb:> Das Nucleo F091RC habe ich auch, ich habe da mal ein Testprogram mit> Mbed reingeschoben. Die Daten kommen ordentlich auf PA oder PB raus, der> Chip kann es also.> Was ich auf die Schnelle als Unterschied sehe ist, das in Mbed mit> NoPullUp initialisiert wird.> Nachtrag:> Init mit PullUp macht hier aber auch keinen Unterschied, funktioniert.> Ich habe allerdings keinen CAN Treiber/Bus dran.
Hallo Johannes,
seltsam. Und bei dir sieht der Code für die Pin-Initialisierung gleich
aus wie bei mir? Ich mache am Montag mal einen Test mit einem anderen
NUCLEO-Board. Eventuell ist irgend etwas defekt. Ohne CAN-Transceiver
habe ich auch schon getestet.
Vielen Dank für deine Bemühungen. Schönes langes WE.