硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1771|回复: 5
收起左侧

[技术讨论] CAN其他节点一直发送数据,导致这个节点初始化死机

[复制链接]

23

主题

72

回帖

141

积分

初级会员

积分
141
发表于 2024-6-18 09:15:48 | 显示全部楼层 |阅读模式
本帖最后由 zbq 于 2024-6-18 09:23 编辑

遇到一个问题,GD的芯片,在总线其他节点一直发送数据时候,从BOOT跳到APP,初始化CAN,在HAL_CAN_MspInit中 HAL_NVIC_EnableIRQ(CAN1_RX0_IRQn)后死机,这时候总线上一直有数据,但是此时还没有调用下面的接口使能CAN

/* Activate CAN RX notification */
  if (HAL_CAN_ActivateNotification(can_handle, CAN_IT_RX_FIFO1_MSG_PENDING) !=
      HAL_OK) {
    return -1;
  }
  /* Start the CAN peripheral */
  if (HAL_CAN_Start(can_handle) != HAL_OK) {
    return -1;
  }

如果把HAL_NVIC_EnableIRQ(CAN1_RX0_IRQn) 放到HAL_CAN_Start(can_handle) 后面,就正常。


如果不加BOOT也是正常的,BOOT跳转之前已经把CAN DeInit,把总线其他节点去掉,也会正常。
目前分析有这几个方向:
1,和boot有关系,但是不清楚关系在哪里;
2,总线其他节点发送数据对初始化有影响;
3,CAN在打开中断时候,这时候有数据进来,造成异常了?但是此时CAN还没有START,FIFO1中断也没打开。

实在想不通这是为啥,有了解的没,讨论下?





回复

使用道具 举报

25

主题

232

回帖

307

积分

高级会员

积分
307
QQ
发表于 2024-6-18 10:34:47 | 显示全部楼层
可能是boot跳转APP前,中断寄存器没有清干净,CAN读中断触发位还存在。app里使能CAN中断时直接进中断处理,但是CAN外设还没使能,就死了
可以参考硬汉老哥之前的帖子
分享个基于STM32H7的BOOT和APP代码都使用RTX5的案例,相互之间任意跳转 - STM32H7 - 硬汉嵌入式论坛 - Powered by Discuz! (armbbs.cn)
回复

使用道具 举报

23

主题

72

回帖

141

积分

初级会员

积分
141
 楼主| 发表于 2024-6-18 11:31:21 | 显示全部楼层
yono 发表于 2024-6-18 10:34
可能是boot跳转APP前,中断寄存器没有清干净,CAN读中断触发位还存在。app里使能CAN中断时直接进中断处理, ...

有可能,谢谢了,我照这个方法改下试试
回复

使用道具 举报

23

主题

71

回帖

140

积分

初级会员

积分
140
发表于 2024-6-21 17:02:02 | 显示全部楼层
跳转之前先关外设 在清中断
回复

使用道具 举报

23

主题

72

回帖

141

积分

初级会员

积分
141
 楼主| 发表于 2024-7-5 09:41:29 | 显示全部楼层
结下贴,是boot跳转之前有一个pend中断没有关闭,导致在app初始化can_deinit一打开中断就进入中断处理了,但是这时候CAN控制器还没有初始化。
这么说的话cubeMx在生成代码时候把HAL_NVIC_EnableIRQ放到deinit中是不是不合适,应该放在外设初始化使能之后。
回复

使用道具 举报

7

主题

53

回帖

74

积分

初级会员

积分
74
发表于 2024-8-7 19:23:32 | 显示全部楼层
MARK一下备用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 13:20 , Processed in 0.038970 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表