STM32/STM8技术论坛
直播中

杨雪

6年用户 4经验值
私信 关注
[问答]

一块STM32F103的开发板,CAN分析仪连接电脑,正常模式下发送数据,CANTest调试软件上不显示任何数据,请问怎么解决?

  1. #include "STM32f10x.h"

  2. u8 CAN_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode)
  3. {
  4.         GPIO_InitTypeDef GPIO_InitStructure;
  5.         CAN_InitTypeDef CAN_InitStructure;
  6.         CAN_FilterInitTypeDef CAN_FilterInitStructure;
  7.         NVIC_InitTypeDef NVIC_InitStructure;
  8.         
  9.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO |RCC_APB2Periph_GPIOB, ENABLE);
  10.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
  11.         GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE);
  12.         
  13.          /* Configure CAN pin: RX */                                                                                       // PB8
  14.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  15.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                     // ÉÏÀ­ÊäÈë
  16.   GPIO_Init(GPIOB, &GPIO_InitStructure);
  17.   
  18.   /* Configure CAN pin: TX */                                                                                       // PB9
  19.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  20.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                         // ¸´ÓÃÍÆÍìÊä³ö
  21.   GPIO_Init(GPIOB, &GPIO_InitStructure);
  22.         
  23.         CAN_InitStructure.CAN_TTCM=DISABLE;//·Çʱ¼ä´¥·¢Í¨ÐÅģʽ
  24.         CAN_InitStructure.CAN_ABOM=DISABLE;//Èí¼þ×Ô¶¯ÀëÏß¹ÜÀí
  25.         CAN_InitStructure.CAN_AWUM=DISABLE;//˯Ãßģʽ¿Éͨ¹ýÈí¼þ»½ÐÑ
  26.         CAN_InitStructure.CAN_NART=ENABLE;//½ûÖ¹±¨ÎÄ×Ô¶¯·¢ËÍ
  27.         CAN_InitStructure.CAN_RFLM=DISABLE;//±¨ÎIJ»Ëø¶¨£¬Ðµĸ²¸Ç¾ÉµÄ
  28.         CAN_InitStructure.CAN_TXFP=DISABLE;//ÓÅÏȼ¶Óɱ¨Îıêʾ·û¾ö¶¨
  29.         CAN_InitStructure.CAN_Mode=CAN_Mode_Normal ;//ģʽÉèÖãºmode 0ÆÕͨģʽ 1 »Ø»·Ä£Ê½
  30.          
  31.          //²¨ÌØÂÊÉèÖÃ
  32.         CAN_InitStructure.CAN_SJW=tsjw;//ÖØÐÂͬ²½ÌøÔ¾¿í¶È
  33.         CAN_InitStructure.CAN_BS1=tbs1;
  34.         CAN_InitStructure.CAN_BS2=tbs2;                                //Tbs2=tbs2+1¸öʱ¼äµ¥Î»CAN_BS2_1tq ~        CAN_BS2_8tq
  35.         CAN_InitStructure.CAN_Prescaler=brp;        //·ÖƵϵÊý(Fdiv)Ϊbrp+1        
  36.         CAN_Init(CAN1, &CAN_InitStructure);                //³õʼ»¯CAN1

  37.         CAN_FilterInitStructure.CAN_FilterNumber=0;        //¹ýÂËÆ÷0
  38.         CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;         //ÆÁ±Îλģʽ
  39.         CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;         //32λ¿í
  40.         CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;        //ÓÃÀ´É趨¹ýÂËÆ÷±êʾ·û£¬32λλ¿íʱΪÆä¸ß¶Î룬16λλ¿íʱλµÚһλ
  41.         CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;//ÓÃÀ´É趨¹ýÂËÆ÷±êʾ·û£¬32λλ¿íʱΪÆäµÍ¶Î룬16λλ¿íʱλµÚ¶þλ
  42.         CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//¹ýÂËÆ÷¸ß16λÿλÎÞÐè¹ýÂË£¬
  43.         CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;//¹ýÂËÆ÷µÍ16λÿλÎÞÐè¹ýÂË
  44.         CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//¹ýÂËÆ÷0¹ØÁªµ½FIFO0
  45.         CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;//¼¤»î¹ýÂËÆ÷0[code]u8 CAN_Send_Msg(u8* msg,u8 len)
  46. {        
  47.         u8 mbox;
  48.         u16 j;
  49.         CanTxMsg TxMessage;       //can·¢ËͽṹÌå
  50.         TxMessage.StdId=0x12;                        // ±ê×¼±êʶ·û
  51. //        TxMessage.ExtId=0x00;                        // ÉèÖÃÀ©Õ¹±êʾ·û
  52.         TxMessage.IDE=CAN_Id_Standard;         // ±ê×¼Ö¡
  53.         TxMessage.RTR=CAN_RTR_Data;                // Êý¾ÝÖ¡
  54.         TxMessage.DLC=len;                                // Òª·¢Ë͵ÄÊý¾Ý³¤¶È
  55.         for(j=0;j
  56.         TxMessage.Data[j]=msg[j];//дÈëÊý¾Ý
  57.         //CAN_Transmit(CAN1, &TxMessage);
  58.         mbox=CAN_Transmit(CAN1, &TxMessage);
  59.         j=0;
  60.         while((CAN_TransmitStatus(CAN1,mbox)==CAN_TxStatus_Failed)&&(j<0XFFF))//µÈ´ý·¢ËͽáÊø
  61.                 j++;
  62.         if(j>0XFFF)
  63.                 return 1;
  64.         return 0;
  65. }

  66. u8 CAN_Receive_Msg(u8 *buf)
  67. {
  68.         u32 i;
  69.         CanRxMsg RxMessage;
  70.         if(CAN_MessagePending(CAN1,CAN_FIFO0)==0)
  71.                 return 0;//ûÓнÓÊÕµ½Êý¾Ý
  72.         CAN_Receive(CAN1,CAN_FIFO0,&RxMessage);//¶ÁÈ¡Êý¾Ý
  73.         for(i=0;i<8;i++)//°Ñ8¸öÊý¾Ý·ÅÔÚ²ÎÊýÊý×éÀï
  74.         {
  75.                 buf[i]=RxMessage.Data[i];
  76. }
  77. return RxMessage.DLC;//·µ»ØÊý¾ÝÀàÐÍ
  78.         
  79. }


  80. //ÖжϽÓÊÕº¯Êý
  81. void USB_LP_CAN1_RX0_IRQHandler(void)
  82. {  
  83.         u8 box;
  84.         CanRxMsg RxMessage;
  85.         if(CAN_GetITStatus(CAN1,CAN_IT_FMP0)!=RESET)
  86.         {
  87.                 CAN_ClearITPendingBit(CAN1,CAN_IT_FMP0);//Çå³ýÖжϱê־λ
  88.                 CAN_Receive(CAN1,CAN_FIFO0,&RxMessage);
  89. }
  90. }  
  91. int main(void)
  92. {        
  93.         u8 i;
  94.         u8 cnt=4;
  95.         u8 canbuf[8];
  96.           SystemInit();
  97.    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//ÉèÖÃÖжÏÓÅÏȼ¶·Ö×éΪ×é2£º2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶
  98.         CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,4,CAN_Mode_Normal );//CAN³õʼ»¯»·»Øģʽ,²¨ÌØÂÊ500Kbps
  99.         //²¨ÌØÂʵļÆË㣺 Ò»¹²1+8+9=18¸öʱ¼äµ¥Ôª£¬canʱÖÓƵÂÊΪ36mhz£¬4·ÖƵ
  100.         //ËùÒÔ:²¨ÌØÂÊ=36/4/18=500kbps;
  101.         for(i=0;i<8;i++)               
  102.                         canbuf[i]=cnt+i;
  103.          while(1)
  104.         {
  105.    
  106.                 CAN_Send_Msg(canbuf,8);
  107.       
  108.     }
  109.         
  110. }

        CAN_FilterInit(&CAN_FilterInitStructure);                        //Â˲¨Æ÷³õʼ»¯
        
        NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;     // Ö÷ÓÅÏȼ¶Îª1(ÇÀÕ¼ÓÅÏȼ¶)
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;            // ´ÎÓÅÏȼ¶Îª0(ÏìÓ¦ÓÅÏȼ¶)
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        
        CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);                                //FIFO0ÏûÏ¢¹ÒºÅÖжÏÔÊÐí.
        return 0;
}
[/code]

上传上去注释都乱码了。。请各位帮我看下,问题出在哪里了,我实在找不出来,多谢!

回帖(1)

曹立东

2018-8-11 19:57:56
要先确认can驱动有没有问题,然后确认对象字典地址没问题,最后再看程序,从简单点的小程序开始
举报

更多回帖

发帖
×
20
完善资料,
赚取积分