CAN数据连续发送,第二帧发不出去或周期有问题
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数据发送顺序改变
解决方案:
对每个邮箱的寄存器配置优先级配置的不一样,一般数值越小优先级越高。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)