So konfigurieren Sie die STM32103 für KÖNNEN und Zuordnung der pins PB8 und PB9

Ich versuche, auf dieser Bühne, senden Sie einfach eine übertragung KANN auf den STM32F103 V8T6. Der chip implementiert ist, auf einem Brett, das maßgeschneidert war von meiner Firma. Blick auf den Schaltplan sehe ich, dass die Tx-und Rx-pins zugeordnet PB9 (Tx) und PB8 (Rx). Alle, dass gesagt wird, ich habe in der Lage gewesen, LoopBack-Modus erfolgreich (mit dem neuesten Beispiel von STM "V3.5.0"), haben aber bislang NICHT in der Lage zu bekommen, Normal-Modus arbeiten. Kann jemand bitte lassen Sie mich wissen, wenn Sie sehen, einen offensichtlichen Fehler in meiner ursprünglichen Konfiguration?! Ich habe nur den code für Konfiguration und verließ die übertragungs-Funktion aufrufen.

int main (void)
{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);



NVIC_InitTypeDef NVIC_InitStructure;

NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;

NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);



 GPIO_InitTypeDef GPIO_InitStructure;


/* Configure CAN pin: RX */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

GPIO_Init(GPIOB, &GPIO_InitStructure);


/* Configure CAN pin: TX */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_Init(GPIOB, &GPIO_InitStructure);


//Remap2 is for PB8 and PB9

GPIO_PinRemapConfig(GPIO_Remap2_CAN1 , ENABLE);


}

Hier ist meine Funktion transmit

void CAN_TransmitMyMsg(void)
{
  CAN_InitTypeDef        CAN_InitStructure;
  CAN_FilterInitTypeDef  CAN_FilterInitStructure;
  CanTxMsg TxMessage;
  uint32_t i = 0;
  uint8_t TransmitMailbox = 0;
  uint8_t status = 0;

  /* CAN register init */
  CAN_DeInit(CANx);
  CAN_StructInit(&CAN_InitStructure);

  /* CAN cell init */
  CAN_InitStructure.CAN_TTCM=DISABLE;
  CAN_InitStructure.CAN_ABOM=DISABLE;
  CAN_InitStructure.CAN_AWUM=DISABLE;
  CAN_InitStructure.CAN_NART=DISABLE;
  CAN_InitStructure.CAN_RFLM=DISABLE;
  CAN_InitStructure.CAN_TXFP=DISABLE;
  CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;

  /* Baudrate = 125kbps*/
  CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
  CAN_InitStructure.CAN_BS1=CAN_BS1_2tq;
  CAN_InitStructure.CAN_BS2=CAN_BS2_3tq;
  CAN_InitStructure.CAN_Prescaler=48;
  CAN_Init(CANx, &CAN_InitStructure);

  /* CAN filter init */
  CAN_FilterInitStructure.CAN_FilterNumber=0;
  CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
  CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
  CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;
  CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;
  CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;  
  CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;
  CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
  CAN_FilterInit(&CAN_FilterInitStructure);

  /* transmit */
  TxMessage.StdId=0x11;
  TxMessage.RTR=CAN_RTR_DATA;
  TxMessage.IDE=CAN_ID_STD;
  TxMessage.DLC=2;
  TxMessage.Data[0]=0xCA;
  TxMessage.Data[1]=0xFE;

  TransmitMailbox=CAN_Transmit(CANx, &TxMessage);

  //wait until CAN transmission is OK
  i = 0;
  while((status != CANTXOK) && (i != 0xFFFF))               
  {
    status = CAN_TransmitStatus(CANx, TransmitMailbox);
    i++;
  }

}

Diese Ressource hilfreich war, aber letztendlich nicht ausreichend.

STM32F103 microcontroller CAN-Nachrichten

Dank!

Daniel

Nun, zunächst einmal, die tatsächliche bus-arbeiten (Kabel, terminatoren usw)? Ist tatsächlich etwas übertragen (Speicher-Umfang, KANN anlyser etc)? Welche Fehler werden gemeldet, wenn jeder, sowohl die tx-und rx-Kanäle? Erwarten Sie von uns zu debug-hardware-blog?
Ich soll-Zustand für den Datensatz, ich bin ganz neu KÖNNEN. Die output-pins von der platine verdrahtet sind, um ein make-Umschalt-platine, die beendet wird, wie empfohlen (mit 120 OHM an den enden). An dieses angeschlossen ist der NI-USB-8472s, stellen Sie auf "nur Zuhören", die angeblich zu erkennen und display-Getriebe (mit MAX). In der Tat, es könnte ein hardware-problem, aber ich habe keine Möglichkeit zu wissen, an diesem Punkt bin ich also sicherstellen, dass mindestens die software-sound.

InformationsquelleAutor Daniel | 2012-11-22

Schreibe einen Kommentar