1.CAN数据周期发送时,如果连续发送两帧数据,中间没有延时,并且MCU CAN只开了一个邮箱的话,第二帧数据发送时就会出现CAN总线BUSY,导致数据发送不出去。

解决方案:多开几个邮箱,每次往不同的邮箱里写数据,在MCU不繁忙时,CAN发送数据,邮箱写满时就会出现CAN发送丢帧的情况;;如果只有三个邮箱,(STM32一般有三个邮箱)那么每次只能连续发送三帧数据,之后需要最好1ms以上的延时,再发送下一次数据,否则就会丢帧。

                if(CellNum == 1)
                {
                    BMU_To_BCMU_CellTemperature1_AFE(0);
                    BMU_To_BCMU_CellTemperature1_AFE(1);
                }
                else if(CellNum == 3)
                {
                    BMU_To_BCMU_CellTemperature2_AFE(0);
                    BMU_To_BCMU_CellTemperature2_AFE(1);
                }
 

还有一些芯片,可以直接往不同的邮箱写数据,每个周期如果想发送五帧数据,直接开五个邮箱就行了,但是注意每五帧要有间隔

  CAN_NODE_MO_Transmit(CAN_NODE_0.lmobj_ptr[0]);//调试用
  CAN_NODE_MO_Transmit(CAN_NODE_0.lmobj_ptr[1]);//调试用
  CAN_NODE_MO_Transmit(CAN_NODE_0.lmobj_ptr[2]);//调试用
  CAN_NODE_MO_Transmit(CAN_NODE_0.lmobj_ptr[3]);//调试用
  CAN_NODE_MO_Transmit(CAN_NODE_0.lmobj_ptr[5]);//调试用

2.CAN数据发送顺序改变

解决方案:

对每个邮箱的寄存器配置优先级配置的不一样,一般数值越小优先级越高。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