OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3953|回复: 2

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

[复制链接]

2

主题

2

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2018-4-4
在线时间
1 小时
发表于 2018-4-7 22:21:43 | 显示全部楼层 |阅读模式
我在做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);       
                        }
                }
       
        }
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2018-3-16
在线时间
14 小时
发表于 2018-6-5 13:51:22 | 显示全部楼层
应该是id优先级冲突,你解决了么
回复 支持 反对

使用道具 举报

33

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
314
金钱
314
注册时间
2015-11-20
在线时间
76 小时
发表于 2018-6-16 14:44:04 | 显示全部楼层
我认为  CAN总线不能同时接受与发送,根据上面的程序发现,一进入主循环两个都在发送   ,把其中一个在主循环里先延时100ms试试
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 05:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表