我有两块原子哥的板子,都是战舰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速率
接收速率只有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的速率
发送端代码:
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;
}
想了半天还是想不通,总是觉得发送端的统计有问题!求指点!
|