最近在捣鼓STM32的CAN 模块。虽然算是基本上能够发送接收数据了,但是总觉得对他的发送和接收比较模糊。问题就出在了对过滤器的设置 以及接收中的某些设置上,长话短说。大家看一下代码就明白我的疑问了。代码如下:
void CAN_Configuration(void)
{
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN,ENABLE);
CAN_DeInit();//初始化CAN 一定要养成这个良好的习惯
CAN_StructInit(&CAN_InitStructure);
/*CAN 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;//失能接收FIFO锁定模式
CAN_InitStructure.CAN_TXFP=DISABLE;//发送FIFO优先级由报文的标识符来决定
CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack;//CAN工作于环回模式
CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;//重新同步跳跃宽度1个时间单位
CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;//时间段为8个时间单位
CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;//时间段为7个时间单位
CAN_InitStructure.CAN_Prescaler=9;//波特率=PCLK1/(1+8+7)/9=250kbit
CAN_Init(&CAN_InitStructure);
/*CAN过滤器初始化 CAN filter init*/
CAN_FilterInitStructure.CAN_FilterNumber=0;//选定过滤器组0
CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;//标识符屏蔽位模式
CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;//选择1个32位过滤器
CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;
CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;//设定过滤器标识符的高位和低位
CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//设定过滤器屏蔽标识符高位和低位
CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FilterFIFO0;//设定过滤器FIFO0指向过滤器x
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;//使能过滤器
CAN_FilterInit(&CAN_FilterInitStructure);
CAN_ITConfig(CAN_IT_FMP0, ENABLE);
}
接收子程序(中断接收的)
void CAN_Rx_Data(void)
{
CanRxMsg RxMessage;
RxMessage.StdId=0x00;
RxMessage.ExtId=0x00;
RxMessage.IDE=0;
RxMessage.DLC=0;
RxMessage.FMI=0;//这个不知道干什么用
RxMessage.Data[0]=0x00;
CAN_Receive(CAN_FIFO0, &RxMessage);
}
代码中粉色的那部分 我就不理解,或者说是理解偏差。当我将这四行中的值变化为不都是0x0000时,结果在程序中接收不到正确的结果。哪位大侠帮我解释一下 ,如何设置代码中粉色的部分。以便使我能够正确的接收。不胜感激。