历史上的今天
今天是: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);
}
史海拾趣
|
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 ...… 查看全部问答> |
|
小弟正在做毕业设计,到了关键时候,我用SHT11采集温湿度在12864上显示的时候,在调整温度的时候高于20度的时候湿度也会跟着改变,但是幅度不大,再调整的时候又会改变一下,不知道是什么原因,请知道的大哥大姐帮帮小弟,这是什么原因啊?????… 查看全部问答> |
|
【EE团】LM3S811新兵营——TI LM3S811 ARM评估板0.01元秒杀!!! 【EE团】LM3S811新兵营——TI LM3S811 ARM评估板0.01元秒杀!!! 快开始了,大家。。。 距团购开始还有: 00天 01时 46分 29秒… 查看全部问答> |
|
首先,个人觉得开发板的作用,是方便研发。。在开发板上实现小型的功能,之后方便大规模生产吧 开发板的利用,更在于学习的过程,学习到好东西才好 只是根据产品的现状想到的一种方案,如果能做的,应该还是可以 谢谢… 查看全部问答> |
|
“POS机套件”中的器件,都很有特点,一部分是TI刚刚推出的新器件,性能及功能很好。 TI这次活动将了放100套这样的套件,比例相当大。 这些套件如果到了你手里,你将怎样发挥它的作用?有更具体的想法吗? [ 本帖最后由 dontium 于 2012-11-18 01 ...… 查看全部问答> |




