打印
[STM32F2]

CAN中断进入问题

[复制链接]
5778|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满了之后后面的数据直接覆盖前面的数据

使用特权

评论回复
5
mmuuss586| | 2015-6-18 19:20 | 只看该作者
雪雨风霜 发表于 2015-6-18 19:06
是用的FIFO0中断,其中关于FIFO中断设置的是有数据帧挂起就进入CAN中断,CanHandleToBMS.Init.RFLM = DIS ...

那只能出问题后,看下CAN的相关寄存器哪个异常;

使用特权

评论回复
6
雪雨风霜|  楼主 | 2015-6-18 20:11 | 只看该作者
airwill 发表于 2015-6-18 18:40
除了楼上提到的问题, 这最常见的问题是错误被动引起的. 研究和更改一下自动离线管理方式. ...

设置成自动离线管理方式也不行,还没找到原因,感觉像是某个东西满了之后没有清,但是用电脑发数据是一直可以接收到的

使用特权

评论回复
7
雪雨风霜|  楼主 | 2015-6-19 11:04 | 只看该作者
amanda_s 发表于 2015-6-18 17:46
楼主是用的FIFO0中断,是吗?
请检查一下Receive FIFO locked mode是否设置为“Receive FIFO locked agaist ...

我打开FIFO满中断 和FIFO溢出中断   获取状态,发现这两个标志位会出现被置位的现象。

使用特权

评论回复
8
冰河w| | 2015-6-19 16:07 | 只看该作者
http://www.21ic.com/jichuzhishi/mcu/series/2013-03-13/160428.html

使用特权

评论回复
9
CS_Police| | 2015-6-23 14:57 | 只看该作者
"CAN中断突然进不去了,其他中断正常。"是2个都进不去了还是某一个进不去了?
能不能关闭其他所有中断试试看? 能不能用loop-back模式试试看?

使用特权

评论回复
10
玛尼玛尼哄| | 2015-6-23 15:10 | 只看该作者
汽车电子没有弄过啊,楼主从事汽车电子多少年了啊?在比亚迪??

使用特权

评论回复
11
雪雨风霜|  楼主 | 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   而且接收深度固定的

使用特权

评论回复
12
雪雨风霜|  楼主 | 2015-6-23 20:21 | 只看该作者
CS_Police 发表于 2015-6-23 14:57
"CAN中断突然进不去了,其他中断正常。"是2个都进不去了还是某一个进不去了?
能不能关闭其他所有中断试试看 ...

其中一路进不去了,另一路正常。调换过来现象正好调换。用CAN分析仪发送的话是正常的

使用特权

评论回复
13
雪雨风霜|  楼主 | 2015-6-23 20:22 | 只看该作者
玛尼玛尼哄 发表于 2015-6-23 15:10
汽车电子没有弄过啊,楼主从事汽车电子多少年了啊?在比亚迪??

没有没有,还是个学生呢,我们做充电桩的。

使用特权

评论回复
14
yiyigirl2014| | 2015-6-23 20:37 | 只看该作者
你这个是课程设计吧,充电桩,不知道到底是个咋回事,总挺同学说。

使用特权

评论回复
15
玛尼玛尼哄| | 2015-6-23 21:35 | 只看该作者
楼主这个貌似很前沿的计算。

使用特权

评论回复
16
冰河w| | 2015-6-30 17:06 | 只看该作者
查看下CAN的相关寄存器哪个异常

使用特权

评论回复
17
snikeguo| | 2016-1-5 15:34 | 只看该作者
请问楼主怎么解决的,我也出现了这个问题呢

使用特权

评论回复
18
JY-DX-JY| | 2016-1-5 15:45 | 只看该作者
雪雨风霜 发表于 2015-6-23 20:22
没有没有,还是个学生呢,我们做充电桩的。

楼主很厉害呀

使用特权

评论回复
19
yuandf| | 2016-8-1 12:25 | 只看该作者
我也遇到了这个问题,通讯一段时间后,中断接收功能就给清了,无法收到数据,最后只能定时调用HAL_CAN_Receive_IT(&CanHandle, CAN_FIFO0)函数

使用特权

评论回复
20
zchong| | 2016-8-2 07:50 | 只看该作者
can有缓存,中断进入后先看一下有几条消息,之后全部读出来

使用特权

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

本版积分规则

5

主题

14

帖子

2

粉丝