最近困扰很久,CAN2初始化不成功,把断点设置在if那里,必定进入错误状态,但是把断点设在status那里,每次都能进去,能初始化成功,不知道为何?MCU初始化CAN控制器的时候,外面的收发器需要上电吗? /* Check acknowledged */ if (HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK)) { status = CAN_INITSTATUS_SUCCESS; } 发生问题是在高温80度时,设置了INRQ位,但是等不到INAK的置位应答,导致初始化错误,常温没有问题,高温有问题,不知道哪位大侠见过? /* Request initialisation */ SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); /* Get timeout */ tickstart = HAL_GetTick(); /* Wait the acknowledge */ while(HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_INAK)) { if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) { hcan->State= HAL_CAN_STATE_TIMEOUT; /* Process unlocked */ __HAL_UNLOCK(hcan); return HAL_TIMEOUT; } } |
您 这 CAN 是用于 那些 场合?
》80度有问题,应该不是 软件的问题,有空 可参考下我们的程序
冗余双CAN现场总线STM32F105开发板KeilC++源程序
https://www.stmcu.org.cn/module/ ... amp;fromuid=3399024
(出处: 意法半导体STM32/STM8技术社区)
评分
查看全部评分
新手
黑体字分明只是说断点位置不同影响运行结果,整体上是可以进入初始化模式的。
红体字描述的是温度高了进不了初始化模式。不过温度80度以上的话,可能有点玄了,
毕竟STM32F105XXT6的保证温度范围是-40到85°C.
评分
查看全部评分
楼主意思是高温初始化超时,按规格书不应该是这种情况,建议参照规格书参数调整超时时间设置(或许时钟频率发生一些变化,处于临界状态)
评分
查看全部评分