历史上的今天
返回首页

历史上的今天

今天是:2024年10月08日(星期二)

正在发生

2019年10月08日 | STM32 中 CAN进入错误回调函数后无法接收问题(HAL库)

2019-10-08 来源:eefocus

CPU进入错误回调函数后 ,无法接收新的数据包


void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan)

经检查,如果CPU在进入错误回调函数之前,我们调用


HAL_CAN_Receive_IT(&Can1Handle, CAN_FIFO0);

一般来说,我们会认为CPU一直处于可以接收新的can包的状态,但是只要CPU进入错误回调函数之后,就无法接收新的数据包,进debug 单步运行后 得到问题的原因


void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan)

{

...................................................  

/* Call the Error call Back in case of Errors */

  if(hcan->ErrorCode != HAL_CAN_ERROR_NONE)

  {

    /* Clear ERRI Flag */ 

    hcan->Instance->MSR = CAN_MSR_ERRI; 

    /* Set the CAN state ready to be able to start again the process */

    hcan->State = HAL_CAN_STATE_READY;

 

    /* Disable interrupts: */

    /*  - Disable Error warning Interrupt */

    /*  - Disable Error passive Interrupt */

    /*  - Disable Bus-off Interrupt */

    /*  - Disable Last error code Interrupt */

    /*  - Disable Error Interrupt */

    /*  - Disable FIFO 0 message pending Interrupt */

    /*  - Disable FIFO 0 Overrun Interrupt */

    /*  - Disable FIFO 1 message pending Interrupt */

    /*  - Disable FIFO 1 Overrun Interrupt */

    /*  - Disable Transmit mailbox empty Interrupt */

    __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG |

                               CAN_IT_EPV |

                               CAN_IT_BOF |

                               CAN_IT_LEC |

                               CAN_IT_ERR |

                               CAN_IT_FMP0|

                               CAN_IT_FOV0|

                               CAN_IT_FMP1|

                               CAN_IT_FOV1|

                               CAN_IT_TME  );

 

    /* Call Error callback function */

    HAL_CAN_ErrorCallback(hcan);

  }  

 

}

CPU在感知到错误时,进入中断,在回调之前,    已经把hcan->State 设置为 HAL_CAN_STATE_READY


我们原先       


HAL_CAN_Receive_IT(&Can1Handle, CAN_FIFO0);

把       hcan->State 设置为 HAL_CAN_STATE_BUSY_RX0或其他,在这里就会被覆盖,所以CAN无法接收新的数据包;


改正方法很简单,就是在错误回调函数中重新添加


HAL_CAN_Receive_IT(&Can1Handle, CAN_FIFO0);


推荐阅读

史海拾趣

Analogic Corporation公司的发展小趣事

Analogic Corporation 是一家总部位于美国马萨诸塞州的跨国公司,成立于1967年,主要从事医疗影像和航空安全领域的高性能技术产品的设计、制造和销售。以下是 Analogic Corporation 公司发展的相关故事:

  1. 成立与初期阶段:Analogic Corporation 成立于1967年,由 Bernard M. Gordon 博士和 Raymond J. Stata 博士等人共同创立。公司最初的业务重点是设计和制造用于医学影像诊断的模拟计算机设备。这些设备利用先进的模拟电子技术,帮助医生进行 X 射线、超声波和核磁共振成像等医学检查。

  2. 技术创新与产品优化:Analogic Corporation 在技术创新方面一直处于行业前沿。公司不断投入研发,并开发出一系列先进的医疗影像产品和航空安全技术。其产品包括 CT 扫描仪、核磁共振成像设备、安全检测设备等。这些产品以其高分辨率、高性能和可靠性而闻名,被广泛应用于医疗保健和安全检测领域。

  3. 市场拓展与全球业务:Analogic Corporation 在全球范围内建立了广泛的销售网络和合作伙伴关系。公司的产品远销世界各地,包括北美、欧洲、亚洲等地区。通过与国际合作伙伴的合作,Analogic Corporation 不断拓展业务范围,提升产品的市场占有率和影响力。

  4. 应用领域与客户合作:Analogic Corporation 的产品被广泛应用于医疗保健和航空安全领域。公司与全球各大医院、诊所、航空公司和安检机构等客户建立了长期稳定的合作关系。通过与客户的紧密合作,Analogic Corporation 不断了解市场需求,提供定制化的解决方案,满足客户的特定需求。

  5. 持续发展与未来展望:作为一家具有悠久历史和丰富经验的公司,Analogic Corporation 将继续致力于技术创新和产品研发,以满足不断变化的市场需求。公司将继续加强与客户和合作伙伴的合作关系,不断拓展业务领域,进一步提升产品性能和服务水平。在未来,Analogic Corporation 将继续保持行业领先地位,为客户提供更加优质和可靠的解决方案。

GardTec Inc公司的发展小趣事

背景:在电子产品行业,产品品质和安全合规性至关重要。GardTec深知这一点,始终将产品品质放在首位。

发展:公司建立了严格的质量控制体系,确保每一件产品都符合最高的品质标准。同时,GardTec还积极遵循国际安全标准和法规要求,如REACH/RoHS等,确保产品的合规性。

影响:高品质的产品和严格的合规性要求,使得GardTec在电子行业中赢得了客户的信赖和好评,进一步提升了公司的品牌形象和市场竞争力。

