微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > STM32CAN总线回环模式下的程序已经测试成功

STM32CAN总线回环模式下的程序已经测试成功

时间:10-02 整理:3721RD 点击:
void gp(void)
{
   GPIO_InitTypeDef GPIO_Struct;
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOF,ENABLE);
   GPIO_Struct.GPIO_Mode=GPIO_Mode_IPU;
   GPIO_Struct.GPIO_Pin=GPIO_Pin_11;
   GPIO_Init(GPIOA,&GPIO_Struct);

   GPIO_Struct.GPIO_Mode=GPIO_Mode_AF_PP;
   GPIO_Struct.GPIO_Speed=GPIO_Speed_10MHz;
   GPIO_Struct.GPIO_Pin=GPIO_Pin_12;
   GPIO_Init(GPIOA,&GPIO_Struct);

    GPIO_Struct.GPIO_Mode=GPIO_Mode_Out_PP;
   GPIO_Struct.GPIO_Speed=GPIO_Speed_10MHz;
   GPIO_Struct.GPIO_Pin=GPIO_Pin_6;
   GPIO_Init(GPIOF,&GPIO_Struct);
   GPIO_SetBits(GPIOF,GPIO_Pin_6);
}
void can(void)
{
   CAN_InitTypeDef CAN_Struct;
   CAN_FilterInitTypeDef CAN_FilterStruct;
   CanTxMsg  TxMessage;
   CanRxMsg  RxMessage;
   u8 TransmitMailbox=0;
   u8 i=0;
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1,ENABLE);
   CAN_Struct.CAN_TTCM=DISABLE;
   CAN_Struct.CAN_ABOM=DISABLE;
   CAN_Struct.CAN_AWUM=DISABLE;
   CAN_Struct.CAN_NART=DISABLE;
   CAN_Struct.CAN_RFLM=DISABLE;
   CAN_Struct.CAN_TXFP=DISABLE;
   CAN_Struct.CAN_Mode=CAN_Mode_LoopBack;
   CAN_Struct.CAN_SJW=CAN_SJW_1tq;
   CAN_Struct.CAN_BS1=CAN_BS1_8tq;
   CAN_Struct.CAN_BS2=CAN_BS2_7tq;
   CAN_Struct.CAN_Prescaler=5;
   CAN_Init(CAN1,&CAN_Struct);

   CAN_FilterStruct.CAN_FilterNumber=0;//
   CAN_FilterStruct.CAN_FilterMode=CAN_FilterMode_IdMask;//
  CAN_FilterStruct.CAN_FilterScale=CAN_FilterScale_32bit;/
  CAN_FilterStruct.CAN_FilterIdHigh=0x0000;//IDμ???16??
  CAN_FilterStruct.CAN_FilterIdLow=0x0000;//IDμ?μí16??
  CAN_FilterStruct.CAN_FilterMaskIdHigh=0x0000;//
  CAN_FilterStruct.CAN_FilterMaskIdLow=0x0000;//
  CAN_FilterStruct.CAN_FilterFIFOAssignment=0;//
  CAN_FilterStruct.CAN_FilterActivation=ENABLE;//?¤??1y???÷
  CAN_FilterInit(&CAN_FilterStruct);
  
  TxMessage.StdId=0x11;//éè??±êê?·?
  TxMessage.RTR=CAN_RTR_DATA;//êy?Y??
  TxMessage.IDE=CAN_ID_STD;//±ê×?±êê?·?
  TxMessage.DLC=2;//·¢?íμ?×??úêy
  TxMessage.Data[0]=0x33;//μúò???êy?Y
  TxMessage.Data[1]=0xFE;// μú?t??êy?Y
  TransmitMailbox=CAN_Transmit(CAN1,&TxMessage);//·¢?í???¢
  while((CAN_TransmitStatus(CAN1,TransmitMailbox)!=CANTXOK)&&(i!=0xff))
  {
   i++;
  }
   RxMessage.StdId=0x00;//3?ê??ˉ?óêü1y???÷
  RxMessage.IDE=CAN_ID_STD;
  RxMessage.DLC=0x00;
  RxMessage.Data[0]=0x00;
  RxMessage.Data[1]=0x00;
   CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);
  if(RxMessage.Data[0]==0x33)
  {
   GPIO_ResetBits(GPIOF,GPIO_Pin_6);
  }
  
}   

要是能加些注释就好

不知道小编用的通信速率为几何

下载看看。      

看看                                                

不是用APB1吗?

没注释,确实很难看懂啊。

看看,我怎么程序一样的,怎么就是不能

多谢  多谢

没注释,确实很难看懂啊。

好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好

有一点很疑惑!发送时的stdId与接收时的stdId为什么不一样?发送时传输的数据是0x33与0xFE,但接收时却为什么写接收数据为两个0x00?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top