跑STM8的CAN例程,例程波特率为1M,接上CAN分析仪,可以收到数据.但是设置波特率500k,板子接上can分析仪却没有数据,大神门求救啊!
下面贴上代码
void CAN_Config(void)
{
CAN_InitStatus_TypeDef status = CAN_InitStatus_Failed;
/* Filter Parameters */
CAN_FilterNumber_TypeDef CAN_FilterNumber;
Func
tionalState 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!
");
}
else
{
printf("can init Failed!
");
}
/* 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);
}
一周热门 更多>