[STM32F2] CAN中断进入问题

[复制链接]
6376|21
 楼主| 雪雨风霜 发表于 2015-6-18 16:11 | 显示全部楼层 |阅读模式
本帖最后由 雪雨风霜 于 2015-6-18 18:40 编辑

大家好,我用的是STM32F207芯片,在直流充电桩上面应用。芯片的两个CAN口都被利用到了。

目前出现的问题是:其中一路和电动汽车BMS通信的CAN口的中断在启动前期可以进入中断,到某一时候(大约可以收到90多帧数据)(未知),CAN中断突然进不去了,其他中断正常。而且该CAN口重新初始化之后又可以进入,但是会重复之前的现象。

CAN设置如下:
CAN_FilterConfTypeDef  sFilterConfig;
  static CanTxMsgTypeDef        TxMessage1;
  static CanRxMsgTypeDef        RxMessage1;
        
  CanHandleToBMS.Instance = CAN1;
  CanHandleToBMS.pTxMsg = &TxMessage1;
  CanHandleToBMS.pRxMsg = &RxMessage1;
        //CAN 初始化 30MHz 250kbps
  CanHandleToBMS.Init.TTCM = DISABLE;
  CanHandleToBMS.Init.ABOM = DISABLE;
  CanHandleToBMS.Init.AWUM = DISABLE;
  CanHandleToBMS.Init.NART = DISABLE;
  CanHandleToBMS.Init.RFLM = DISABLE;
  CanHandleToBMS.Init.TXFP = DISABLE;
  CanHandleToBMS.Init.Mode = CAN_MODE_NORMAL;
  CanHandleToBMS.Init.SJW = CAN_SJW_1TQ;
  CanHandleToBMS.Init.BS1 = CAN_BS1_6TQ;
  CanHandleToBMS.Init.BS2 = CAN_BS2_8TQ;
  CanHandleToBMS.Init.Prescaler = 8;
  HAL_CAN_Init(&CanHandleToBMS);

        //CAN过滤器
  /*##-2- Configure the CAN Filter ###########################################*/
  sFilterConfig.FilterNumber = 0;
  sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
  sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
  sFilterConfig.FilterIdHigh = 0x0000;
  sFilterConfig.FilterIdLow = 0x0000;
  sFilterConfig.FilterMaskIdHigh = 0x0000;
  sFilterConfig.FilterMaskIdLow = 0x0000;
  sFilterConfig.FilterFIFOAssignment = CAN_FIFO0;
  sFilterConfig.FilterActivation = ENABLE;
  sFilterConfig.BankNumber = 14;

  HAL_CAN_ConfigFilter(&CanHandleToBMS, &sFilterConfig);

CAN回调函数如下:
        if(CanHandle->pRxMsg->IDE == CAN_ID_EXT)   //判断扩展帧
        {
                if(CanHandle->Instance == CAN1)  //判断BMS的CAN进入中断
                {
                        CANBMS.IDE = CanHandle->pRxMsg->ExtId;
                        CANBMS.DLC = CanHandle->pRxMsg->DLC;
                        for(i=0;i<8;i++)
                        {
                                CANBMS.Data = CanHandle->pRxMsg->Data;               
                    }
                        CANqueue_push(CANBMS);
                        HAL_CAN_Receive_IT(CanHandle, CAN_FIFO0);
                }
}

不知道大家有没有出现类似的问题,谢谢
amanda_s 发表于 2015-6-18 17:46 | 显示全部楼层
楼主是用的FIFO0中断,是吗?
请检查一下Receive FIFO locked mode是否设置为“Receive FIFO locked agaist overrun". 有没有可能是FIFO满了,后面的消息都被忽略了。
另外楼主还可以确认一下,出问题时CAN的寄存器配置是否还和初始化一下。
airwill 发表于 2015-6-18 18:40 | 显示全部楼层
除了楼上提到的问题, 这最常见的问题是错误被动引起的. 研究和更改一下自动离线管理方式.
 楼主| 雪雨风霜 发表于 2015-6-18 19:06 | 显示全部楼层
airwill 发表于 2015-6-18 18:40
除了楼上提到的问题, 这最常见的问题是错误被动引起的. 研究和更改一下自动离线管理方式. ...

