打印

CAN通讯问题

[复制链接]
3790|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhujw2002|  楼主 | 2009-9-21 10:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
每次仿真调试时第一次运行CAN通讯均无法成功,在运行过程重新对CAN寄存器进行初始化也无法恢复(CAN初始化成功),需要复位一下程序再重新运行CAN才能正常通讯;在实际运行过程中也会出现有时无法通讯的情况,只有断电重启后才能够恢复正常。不知道问题出在什么地方?
采用CAN232MB协议转换器,硬件采用CTM1060T
沙发
zhujw2002|  楼主 | 2009-9-21 11:30 | 只看该作者
CAN初始化部分代码
void CAN_Configuration(void)
{
  GPIO_InitTypeDef         GPIO_InitStructure;
  CAN_InitTypeDef        CAN_InitStructure;
  CAN_FilterInitTypeDef  CAN_FilterInitStructure;
  //CanTxMsg TxMessage;
  RCC_ClocksTypeDef RCC_ClocksStatus;
  //u32 i = 0;
  //u8 TransmitMailbox = 0;
  //bool Can_Send_AA_Flag = TRUE;
  
        //Configure CAN pin: RX
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  //Configure CAN pin: TX
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
  
        RCC_GetClocksFreq(&RCC_ClocksStatus);
        CAN_DeInit(CAN1);
  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;
  CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
  CAN_InitStructure.CAN_BS1=CAN_BS1_13tq;
  CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;
  CAN_InitStructure.CAN_Prescaler=RCC_ClocksStatus.PCLK1_Frequency/(16*250000);      //波特率计算,16M/(1+8+7)/4=250k
  if(!CAN_Init(CAN1, &CAN_InitStructure))
  {
          //CAN初始化失败
          Can_Structure.Init_Fail_Flag = true;
          return;
  }
  
  /* 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);*/
  
  //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=CAN_FIFO0;
  CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
  CAN_FilterInit(&CAN_FilterInitStructure);
  CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
}

使用特权

评论回复
板凳
sinadz| | 2009-9-21 15:46 | 只看该作者
问题是有点奇怪,重新初始化不行,复位就可以了,二者好像是一样的效果

使用特权

评论回复
地板
zhujw2002|  楼主 | 2009-9-21 16:49 | 只看该作者
是啊,现在还是没整明白问题出在哪儿,另CTM1060T电源是可控的

使用特权

评论回复
5
majesse| | 2009-10-9 11:38 | 只看该作者
为什么我看到的程序设计中的过滤器的设置老是0 呢?有没有人给讲解一下如何设置过滤器啊?

使用特权

评论回复
6
hsbjb| | 2009-10-11 08:53 | 只看该作者
过滤器都配置为零,就说明不需要对ID进行过滤,所有ID都接收,如果需要过滤哪一位,就把哪一位置1

使用特权

评论回复
7
txcy| | 2009-10-12 22:16 | 只看该作者
会不会是程序里面有死循环

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

75

帖子

0

粉丝