打印

stm32 can如何测试?求大神指点

[复制链接]
947|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
雪中悍刀行|  楼主 | 2017-3-28 17:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

u8 CAN_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode){
       
          GPIO_InitTypeDef GPIO_InitStructure;
          CAN_InitTypeDef        CAN_InitStructure;
          CAN_FilterInitTypeDef  CAN_FilterInitStructure;
    #if CAN_RX0_INT_ENABLE
              NVIC_InitTypeDef  NVIC_InitStructure;
    #endif

          RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB, ENABLE);                                                                                                              
          RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
       
    //CAN_TX
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;       
    GPIO_Init(GPIOB, &GPIO_InitStructure);       
    //CAN_RX       
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
       
          GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE);

       
          //CANµ¥ÔªÉèÖÃ
                CAN_InitStructure.CAN_TTCM=DISABLE;                                               
                CAN_InitStructure.CAN_ABOM=DISABLE;                                                 
          CAN_InitStructure.CAN_AWUM=DISABLE;                                       
          CAN_InitStructure.CAN_NART=ENABLE;        //                       
          CAN_InitStructure.CAN_RFLM=DISABLE;                                       
          CAN_InitStructure.CAN_TXFP=DISABLE;                                       
          CAN_InitStructure.CAN_Mode= mode;                
          //ÉèÖò¨ÌØÂÊ
          CAN_InitStructure.CAN_SJW=tsjw;                               
          CAN_InitStructure.CAN_BS1=tbs1;
          CAN_InitStructure.CAN_BS2=tbs2;
          CAN_InitStructure.CAN_Prescaler=brp;         
          CAN_Init(CAN1, &CAN_InitStructure);      

                CAN_FilterInitStructure.CAN_FilterNumber=0;       
                CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
          CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
          CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;
          CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
          CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;
          CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
          CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;
          CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;

          CAN_FilterInit(&CAN_FilterInitStructure);
               
#if CAN_RX0_INT_ENABLE   //#define CAN_RX0_INT_ENABLE  1
               
                CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);
                //CAN_ITConfig(CAN1,CAN_IT_FMP1,ENABLE);                       
          NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;   
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;            
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
          NVIC_Init(&NVIC_InitStructure);
               
#endif
        return 0;
}  

相关帖子

沙发
雪中悍刀行|  楼主 | 2017-3-28 17:17 | 只看该作者

void USB_LP_CAN1_RX0_IRQHandler(void){   //USB_LP_CAN1_RX0_IRQHandler   CAN1_RX1_IRQHandler
                int i=0;
    CanRxMsg RxMessage;
                CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);
                for(i=0;i<8;i++){
               
                re_data[i]=RxMessage.Data[i];
                }
                printf("receive£¡\n");
}
int main(void)
{               
        int k;
        uart1_init(9600);         //´®¿Ú³õʼ»¯Îª9600
        k=CAN_Mode_Init(1,2,1,9,0);//CAN³õʼ»¯,²¨ÌØÂÊ36/(1+2+1)*9 = 1M
         printf("k=%d\n",k);
        while(1)
        {                       
                        if(k==0){       
                                Can_Send_Msg(canbuf,8);
                        //        k++;
                                //delay_ms(1000);
                                Can_Receive_Msg(re_data);
                        }
        }
}

使用特权

评论回复
板凳
雪中悍刀行|  楼主 | 2017-3-28 17:18 | 只看该作者

void USB_LP_CAN1_RX0_IRQHandler(void){   //USB_LP_CAN1_RX0_IRQHandler   CAN1_RX1_IRQHandler
                int i=0;
    CanRxMsg RxMessage;
                CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);
                for(i=0;i<8;i++){
               
                re_data[i]=RxMessage.Data[i];
                }
                printf("receive£¡\n");
}

void USB_LP_CAN1_RX0_IRQHandler(void){   //USB_LP_CAN1_RX0_IRQHandler   CAN1_RX1_IRQHandler
                int i=0;
    CanRxMsg RxMessage;
                CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);
                for(i=0;i<8;i++){
               
                re_data[i]=RxMessage.Data[i];
                }
                printf("receive£¡\n");
}
int main(void)
{               
        int k;
        uart1_init(9600);         //´®¿Ú³õʼ»¯Îª9600
        k=CAN_Mode_Init(1,2,1,9,0);//CAN³õʼ»¯,²¨ÌØÂÊ36/(1+2+1)*9 = 1M
         printf("k=%d\n",k);
        while(1)
        {                       
                        if(k==0){       
                                Can_Send_Msg(canbuf,8);
                        //        k++;
                                //delay_ms(1000);
                                Can_Receive_Msg(re_data);
                        }
        }
}

使用特权

评论回复
地板
一代掌门| | 2017-3-28 23:27 | 只看该作者
逻辑分析仪抓数据!
然后USB-CAN调试

使用特权

评论回复
5
@若水| | 2017-3-29 14:30 | 只看该作者
先用环回模式测试一下,看程序有没有问题,没有再测试接口芯片是否接对了

使用特权

评论回复
6
yklstudent| | 2017-3-29 16:50 | 只看该作者
你首先得有一个好的开发工具,比如周立功的USB转CAN工具

使用特权

评论回复
7
Prry| | 2017-3-30 00:09 | 只看该作者
买个usb转can工具,资金充足可以买周立功的,省钱可以买其他,完全兼容周立功的。我用到就是其他,x宝很多。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