你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

在CAN通信时发送超时后会出现堵死状况

[复制链接]
电小龙 提问时间:2017-11-27 10:58 /
小弟最近在用CAN通信,在开发过程中发现了用HAL_CAN_Transmit发送数据时,如果把CAN的通信线断开时,程序会死在HAL_CAN_Transmit函数中的if(Timeout != HAL_MAX_DELAY)的判断中。我使用的是freertos,我也百度了一下,说是里面的_HAL_UNLOCK(hcan)的问题,看的有点一头雾水。或许也是我的CAN配置的问题吧,有哪位大侠知道麻烦告诉下小弟,感激不尽、、、

代码1

代码1
<
收藏 1 评论12 发布时间:2017-11-27 10:58

举报

12个回答
回答时间:2017-11-27 11:43:50
我对RTOS不是很熟悉,我找了一下,返回的值应该改为xTaskGetTickCount这个函数。
回答时间:2017-11-27 11:04:09
HAL_GetTick这个函数里面的计数器是否在增加,如果没有,修改为rtos中的计数器。
电小龙 回答时间:2017-11-27 11:34:46
插上仿真器进一步跟踪后,发现死的位置是在if((Timeout == 0) || ((HAL_GetTick() - tickstart) > Timeout))这一句里,还不是if里面的语句,也就是在判断的时候出现了卡死。所以应该是在运行HAL_GetTick()这个函数里出现的卡死,这是为什么呢?等大神、、、
电小龙 回答时间:2017-11-27 11:36:17
本帖最后由 电小龙 于 2017-11-27 11:41 编辑
安 发表于 2017-11-27 11:04
HAL_GetTick这个函数里面的计数器是否在增加,如果没有,修改为rtos中的计数器。 ...

好像是你说的hal_gettick方面的问题,我现在该怎样处理呢?修改为rtos中的计时器怎么改呢?
电小龙 回答时间:2017-11-27 11:38:32
安 发表于 2017-11-27 11:04
HAL_GetTick这个函数里面的计数器是否在增加,如果没有,修改为rtos中的计数器。 ...

uwTick没有增加
电小龙 回答时间:2017-11-27 16:49:22
安 发表于 2017-11-27 11:43
我对RTOS不是很熟悉,我找了一下,返回的值应该改为xTaskGetTickCount这个函数。 ...

太感谢了,刚刚试了是可以的,又学到了新知识了、、、
回答时间:2017-11-27 16:53:17
客气了,大家都是在实践中学习。
RegisEm 回答时间:2017-12-9 15:35:07
楼主你好,你的问题描述中,把CAN的通信线断开是什么意思,还有最后您是怎么解决问题的?
电小龙 回答时间:2017-12-14 22:13:30
RegisEm 发表于 2017-12-9 15:35
楼主你好,你的问题描述中,把CAN的通信线断开是什么意思,还有最后您是怎么解决问题的? ...

把通信线断开是我在CAN数据传输过程中一旦断开数据线,设备就死机了。然后最终解决的方法是在hal_gettick函数中用了frertos的函数来替代本来的Hal库里的自带的函数。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2 结贴奖励

查看全部评分

12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版