是用的FIFO0中断,其中关于FIFO中断设置的是有数据帧挂起就进入CAN中断,CanHandleToBMS.Init.RFLM = DISABLE;FIFO满设置为0,表示FIFO满了之后后面的数据直接覆盖前面的数据
mmuuss586 发表于 2015-6-18 19:20 | 显示全部楼层
雪雨风霜 发表于 2015-6-18 19:06
是用的FIFO0中断,其中关于FIFO中断设置的是有数据帧挂起就进入CAN中断,CanHandleToBMS.Init.RFLM = DIS ...

那只能出问题后,看下CAN的相关寄存器哪个异常;
 楼主| 雪雨风霜 发表于 2015-6-18 20:11 | 显示全部楼层
airwill 发表于 2015-6-18 18:40
除了楼上提到的问题, 这最常见的问题是错误被动引起的. 研究和更改一下自动离线管理方式. ...

设置成自动离线管理方式也不行,还没找到原因,感觉像是某个东西满了之后没有清,但是用电脑发数据是一直可以接收到的
 楼主| 雪雨风霜 发表于 2015-6-19 11:04 | 显示全部楼层
amanda_s 发表于 2015-6-18 17:46
楼主是用的FIFO0中断,是吗?
请检查一下Receive FIFO locked mode是否设置为“Receive FIFO locked agaist ...

我打开FIFO满中断 和FIFO溢出中断   获取状态,发现这两个标志位会出现被置位的现象。
冰河w 发表于 2015-6-19 16:07 | 显示全部楼层
http://www.21ic.com/jichuzhishi/mcu/series/2013-03-13/160428.html
CS_Police 发表于 2015-6-23 14:57 | 显示全部楼层
"CAN中断突然进不去了,其他中断正常。"是2个都进不去了还是某一个进不去了?
能不能关闭其他所有中断试试看? 能不能用loop-back模式试试看?
玛尼玛尼哄 发表于 2015-6-23 15:10 | 显示全部楼层
汽车电子没有弄过啊,楼主从事汽车电子多少年了啊?在比亚迪??
 楼主| 雪雨风霜 发表于 2015-6-23 20:12 | 显示全部楼层
冰河w 发表于 2015-6-19 16:07
http://www.21ic.com/jichuzhishi/mcu/series/2013-03-13/160428.html

这里是CAN接收FIFO   而且接收深度固定的
 楼主| 雪雨风霜 发表于 2015-6-23 20:21 | 显示全部楼层
CS_Police 发表于 2015-6-23 14:57
"CAN中断突然进不去了,其他中断正常。"是2个都进不去了还是某一个进不去了?
能不能关闭其他所有中断试试看 ...

其中一路进不去了,另一路正常。调换过来现象正好调换。用CAN分析仪发送的话是正常的
 楼主| 雪雨风霜 发表于 2015-6-23 20:22 | 显示全部楼层
玛尼玛尼哄 发表于 2015-6-23 15:10
汽车电子没有弄过啊,楼主从事汽车电子多少年了啊?在比亚迪??

没有没有,还是个学生呢,我们做充电桩的。
yiyigirl2014 发表于 2015-6-23 20:37 | 显示全部楼层
你这个是课程设计吧,充电桩,不知道到底是个咋回事,总挺同学说。
玛尼玛尼哄 发表于 2015-6-23 21:35 | 显示全部楼层
楼主这个貌似很前沿的计算。
冰河w 发表于 2015-6-30 17:06 | 显示全部楼层
查看下CAN的相关寄存器哪个异常
snikeguo 发表于 2016-1-5 15:34 | 显示全部楼层
请问楼主怎么解决的,我也出现了这个问题呢
JY-DX-JY 发表于 2016-1-5 15:45 | 显示全部楼层
雪雨风霜 发表于 2015-6-23 20:22
没有没有,还是个学生呢,我们做充电桩的。

楼主很厉害呀
yuandf 发表于 2016-8-1 12:25 | 显示全部楼层
我也遇到了这个问题,通讯一段时间后,中断接收功能就给清了,无法收到数据,最后只能定时调用HAL_CAN_Receive_IT(&CanHandle, CAN_FIFO0)函数
zchong 发表于 2016-8-2 07:50 来自手机 | 显示全部楼层
can有缓存,中断进入后先看一下有几条消息,之后全部读出来
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

14

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部