智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1931|回复: 0
打印 上一主题 下一主题

[通讯类] CAN通讯

[复制链接]

13

主题

47

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1000
威望
550
贡献
288
兑换币
335
注册时间
2013-12-3
在线时间
81 小时
毕业学校
上海工程技术大学
跳转到指定楼层
1#
发表于 2015-6-27 18:17:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
打算用STM32f103 和tja1050 can收发器 做汽车总线的通讯的
但是结果发现程序在回环模式测试下是可以正常工作的,但是进入正常模式后,也就是有两根线连接can高、can低之后没有收到任何数据,但是调式发现发送正常,发送寄存器有数据。
  1. uint8_t CAN_Mode_Init(uint8_t tsjw,uint8_t tbs2,uint8_t tbs1,u16 brp,uint8_t mode)
  2. {

  3.         GPIO_InitTypeDef GPIO_InitStructure;
  4.         CAN_InitTypeDef        CAN_InitStructure;
  5.         CAN_FilterInitTypeDef  CAN_FilterInitStructure;
  6. #if CAN_RX0_INT_ENABLE
  7.            NVIC_InitTypeDef  NVIC_InitStructure;
  8. #endif

  9.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//ʹÄÜPORTAʱÖÓ                                                                                                                    

  10.           RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//ʹÄÜCAN1ʱÖÓ       

  11.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  12.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  13.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //¸´ÓÃÍÆÍì
  14.     GPIO_Init(GPIOA, &GPIO_InitStructure);                //³õʼ»¯IO
  15.    
  16.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  17.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//ÉÏÀ­ÊäÈë
  18.     GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯IO
  19.           
  20.         //CANµ¥ÔªÉèÖÃ
  21.         CAN_InitStructure.CAN_TTCM=DISABLE;                                                 //·Çʱ¼ä´¥·¢Í¨ÐÅģʽ  //
  22.         CAN_InitStructure.CAN_ABOM=DISABLE;                                                 //Èí¼þ×Ô¶¯ÀëÏß¹ÜÀí         //
  23.           CAN_InitStructure.CAN_AWUM=DISABLE;                                                 //˯Ãßģʽͨ¹ýÈí¼þ»½ÐÑ(Çå³ýCAN->MCRµÄSLEEPλ)//
  24.           CAN_InitStructure.CAN_NART=DISABLE;//ENABLE;                                                         //½ûÖ¹±¨ÎÄ×Ô¶¯´«ËÍ //
  25.           CAN_InitStructure.CAN_RFLM=DISABLE;                                                 //±¨ÎIJ»Ëø¶¨,еĸ²¸Ç¾ÉµÄ //
  26.           CAN_InitStructure.CAN_TXFP=DISABLE;                                                 //ÓÅÏȼ¶Óɱ¨Îıêʶ·û¾ö¶¨ //
  27.           CAN_InitStructure.CAN_Mode= mode;                 //ģʽÉèÖ㺠mode:0,ÆÕͨģʽ;1,»Ø»·Ä£Ê½; //
  28.           //ÉèÖò¨ÌØÂÊ
  29.           CAN_InitStructure.CAN_SJW=tsjw;                                //ÖØÐÂͬ²½ÌøÔ¾¿í¶È(Tsjw)Ϊtsjw+1¸öʱ¼äµ¥Î»  CAN_SJW_1tq         CAN_SJW_2tq CAN_SJW_3tq CAN_SJW_4tq
  30.           CAN_InitStructure.CAN_BS1=tbs1; //Tbs1=tbs1+1¸öʱ¼äµ¥Î»CAN_BS1_1tq ~CAN_BS1_16tq
  31.           CAN_InitStructure.CAN_BS2=tbs2;//Tbs2=tbs2+1¸öʱ¼äµ¥Î»CAN_BS2_1tq ~        CAN_BS2_8tq
  32.           CAN_InitStructure.CAN_Prescaler=brp;            //·ÖƵϵÊý(Fdiv)Ϊbrp+1        //
  33.           CAN_Init(CAN1, &CAN_InitStructure);            // ³õʼ»¯CAN1

  34.         CAN_FilterInitStructure.CAN_FilterNumber=0;          //¹ýÂËÆ÷0
  35.         CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
  36.           CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32λ
  37.           CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;////32λID
  38.           CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
  39.           CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32λMASK
  40.           CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
  41.           CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FilterFIFO0;//¹ýÂËÆ÷0¹ØÁªµ½FIFO0
  42.         CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //¼¤»î¹ýÂËÆ÷0

  43.           CAN_FilterInit(&CAN_FilterInitStructure);//Â˲¨Æ÷³õʼ»¯
  44. #if CAN_RX0_INT_ENABLE
  45.        
  46.         CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);//FIFO0ÏûÏ¢¹ÒºÅÖжÏÔÊÐí.                    
  47.   
  48.           NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
  49.           NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//1;     // Ö÷ÓÅÏȼ¶Îª1
  50.           NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;            // ´ÎÓÅÏȼ¶Îª0
  51.           NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  52.           NVIC_Init(&NVIC_InitStructure);
  53. #endif
  54.         return 0;
  55. }   

  56. #if CAN_RX0_INT_ENABLE        //ʹÄÜRX0ÖжÏ
  57. //ÖжϷþÎñº¯Êý                            
  58. void USB_LP_CAN1_RX0_IRQnHandler(void)
  59. {
  60.           CanRxMsg RxMessage;
  61.        
  62.     CAN_Receive(CAN1, 0, &RxMessage);
  63.         //for(uint8_t i=0;i<8;i++)
  64.         LCD_WriteEnglishSring(20,4,"succeed!");
  65.        
  66. }
  67. #endif

  68. //can·¢ËÍÒ»×éÊý¾Ý(¹Ì¶¨¸ñʽ:IDΪ0X12,±ê×¼Ö¡,Êý¾ÝÖ¡)       
  69. //len:Êý¾Ý³¤¶È(×î´óΪ8)                                     
  70. //msg:Êý¾ÝÖ¸Õë,×î´óΪ8¸ö×Ö½Ú.
  71. //·µ»ØÖµ:0,³É¹¦;
  72. //                 ÆäËû,ʧ°Ü;
  73. uint8_t Can_Send_Msg(uint8_t* msg,uint8_t len)
  74. {       
  75.   uint8_t mbox;
  76.   u16 i=0;
  77.   CanTxMsg TxMessage;
  78.   TxMessage.StdId=0x1BC;                                         // ±ê×¼±êʶ·ûΪ0
  79.   TxMessage.ExtId=0x12;                                 // ÉèÖÃÀ©Õ¹±êʾ·û£¨29룩
  80.   TxMessage.IDE=0;                         // ʹÓÃÀ©Õ¹±êʶ·û
  81.   TxMessage.RTR=0;                 // ÏûÏ¢ÀàÐÍΪÊý¾ÝÖ¡£¬Ò»Ö¡8λ
  82.   TxMessage.DLC=len;                                                         // ·¢ËÍÁ½Ö¡ÐÅÏ¢
  83.   for(i=0;i<len;i++)
  84.   TxMessage.Data[i]=msg[i];                                 // µÚÒ»Ö¡ÐÅÏ¢         
  85.   mbox= CAN_Transmit(CAN1, &TxMessage);   
  86.   i=0;
  87.   while((CAN_TransmitStatus(CAN1, mbox)==CANTXFAILED)&&(i<0XFFF))i++;        //µÈ´ý·¢ËͽáÊø
  88.   if(i>=0XFFF)return 1;
  89.   return 0;               

  90. }
  91. //can¿Ú½ÓÊÕÊý¾Ý²éѯ
  92. //buf:Êý¾Ý»º´æÇø;         
  93. //·µ»ØÖµ:0,ÎÞÊý¾Ý±»ÊÕµ½;
  94. //                 ÆäËû,½ÓÊÕµÄÊý¾Ý³¤¶È;
  95. uint8_t Can_Receive_Msg(uint8_t *buf)
  96. {                                     
  97.         uint32_t i;
  98.         CanRxMsg RxMessage;
  99.     if( CAN_MessagePending(CAN1,CAN_FIFO0)==0)return 0;                //ûÓнÓÊÕµ½Êý¾Ý,Ö±½ÓÍ˳ö
  100.     CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);//¶ÁÈ¡Êý¾Ý       
  101.     for(i=0;i<8;i++)
  102.     buf[i]=RxMessage.Data[i];  
  103.         return RxMessage.DLC;       
  104. }
