历史上的今天
返回首页

历史上的今天

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

正在发生

2019年10月08日 | stm32 hal can接收大量数据的轰炸后,不能继续接收

2019-10-08 来源:eefocus

原因:若在接收的时候发送数据,


发送中的处理:


hal_can_transmit()中会进行hal_lock(hcan);然后更改can状态为HAL_CAN_STATE_BUSY_TX相关的。


再谈一下接收中的处理,不用多说肯定是在接收中断国会开启下一次接收,即hal_can_receive_it();那么这里边又干了什么:


  /* Check if CAN state is not busy for RX FIFO0 */

  if((FIFONumber == CAN_FIFO0) && ((hcan->State == HAL_CAN_STATE_BUSY_RX0) ||         

                                   (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0) ||     

                                   (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) ||     

                                   (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1)))

  {

    return HAL_BUSY;

  }

 

  /* Check if CAN state is not busy for RX FIFO1 */

  if((FIFONumber == CAN_FIFO1) && ((hcan->State == HAL_CAN_STATE_BUSY_RX1) ||         

                                   (hcan->State == HAL_CAN_STATE_BUSY_TX_RX1) ||     

                                   (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) ||     

                                   (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0_RX1)))

  {

    return HAL_BUSY;

  }

这儿会直接返回,也就是说如果此时处于这些状态说明一定有执行过hal_lock(), 既然我们返回了那相应的中断标签并没有得到相应的处理。




对比后发现hal_can_transmit和hal_can_receive_it中在lock之后都会执行以下语句


  __HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG |

                            CAN_IT_EPV |

                            CAN_IT_BOF |

                            CAN_IT_LEC |

                            CAN_IT_ERR |

                            CAN_IT_TME);

不过hal_can_receive_it中在unlock之后还多执行了

  /* Process unlocked */

   __HAL_UNLOCK(hcan);

 

  if(FIFONumber == CAN_FIFO0)

  {

    /* Enable FIFO 0 overrun and message pending Interrupt */

    __HAL_CAN_ENABLE_IT(hcan, CAN_IT_FOV0 | CAN_IT_FMP0);

  }

  else

  {

    /* Enable FIFO 1 overrun and message pending Interrupt */

    __HAL_CAN_ENABLE_IT(hcan, CAN_IT_FOV1 | CAN_IT_FMP1);

  }

好,那我们是不是如果hal_can_receive_it(&hcan1)== hal_busy时添加执行以上语句就可以了 ,实现证明是可以的。


那在接收中断中对果hal_can_receive_it作如下处理:


if( HAL_BUSY == HAL_CAN_Receive_IT(hcanx, CAN_FIFO0))//开启中断接收

{

/* Enable FIFO 0 overrun and message pending Interrupt */

__HAL_CAN_ENABLE_IT(&hcan1, CAN_IT_FOV0 | CAN_IT_FMP0);

}

推荐阅读

史海拾趣

Anders DX公司的发展小趣事

Anders DX是一家专注于设计和制造显示解决方案的公司,以下是该公司发展的相关故事:

  1. 公司成立与初期阶段:Anders DX成立于2002年,总部位于英国霍尔特。公司的创始人包括Neil Jarvis和David Vallis,他们都在显示技术领域拥有丰富的经验。公司成立之初,主要从事自定义显示解决方案的设计和制造,为各种行业的客户提供定制化的显示产品。

  2. 技术创新与产品开发:Anders DX在其成立初期就致力于技术创新和产品开发。公司团队与客户紧密合作,根据客户的需求和应用场景,设计和制造各种类型的显示解决方案,包括液晶显示屏、触摸屏、OLED显示屏等。他们采用先进的制造工艺和技术,不断推出新产品,满足客户不断变化的需求。

  3. 客户合作与市场拓展:随着公司业务的发展,Anders DX与越来越多的客户建立了紧密的合作关系。公司的客户群涵盖了各个行业,包括医疗、工业、汽车、消费电子等领域。通过与客户的合作,Anders DX不断拓展产品的应用领域和市场份额,在行业内树立了良好的声誉。

  4. 全球布局与生产基地:为了更好地服务全球客户,Anders DX逐步在全球建立了生产基地和销售网络。除了在英国的总部外,公司还在亚洲和美洲地区设立了生产工厂和销售办事处,以满足不同地区客户的需求。这些生产基地拥有先进的设备和技术,能够为客户提供高质量的定制化显示解决方案。

  5. 持续发展与未来展望:作为一家专注于显示解决方案的公司,Anders DX将继续致力于技术创新和产品开发。公司将继续与客户紧密合作,不断推出适应市场需求的新产品,并不断提升生产效率和产品质量,以保持在行业内的竞争优势。同时,Anders DX也将继续关注行业的发展趋势和技术变革,及时调整战略,以确保公司持续健康发展。

BOPLA公司的发展小趣事

