CAN senden - STM32 F4

OP #3031331
Lesenswert?
• ▲
▼
Ich versuche die CAN-Kommunikation für STM32F407IG sicherherzustellen, 
in dem Daten von CAN gesendet werden.
Mein Code enthält aber bestimmt eine Fehler, da die Überprüfung durch 
die Diodenbeleuchtung gescheitert ist.
kann mir evtl. jemand helfen die Fehler zu suchen ?
Wie kann man am besten die CAN-Kommunikation testen ?

Vielen Dank



Mein Code:

#include "stm32f4xx_rcc.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_can.h"
#include "misc.h"
#include "stm32f4xx.h"

           GPIO_InitTypeDef GPIO_InitStructure;
    CAN_InitTypeDef CAN_InitStructure;
              uint8_t Status = 0;
              uint8_t TransmitMailbox = 0;


void CAN_send (void)
{
SystemInit();
STM_EVAL_LEDInit();


 RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);

 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;// Mode IPU (input) ?!
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOB, &GPIO_InitStructure);

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOB, &GPIO_InitStructure);

 GPIO_PinAFConfig(GPIOB, GPIO_PinSource8, GPIO_AF_CAN1);
 GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_CAN1);

 CAN_InitStructure.CAN_Prescaler = 2;
 CAN_InitStructure.CAN_SJW = CAN_SJW_2tq;
 CAN_InitStructure.CAN_BS1 = CAN_BS1_11tq;
 CAN_InitStructure.CAN_BS2 = CAN_BS2_4tq;
 CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
 CAN_InitStructure.CAN_TTCM = DISABLE;
 CAN_InitStructure.CAN_ABOM = DISABLE;
 CAN_InitStructure.CAN_AWUM = DISABLE;
 CAN_InitStructure.CAN_NART = ENABLE;
 CAN_InitStructure.CAN_RFLM = DISABLE;
 CAN_InitStructure.CAN_TXFP = DISABLE;
 CAN_Init(CAN1, &CAN_InitStructure);

 /* CAN_Filter_int */
 CAN_FilterInitTypeDef CAN_FilterInitStructure;
 CAN_FilterInitStructure.CAN_FilterNumber = 0;
 CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
 CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
 CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0123 << 5;
 CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
 CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;
 CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFF;
 CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
 CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
 CAN_FilterInit(&CAN_FilterInitStructure);

/* CAN_Transmit */
  CanTxMsg TxMessage;
  TxMessage.StdId = 0x123;
  TxMessage.ExtId = 0;
  TxMessage.RTR = CAN_RTR_DATA;
  TxMessage.IDE = CAN_ID_STD;
  TxMessage.DLC = 8;
  TxMessage.Data[0] = 4;
  TxMessage.Data[1] = 4;

TransmitMailbox = CAN_Transmit(CANx, &TxMessage);
 Status= (CAN_TransmitStatus(CANx, TransmitMailbox);

if (Status == CAN_TxStatus_Ok)
    {STM_EVAL_LEDOn (LED1);
    }
    else
    STM_EVAL_LEDOn (LED2);

while(1)
{}
}
#3087342
Lesenswert?
• ▲
▼
Testen geht ganz gut mit nem PCAN, oder mein neuer liebling isCAN USB. 
Das Teil ist was Handhabung der Libs a ngeht genial. Ein Logiganalyzer 
würde auch schon helfen, um zu sehen ob überhaupt was passiert. 
Prinzipiell sei zum Canbus noch gesagt, dass du zum Testen min. einen 
Weiteren Teilnehmer hast, der fleißig ein ack sendet, sonst schaltet 
sich dein Controllen nach einigen "Fehlversuchen" ab. Benutzt du 
Tranceiver? Musst du nämlich ;)

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.