复制代码
  1. int main(void)
  2. {                           
  3.         delay_init();
  4.        
  5.         //Nokia5110 ³õʼ»¯
  6.          GPIO_Configuration();
  7.    LCD_Init();
  8.    LCD_BL_ON();     
  9.    LCD_Clear();
  10.        
  11.    LCD_WriteEnglishSring(8,0,"Conditioner");
  12.          LCD_WriteEnglishSring(40,1,"2015-07");
  13.        
  14.          LCD_WriteEnglishSring(0,2,"Tem:");
  15.          LCD_WriteEnglishSring(0,3,"Hum:");
  16.          LCD_WriteEnglishSring(50,2,"'C");
  17.          LCD_WriteEnglishSring(50,3,"%");
  18.          //TIM3_Int_Init(4999,7199);
  19.        
  20.          //CAN_DeInit(CAN1);
  21.          CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_7tq,5,CAN_Mode_Normal);//CAN_Mode_LoopBack  CAN³õʼ»¯»·»Øģʽ,²¨ÌØÂÊ450Kbps         CAN_Mode_Normal       
  22.          //NVIC_Configuration();          //ÉèÖÃNVICÖжϷÖ×é2:2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶
  23.        
  24.        
  25.         while(1)
  26.         {         
  27.                
  28.                 for(i=0;i<8;i++)
  29.                 {
  30.                         canbuf[i]=i*2;//Ìî³ä·¢ËÍ»º³åÇø
  31.                 }
  32.                         res=Can_Send_Msg(canbuf,8);//·¢ËÍ8¸ö×Ö½Ú
  33.                         if(!res) GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_RESET);                //Ìáʾ·¢ËÍʧ°Ü
  34.                        
  35.                   key=Can_Receive_Msg(buf);
  36.                
  37.         }

  38. }
复制代码
有没有玩过的大神带带我。

回复

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-27 20:56 , Processed in 0.073002 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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