CAN单向通信成功,双向通信失败求解

2019-07-20 07:40发布

我在做CAN的通信实验,有一块F4的板子和一块F1的板子。我的目标是两块板子都往CAN总线上发信息,且两块板子都能接收并显示。问题就出在这儿了,F4的板子向F1发信息没问题,F1向F4发信息也没问题,一切正常,但两块板子都往总线发信息就会接受失败.....尝试了许多办法仍然不行,求大神帮助。下面简单贴一下主函数。两块板子的程序几乎完全一样。初始化程序就不贴了,直接照搬的原子例程
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"         
#include "can.h"


int main(void)
{         
        u8 key;
        u8 i=0;
        u8 res;
        u8 canbuf[8];



        delay_init();                   
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        uart_init(115200);                
        LED_Init();                         
        LCD_Init();                       
        KEY_Init();                                

        CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,8,CAN_Mode_Normal);  //波特率250kbps  

               
        while(1)
        {
      canbuf[0]=1;
                        canbuf[2]=0;
                        canbuf[3]=1;
                        canbuf[4]=0;
                        canbuf[5]=1;
                        canbuf[1]=0;
                        canbuf[6]=1;
                        canbuf[7]=0;
                        res=Can_Send_Msg(canbuf,8);//发送数据
            delay_ms(100);
               
                key=Can_Receive_Msg(canbuf);//接受数据。如果接收到数据该函数会返回1值,否则返回0
                if(key)
                {                       
                        LCD_Fill(60,270,130,310,WHITE); //清空显示
                        for(i=0;i<key;i++)
                        {                                                                            
                                if(i<4)LCD_ShowxNum(60+i*32,270,canbuf[i],3,16,0X80);        //显示数据
                                else LCD_ShowxNum(60+(i-4)*32,290,canbuf[i],3,16,0X80);       
                        }
                }
       
        }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
lining
1楼-- · 2019-07-20 09:26
 精彩回答 2  元偷偷看……
图南
2楼-- · 2019-07-20 11:35
我认为  CAN总线不能同时接受与发送,根据上面的程序发现,一进入主循环两个都在发送   ,把其中一个在主循环里先延时100ms试试

一周热门 更多>