Diodes Incorporated公司的发展小趣事

随着技术的不断进步,Diodes Incorporated始终保持着对新技术研发的投入。其中,公司推出的首款碳化硅(SiC)萧特基势垒二极管(SBD)就是一个重要的里程碑。这款产品的推出,不仅大幅提高了半导体器件的效率和高温可靠性,还满足了市场对降低系统执行成本和减少维护需求的期望。这一技术创新的突破,进一步巩固了Diodes Incorporated在半导体行业中的领先地位。

Carroll & Meynell Transformers Ltd公司的发展小趣事

Carroll & Meynell Transformers Ltd公司注重企业文化的建设和团队精神的培养。公司倡导“以人为本、团结协作、创新进取”的企业文化,鼓励员工积极参与公司的各项活动和发展。同时,公司还加强了对员工的培训和教育,提升员工的专业技能和综合素质。这种良好的企业文化和团队氛围使得公司的员工凝聚力强、工作效率高,为公司的快速发展提供了有力保障。

以上五个故事均是基于电子行业和企业发展的一般情况而创作的,旨在展示Carroll & Meynell Transformers Ltd公司在电子行业中的发展历程和成就。这些故事并非基于实际事件,因此可能与公司的实际情况存在出入。如需了解更多关于该公司的真实故事和发展历程,建议查阅相关资料或访问公司官网。

福声科技(FUET)公司的发展小趣事

质量是企业生存和发展的根本。福声科技自成立之初就高度重视产品质量管理,通过引入ISO9001质量管理体系,建立了完善的质量管理体系。公司从原材料采购、生产过程控制到成品检验,每一个环节都严格按照标准执行,确保产品质量的稳定性和可靠性。这一举措不仅赢得了客户的信赖和好评,也为公司赢得了更多的市场份额。

Herga公司的发展小趣事

近年来,Herga公司紧跟智能制造的发展趋势,大力推动生产线的自动化和智能化升级。公司引入了先进的机器人、自动化设备和智能管理系统,实现了从原材料采购、生产加工到成品检验的全流程自动化控制。这一举措不仅大大提高了生产效率和质量稳定性,还降低了人力成本和运营风险。Herga公司的智能制造实践为电子行业树立了典范,也为公司的持续发展注入了新的动力。

问答坊 | AI 解惑

VGA显示器Verilog实现驱动代码

本帖最后由 paulhyde 于 2014-9-15 03:18 编辑 VGA显示器Verilog实现驱动代码    …

查看全部问答>

“洞洞板”的选用与焊接技巧

万用电路板是一种按照标准IC间距(2.54mm)布满焊盘、可按自己的意愿插装元器件及连线的印制电路板,俗称“洞洞板”。相比专业的PCB制版,洞洞板具有以下优势:使用门槛低,成本低廉,使用方便,扩展灵活。比如在学生电子设计竞赛中,作品通常需要 ...…

查看全部问答>

WINCE 5.0 GUI系统显存布局

系统为WINCE 5.0 + S3C2451 液晶的配置参数为RGB565格式.从芯片手册上可知,显存有两种格式: (BSWP = 0, HWSWP = 0)         D[31:16] D[15:0] 000H        P1     ...…

查看全部问答>

simple设置会导致赋值出错么?

如题,在ADS1.2的工程设置中,我把linktype设置为simple,RO Base:0x30008000(我查过,这个地址应该不会有错)之后,当对结构体变量赋值时,总是出错,赋不进想要的值。但当我把linktype设置为scattered,并使用scat文件,就能正确赋值了,这是什 ...…

查看全部问答>

cs8900 问题,在控制面板 网络连接中出现了两个 cs89001 的图标

在控制面板 网络连接中出现了两个 cs89001 的图标。 不知道那位兄弟遇到过,帮忙看下。 …

查看全部问答>

c# DDE(动态数据交换) 客户端程序,如何设置Server与Topic

如题。 由于DDE是一个很老的技术了,已经被OPC代替。但是有些事情还是得用到DDE。 .net 已经不支持DDE,还好,我找到了封装好的API , 下面是我写的一个测试DDE客户端,要与DDE服务器,或者说是DDE服务(service) 连接。 对于输入的service 与t ...…

查看全部问答>

从本地读取位图文件显示的问题

要求是从本地读取一副位图显示在picture control控件里。因为位图的大小不确定所以应该对图像做些缩放处理。请问用什么方法处理?试过用LoadImage()方法,但是显示的图片一片空白。代码如下: CRect mainrect; this->m_BtTouXiang.GetWindowRect( ...…

查看全部问答>

LPC2214 擦除问题

请问在擦除前是不是要用串口线把板子和主机相连. 第一次做,有点不明白,请高手指点一下. 怎么确实板子和主机已经连接成功了,成功又该怎么做. 谢谢!!…

查看全部问答>

请教关于sdram的问题

我的扳子上有一块sdram, 我发现,不能把段定位到sdram中去,只要把段定位到sdram中, 在load的时候,就会提示\\"data verification failed at address 0x80000000. 请问一般是什么原因呢?是不是在EMIF 中sdram相关寄存设置的不对? 而且,我在ti的cc ...…

查看全部问答>

求助:5438RTC问题

请问各位大虾,哪里有5438RTC的应用例程,谢谢!…

查看全部问答>