大家好,
在调can时初始化后通过while(!canIsRxMessageArrived(canREG1, canMESSAGE_BOX2))循环判断是否收到数据,然后在这个循环中把接收到的数据再发走,用的是不同的canMESSAGE_BOX收发。测试中通过测试工具发出数据,单片机能接收,且接收后又能发出来。但第二次开始用测试软件给单片机发数据就不行了,显示发送失败,这是什么原因呢?是需要清除什么标志位还是什么的?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Ken,
感谢您的回复!报文ID和接收端设置的ID等是一样的。可能我表达的意思不清楚。我的意思就是我通过上位软件连续两次或者三次。。给单片机发同样数据,只有第一次发给单片机后,单片机相应了,发出了报文,上位软件也收到了它发的,第2次,3次。。后面的就收不到单片机反馈了,具体代码如下,
while(!canIsRxMessageArrived(canREG1, canMESSAGE_BOX2));
{
canGetData(canREG1, canMESSAGE_BOX2, tx_data);
canTransmit(canREG1, canMESSAGE_BOX1, tx_data);
}
是不是需要做延时什么的还是要清具体哪个标志位?
谢谢
Ken,
我试了一下中断接收。在使能一个中断的情况下,调用canMessageNotification函数里发送数据是可以的。然后又试了下使能2个接收中断。在一个canMessageNotification函数里写了canGetData(canREG1, canMESSAGE_BOX3, tx_data);canGetData(canREG1, canMESSAGE_BOX2, tx_data);最后再写一个发送函数。用上位机软件测试同时发送2帧ID数据,故意把mailbox3的ID数据放在前面,mainbox2的ID数据放在后面,然后同时发送。结果是mainbox3先收到数据,mainbox2后收到。这是什么原因?mainbox2应该优先的。难道是中断嵌套了?
谢谢