在国内市场取得一定成绩后,BOPLA开始将目光投向海外市场。通过参加国际电子展会、与海外客户建立合作关系等方式,公司成功将产品打入国际市场。同时,BOPLA还积极调整产品策略,根据不同国家和地区的市场需求,推出定制化的电子元件产品,进一步扩大了市场份额。

ECI公司的发展小趣事

ECI公司自成立以来,一直致力于技术创新和研发。在电子行业的早期,ECI就投入巨资研发先进的半导体技术,成功推出了多款高性能、低功耗的芯片产品。这些产品迅速在市场上获得认可,为公司赢得了良好的口碑。随着技术的不断进步,ECI公司不断推出更加先进的电子产品,引领了电子行业的发展趋势。

Coleman Cable Inc公司的发展小趣事

品质一直是Coleman Cable的生命线。公司建立了严格的质量控制体系,从原材料采购、生产过程到成品检验,每一个环节都严格把关。这种对品质的执着追求,使得Coleman Cable的产品在市场上享有良好的声誉。同时,公司还积极听取客户反馈,不断改进产品和服务,赢得了客户的信赖和忠诚。

Global Power Technology Co., Ltd公司的发展小趣事
冰箱噪音大可能是由于压缩机运转声音、风扇转动声音或冰箱摆放不平稳等原因造成的。首先检查冰箱是否摆放平稳,如不平稳需调整冰箱底部螺丝使其平稳;若冰箱摆放平稳但噪音仍大,可能是压缩机或风扇故障,需联系专业维修人员检查并维修。
Ho Chien Electronics Group Inc公司的发展小趣事
首先检查电源插头是否插紧,电源插座是否有电;若电源正常,可能是电路板故障,需联系专业维修人员检查并更换电路板。

问答坊 | AI 解惑

单片机系统设计的误区宇对策

单片机系统设计的误区宇对策…

查看全部问答>

怎样获得进程加载了哪些模块(dll)?

怎样获得进程加载了哪些模块(dll)?有没有相关的API或者例子程序? 请知道的朋友说一下,非常紧急! 谢谢!…

查看全部问答>

arm+wince5.0 位变量 单独操作某个引脚

wince上面能不能定义位变量,,就像51那样, sbit led=P2^0;这种,操作led这个变量就是操作那个引脚了,,, arm上面有没有类似的定义??用宏也行 我想定义位变量 单独操作某个IO口,,比如GPF0,,想不到办法~~…

查看全部问答>

各位大虾,给小弟指条明路吧

    小弟06年毕业以来一直是做应用软件的开发(类似于管理系统)一类的软件, 但总感觉现在做计算机软件的门槛比较低,薪酬也不高,时间长了,没什么新鲜感了, 现在想做嵌入式开发,但一时也不知道从何开始,请各位大虾指点迷津吧…

查看全部问答>

【转】 如何使用SignalTap II觀察reg與wire值? (SOC) (Verilog) (Quartus II) (Signa

Abstract撰寫Verilog時,雖然每個module都會先用ModelSim或Quartus II自帶的simulator仿真過,但真的將每個module合併時,一些不可預期的『run-time』問題可能才一一浮現,這時得靠SignalTap II來幫忙debug。Introduction使用環境:Quartus II 8.0 ...…

查看全部问答>

89c51单片机与SHT11温湿度采集

小弟正在做毕业设计,到了关键时候,我用SHT11采集温湿度在12864上显示的时候,在调整温度的时候高于20度的时候湿度也会跟着改变,但是幅度不大,再调整的时候又会改变一下,不知道是什么原因,请知道的大哥大姐帮帮小弟,这是什么原因啊?????…

查看全部问答>

vca810

本帖最后由 paulhyde 于 2014-9-15 09:40 编辑 问一下各位,vca810在40db增益下,带宽能达到10M么?  …

查看全部问答>

【EE团】LM3S811新兵营——TI LM3S811 ARM评估板0.01元秒杀!!!

【EE团】LM3S811新兵营——TI LM3S811 ARM评估板0.01元秒杀!!! 快开始了,大家。。。 距团购开始还有: 00天 01时 46分 29秒…

查看全部问答>

带界面的手持上位机--控制下面的其他机器

首先,个人觉得开发板的作用,是方便研发。。在开发板上实现小型的功能,之后方便大规模生产吧 开发板的利用,更在于学习的过程,学习到好东西才好 只是根据产品的现状想到的一种方案,如果能做的,应该还是可以 谢谢…

查看全部问答>

“POS机套件”中的器件,你将怎样发挥它的作用?

“POS机套件”中的器件,都很有特点,一部分是TI刚刚推出的新器件,性能及功能很好。 TI这次活动将了放100套这样的套件,比例相当大。 这些套件如果到了你手里,你将怎样发挥它的作用?有更具体的想法吗? [ 本帖最后由 dontium 于 2012-11-18 01 ...…

查看全部问答>