微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > STM8S208S6 CAN的驱动程序

STM8S208S6 CAN的驱动程序

时间:10-02 整理:3721RD 点击:
跑STM8的CAN例程,例程波特率为1M,接上CAN分析仪,可以收到数据.但是设置波特率500k,板子接上can分析仪却没有数据,大神门求救啊!
下面贴上代码
void CAN_Config(void)
{
  CAN_InitStatus_TypeDef status = CAN_InitStatus_Failed;
  /* Filter Parameters */
  CAN_FilterNumber_TypeDef CAN_FilterNumber;
  FunctionalState CAN_FilterActivation;
  CAN_FilterMode_TypeDef CAN_FilterMode;
  CAN_FilterScale_TypeDef CAN_FilterScale;
  uint8_t CAN_FilterID1;
  uint8_t CAN_FilterID2;
  uint8_t CAN_FilterID3;
  uint8_t CAN_FilterID4;
  uint8_t CAN_FilterIDMask1;
  uint8_t CAN_FilterIDMask2;
  uint8_t CAN_FilterIDMask3;
  uint8_t CAN_FilterIDMask4;
  /* Init Parameters*/
  CAN_MasterCtrl_TypeDef CAN_MasterCtrl;
  CAN_Mode_TypeDef CAN_Mode;
  CAN_SynJumpWidth_TypeDef CAN_SynJumpWidth;
  CAN_BitSeg1_TypeDef CAN_BitSeg1;
  CAN_BitSeg2_TypeDef CAN_BitSeg2;
  uint8_t CAN_Prescaler;  
   CLK_PeripheralClockConfig(CLK_PERIPHERAL_CAN, ENABLE);
  /* CAN register init */
  CAN_DeInit();
  /* CAN  init */
  CAN_MasterCtrl=CAN_MasterCtrl_AllDisabled;
  CAN_Mode = CAN_Mode_LoopBack;  
  CAN_SynJumpWidth = CAN_SynJumpWidth_1TimeQuantum;//1
  CAN_BitSeg1 = CAN_BitSeg1_8TimeQuantum;//8
  CAN_BitSeg2 = CAN_BitSeg2_7TimeQuantum;//7
  CAN_Prescaler = 2;//1
  status = CAN_Init(CAN_MasterCtrl, CAN_Mode, CAN_SynJumpWidth, CAN_BitSeg1, \
                    CAN_BitSeg2, CAN_Prescaler);
  if(status ==CAN_InitStatus_Success)
  {
    printf("can init succeed!\r\n");
  }
  else
  {
     printf("can init Failed!\r\n");
  }
  /* CAN filter init */
  CAN_FilterNumber = CAN_FilterNumber_0;
  CAN_FilterActivation = ENABLE;
  CAN_FilterMode = CAN_FilterMode_IdMask;
  CAN_FilterScale = CAN_FilterScale_32Bit;
  CAN_FilterID1=0;  
  CAN_FilterID2=0;
  CAN_FilterID3=0;
  CAN_FilterID4=0;
  CAN_FilterIDMask1=0;
  CAN_FilterIDMask2=0;
  CAN_FilterIDMask3=0;
  CAN_FilterIDMask4=0;  
  CAN_FilterInit(CAN_FilterNumber, CAN_FilterActivation, CAN_FilterMode,
                 CAN_FilterScale,CAN_FilterID1, CAN_FilterID2, CAN_FilterID3,
                 CAN_FilterID4,CAN_FilterIDMask1, CAN_FilterIDMask2,
                 CAN_FilterIDMask3, CAN_FilterIDMask4);
  /* Enable Fifo message pending interrupt*/
  /* Message reception is done by CAN_RX ISR*/
  CAN_ITConfig(CAN_IT_FMP, ENABLE);
}

你这样设置,波特率只有250K,你can采集器试试用250K

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

网站地图

Top