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

stm32 CAN无法通信

[复制链接]
alan7lanshui 提问时间:2018-3-15 21:29 /
本帖最后由 alan7lanshui 于 2018-3-16 18:02 编辑

stm32板子,断电重启之后,无法进行CAN通信,只有在第一次写入程序时,可以进行CAN通信,这是为什么?

试验方法:
1、板子2烧进去程序,不断电,拔掉跳线帽,使boot0=0,可以与板1CAN通信;
2、板子2烧进去程序,断电,拔掉跳线帽,使boot0=0,不可以与板1CAN通信;
3、板子2烧进去程序,断电,拔掉跳线帽,使boot=0,重新上电,不可以与板1CAN通信,板子复位一次,可以与板1通信。(有的时候可能要复位好几次CAN才能通信)。4、通信过程中拔掉CAN总线,重新连接之后,可以通信。


CAN试验通信流程:
PC串口向板1发送指令->板1接收到指令后,通过CAN总线发送给板2->板2接收到板1通过CAN发送的数据后,做出相应控制,并将数据通过CAN再发送给板1。

提出的问题:
会不会是板2突然掉电,使CAN离线,做出错误管理,再次上电后无法通信,重新复位后,将错误管理置位的标志清空,可以再次通信?(提出的小疑问)

使用过的方法:将ABOM=ENABLE,没有效果。

硬件环境:
MCU:stm32F103R8T6  CAN收发器:MCP2551

软件环境:
Keil5.16+stm32固件库V3.5版本。


收藏 评论14 发布时间:2018-3-15 21:29

举报

14个回答
琦子 回答时间:2018-3-16 08:03:03
楼主用回环模式试试 还有需要贴代码瞅瞅
废鱼 回答时间:2018-3-16 08:40:45
如果第一次可以,复位以后不行,考虑一下接收器的处理,接收器是否也报错?

评分

参与人数 1蝴蝶豆 +1 收起 理由
zero99 + 1

查看全部评分

wofei1314 回答时间:2018-3-16 16:13:36
具体点是不能发送还是不能接受,还是都不能?

都不能,先检查硬件,再检查CAN的配置....

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

alan7lanshui 回答时间:2018-3-16 17:20:22
wofei1314 发表于 2018-3-16 16:13
具体点是不能发送还是不能接受,还是都不能?

都不能,先检查硬件,再检查CAN的配置.... ...

昨天晚上试验方法:
1、板子烧进去程序,不断电,拔掉跳线帽,使boot0=0,CAN可以通信;
2、板子烧进去程序,断电,拔掉跳线帽,使boot0=0,CAN不可以通信;
3、板子烧进去程序,断电,拔掉跳线帽,使boot=0,重新上电,CAN不可以通信,板子复位一次,CAN可以通信。(有的时候可能要复位好几次CAN才能通信)。
alan7lanshui 回答时间:2018-3-16 18:03:31
安 发表于 2018-3-16 08:40
如果第一次可以,复位以后不行,考虑一下接收器的处理,接收器是否也报错? ...

您好!请您看看现在的问题描述。
alan7lanshui 回答时间:2018-3-16 18:05:44
wofei1314 发表于 2018-3-16 16:13
具体点是不能发送还是不能接受,还是都不能?

都不能,先检查硬件,再检查CAN的配置.... ...

使用CAN接收中断接收,进入中断后,将数据再返回。
实验现象:无法进入CAN接收中断
Angel_YY_ST 回答时间:2018-3-16 18:12:08
提示: 作者被禁止或删除 内容自动屏蔽
alan7lanshui 回答时间:2018-3-16 18:30:50
Angel_YY 发表于 2018-3-16 18:12
CAN总线两端的120欧终端电阻安装了吗?如果没安装总线通讯会有很大干扰,造成通讯不成功。 ...

有120欧终端电阻
废鱼 回答时间:2018-3-17 08:53:27
楼主,你得说明板1和板2分别是什么。CAN使用发生错误,大概有几点:
1、CAN波特率不同
2、CAN网络未加120欧姆电阻
3、CAN网络发生错误,重新初始化CAN总线。我用ST的CAN好多年了。未发生类似的问题。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

alan7lanshui 回答时间:2018-3-17 11:27:08
安 发表于 2018-3-17 08:53
楼主,你得说明板1和板2分别是什么。CAN使用发生错误,大概有几点:
1、CAN波特率不同
2、CAN网络未加120欧 ...

1、板1和板2是两块相同的PCB板,MCU和CAN收发器都一样
2、CAN波特率设置的都是1MBbps
3、有120欧电阻

断电重启之后,将板2重新复位之后,可以通信
废鱼 回答时间:2018-3-17 11:44:10
这也测试,CAN收不到数据或发不出数据收,进行CAN重新初始化,是否可以解决?
alan7lanshui 回答时间:2018-3-17 14:12:02
安 发表于 2018-3-17 11:44
这也测试,CAN收不到数据或发不出数据收,进行CAN重新初始化,是否可以解决? ...

将stm32f103R8T6复位,程序重新执行,会初始化CAN,可以通信。
问题:板子断电,再重新上电,MCU不也会重新执行程序吗?
废鱼 回答时间:2018-3-17 14:40:42
楼主用的什么库?HAL吗?
我说的意思是,程序中增加自动初始化CAN总线的代码,不是让你复位或者断电。
sirjin 回答时间:2019-2-21 11:55:30
兄弟,最后是啥原因?能不能解释一下,跪谢

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版