关于can的问题

2019-08-12 17:45发布

下载的官方战舰版的源码,只能单向传输?有什么解决的方案吗?
u8 key;
u8 i=0,t=0;
u8 cnt=0;
u8 canbuf[8];
u8 res;
u8 mode=CAN_Mode_LoopBack;
//CAN工作模式;CAN_Mode_Normal(0):普通模式。
//                                         CAN_Mode_LoopBack(1):环回模式。       
void while_1()
{
       
                        key=KEY_Scan(0);
                if(key==KEY0_PRES)//KEY0按下,发送一次数据
                {
                        for(i=0;i<8;i++)
                        {
                                canbuf[i]=cnt+i;//填充发送缓冲区
                                printf("canbuf[%d] = %d ",i,canbuf[i]);
                        }
                        res=Can_Send_Msg(canbuf,8);//发送8个字节
                        if(res)
                        {
                                printf("Failed ");                //提示发送失败
                        }
                        else
                        {
                                printf("OK ");
                        }                               
                }else if(key==WKUP_PRES)//WK_UP按下,改变CAN的工作模式
                {          
                        mode=!mode;
                  CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,4,mode);//CAN普通模式初始化, 波特率500Kbps
                        if(mode==0)//普通模式,需要2个开发板
                        {
                                printf("Nnormal Mode ");            
                        }else //回环模式,一个开发板就可以测试了.
                        {
                                printf("LoopBack Mode ");
                        }
                }                 
                key=Can_Receive_Msg(canbuf);
                if(key)//接收到有数据
                {                       
                        for(i=0;i<key;i++)
                        {                                                                            
                                printf("canbuf[%d] = %d ",i,canbuf[i]);
                        }
                }
                t++;
                delay_ms(10);
                if(t==20)
                {
                        LED0=!LED0;//提示系统正在运行       
                        t=0;
                        cnt++;
                        printf("cnt = %d ",cnt);               
                }
       
       
}


0条回答

一周热门 更多>