OpenEdv-开源电子网

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

CAN通信问题,第一次发帖求助,求大家帮忙!

[复制链接]

1

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2015-3-29
在线时间
21 小时
发表于 2016-2-29 22:30:41 | 显示全部楼层 |阅读模式
5金钱
我有两块原子哥的板子,都是战舰V3,我将两块板子的CANL接CANL,CANH接CANH,我已最大的速度去发送八个字节的标准数据帧,开启了定时器定时一秒打印一次通信速率(多少帧/s)。

发送板子的代码:我把LCD什么的都注释掉了,为了在while(1)循环里面尽可能提升速率,然后在这条语句执行后res=Can_Send_Msg(canbuf,8);//发送8个字节,用if(!res)n++,把n+1,得到发送的速率,可是我得到的速度太大了,我都不敢相信如图所示达到了210000帧,按一帧8字节(8Byte),这不是超过了百度所说的1Mbps吗!超了好几百倍,这里我就想不通了,求大家帮帮我!


发送端速率:

发送学习板can速率

发送学习板can速率



接收速率只有9000帧左右!好郁闷啊,大家帮我看看到底是什么问题!
另外我测试过接收端的接到的数据,确定是没有错误的,就是接收速度不够。

接收端代码:
                        while(1)
                {
                res=Can_Receive_Msg(canbuf);
                if(res)//接收到有数据
                {               
                        static unsigned int n=0;
                        static unsigned int n_1=0;
                        n++;
                        if(flag == 1)
                        {                                       
                                printf("%d帧/s\r\n",n-n_1);
                                n_1 = n;
                                flag=0;
                        }

接收端速率:

接收can的速率

接收can的速率


发送端代码:
extern flag;
int main(void)
{         
        u8 key;
        u8 i=0,t=0;
        u8 cnt=0;
        u8 canbuf[8]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
        u8 res;
        u8 mode=CAN_Mode_Normal;//CAN工作模式;CAN_Mode_Normal(0):普通模式,CAN_Mode_LoopBack(1):环回模式
         
        TIM3_Int_Init(10000,7199);//10Khz的计数频率,计数到5000为500ms

        delay_init();                     //延时函数初始化          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
        uart_init(115200);                 //串口初始化为115200
        LED_Init();                                  //初始化与LED连接的硬件接口
        LCD_Init();                                   //初始化LCD       
        KEY_Init();                                //按键初始化                        
        CAN_Mode_Init(CAN_SJW_2tq,CAN_BS2_5tq,CAN_BS1_2tq,4,CAN_Mode_Normal);//CAN初始化环回模式,波特率500Kbps    //1M
        printf("发送端开发板初始化完毕!\r\n");         
//         POINT_COLOR=RED;//设置字体为红色
//        LCD_ShowString(60,50,200,16,16,"WarShip STM32");       
//        LCD_ShowString(60,70,200,16,16,"CAN TEST");       
//        LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
//        LCD_ShowString(60,110,200,16,16,"2015/1/15");
//        LCD_ShowString(60,130,200,16,16,"LoopBack Mode");         
//        LCD_ShowString(60,150,200,16,16,"KEY0:Send WK_UP:Mode");//显示提示信息               
//        POINT_COLOR=BLUE;//设置字体为蓝色          
//        LCD_ShowString(60,170,200,16,16,"Count:");                        //显示当前计数值       
//        LCD_ShowString(60,190,200,16,16,"Send Data:");                //提示发送的数据       
//        LCD_ShowString(60,250,200,16,16,"Receive Data:");        //提示接收到的数据               
        while(1)
        {
//                key=KEY_Scan(0);
//                if(key==KEY0_PRES)//KEY0按下,发送一次数据
//                {
                static unsigned int n=0;
                static unsigned int n_1=0;
//                        for(i=0;i<8;i++)
//                        {
//                                canbuf=cnt+i;//填充发送缓冲区
////                                if(i<4)LCD_ShowxNum(60+i*32,210,canbuf,3,16,0X80);        //显示数据
////                                else LCD_ShowxNum(60+(i-4)*32,230,canbuf,3,16,0X80);        //显示数据
//                         }
                        res=Can_Send_Msg(canbuf,8);//发送8个字节
                        if(!res)n++;
                        if(flag == 1)
                        {                                       
                                printf("%d帧/s\r\n",(n-n_1));
                                n_1 = n;
                                flag=0;
                        }


想了半天还是想不通,总是觉得发送端的统计有问题!求指点!

青春太苍白,来不及悲伤,我只想变得强大!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2015-3-29
在线时间
21 小时
 楼主| 发表于 2016-3-1 10:05:25 来自手机 | 显示全部楼层
有人吗,自己顶一下≥﹏≤
回复

使用道具 举报

8

主题

193

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
金钱
303
注册时间
2012-12-19
在线时间
16 小时
发表于 2016-3-1 11:16:53 | 显示全部楼层
速率没统计过,不过按照1M的速率来传输确实是很快,最好是发送一个有规律的数据,然后看接收的数据进行判断。
回复

使用道具 举报

1

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2015-3-29
在线时间
21 小时
 楼主| 发表于 2016-3-1 13:49:51 | 显示全部楼层
sdwhupk 发表于 2016-3-1 11:16
速率没统计过,不过按照1M的速率来传输确实是很快,最好是发送一个有规律的数据,然后看接收的数据进行判断 ...

为什么接收速率会小于发送速率那么多呢,你的意思是检测接收端有没有漏接数据,是这个意思吗
青春太苍白,来不及悲伤,我只想变得强大!
回复

使用道具 举报

8

主题

193

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
金钱
303
注册时间
2012-12-19
在线时间
16 小时
发表于 2016-3-9 08:10:19 | 显示全部楼层
我的意思是接收端的函数处理时间长点,发送时处理时间短,你看看是那些数据丢掉了。
回复

使用道具 举报

1

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2015-3-29
在线时间
21 小时
 楼主| 发表于 2016-3-9 15:59:37 | 显示全部楼层
sdwhupk 发表于 2016-3-9 08:10
我的意思是接收端的函数处理时间长点,发送时处理时间短,你看看是那些数据丢掉了。

是有些数据丢失了,跟接收端的函数运行速度有关的,目前在测试与上位机的最大不丢失数据的速度
青春太苍白,来不及悲伤,我只想变得强大!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-13 00:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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