[STM32F1] CAN环回模式怎么灯不亮(中断忽略掉)

[复制链接]
717|1
 楼主| ZHOU@JIE 发表于 2016-4-7 14:31 | 显示全部楼层 |阅读模式
CAN, IO, pi, ni, ST
  1. #include "stm32f10x.h"
  2. #include "stdio.h"
  3. void LED_Configuration(void);
  4. void USART_Configuration(void);
  5. typedef enum{FAIL=0,PASS=1} TestStatus;
  6. TestStatus RxStatus;
  7. extern TestStatus CAN_Configuration(void);
  8. #define LED1_ON GPIO_SetBits(GPIOB,GPIO_Pin_5);
  9. #define LED1_OFF GPIO_ResetBits(GPIOB,GPIO_Pin_5);

  10. int main(void)
  11. {
  12.         LED_Configuration();
  13.         USART_Configuration();
  14.         printf("\r\n This is a LoopBackr test r\n");
  15.   CAN_Configuration();
  16.         printf("\r\n Can init success r\n");
  17.         RxStatus=CAN_Configuration();
  18.         while(1)
  19.         {       
  20.                 if(RxStatus==1)
  21.                 {
  22.                         LED1_ON;
  23.                 }
  24.                 else
  25.                 {
  26.                         LED1_OFF;
  27.                 }
  28.         }
  29. }

  30. void LED_Configuration()
  31. {
  32.         GPIO_InitTypeDef GPIO_InitStructure;
  33.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  34.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
  35.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  36.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  37.         GPIO_Init(GPIOB,&GPIO_InitStructure);
  38. }

  39. void USART_Configuration(void)
  40. {       
  41.         GPIO_InitTypeDef GPIO_InitStructure;
  42.         USART_InitTypeDef USART_InitStructure;
  43.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1, ENABLE);
  44.        
  45.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
  46.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
  47.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  48.         GPIO_Init(GPIOA,&GPIO_InitStructure);
  49.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
  50.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
  51.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  52.         GPIO_Init(GPIOA,&GPIO_InitStructure);
  53.        
  54.         USART_InitStructure.USART_BaudRate=9600;
  55.         USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
  56.         USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
  57.         USART_InitStructure.USART_Parity=USART_Parity_Odd;
  58.         USART_InitStructure.USART_StopBits=USART_StopBits_1;
  59.         USART_InitStructure.USART_WordLength=USART_WordLength_8b;
  60.         USART_Init(USART1,&USART_InitStructure);
  61.         USART_Cmd(USART1,ENABLE);
  62. }

  63. TestStatus CAN_Configuration(void)
  64. {
  65.         GPIO_InitTypeDef GPIO_InitStructure;
  66.         NVIC_InitTypeDef NVIC_InitStructure;
  67.         CAN_InitTypeDef CAN_InitStructure;
  68.         CAN_FilterInitTypeDef CAN_FilterInitStructure;
  69.         CanTxMsg TxMessage;
  70.         CanRxMsg RxMessage;
  71.         uint8_t TransmitMailbox=0;
  72.         u32 i;
  73.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
  74.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1,ENABLE);
  75.        
  76.         /****** CAN ×ÜÏßÒý½ÅµÄÅäÖÃ******/
  77.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
  78.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
  79.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  80.         GPIO_Init(GPIOB,&GPIO_InitStructure);
  81.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
  82.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
  83.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  84.         GPIO_Init(GPIOB,&GPIO_InitStructure);
  85.         GPIO_PinRemapConfig(GPIO_Remap1_CAN1,ENABLE);
  86.        
  87.         /****** CAN ×ÜÏßÖжϵÄÅäÖÃ******/
  88.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  89.         NVIC_InitStructure.NVIC_IRQChannel=USB_LP_CAN1_RX0_IRQn;
  90.         NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  91.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
  92.         NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
  93.         NVIC_Init(&NVIC_InitStructure);
  94.        
  95.   /****** CAN ×ÜÏßµÄÅäÖÃ******/
  96.         CAN_DeInit(CAN1);
  97.         CAN_StructInit(&CAN_InitStructure);
  98.        
  99.         CAN_InitStructure.CAN_TTCM=DISABLE;        //ʱ¼ä´¥·¢Í¨Ñ¶Ä£Ê½       
  100.         CAN_InitStructure.CAN_ABOM=DISABLE;        //×Ô¶¯ÀëÏß¹ÜÀíģʽ
  101.         CAN_InitStructure.CAN_AWUM=DISABLE;        //×Ô¶¯»½ÐÑģʽ
  102.         CAN_InitStructure.CAN_NART=DISABLE;        //·Ç×Ô¶¯ÖØ´«Ä£Ê½
  103.         CAN_InitStructure.CAN_RFLM=DISABLE;        //½ÓÊÕFIFOËø¶¨Ä£Ê½
  104.         CAN_InitStructure.CAN_TXFP=DISABLE;        //·¢ËÍFIFOÓÅÏȼ¶
  105.        
  106.         CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack;        //»·»ØÄ£Ê½£¬×Ô¶¯ÊÕ·¢
  107.         CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;        //ͬ²½ÌøÔ¾1¸öʱ¼äµ¥Ôª
  108.         CAN_InitStructure.CAN_BS1=CAN_BS1_6tq;        //ʱ¼ä¶Î1Ϊ6¸öʱ¼äµ¥Ôª
  109.         CAN_InitStructure.CAN_BS2=CAN_BS2_3tq;        //ʱ¼ä¶Î2Ϊ3¸öʱ¼äµ¥Ôª
  110.         CAN_InitStructure.CAN_Prescaler=4;        //·ÖƵֵ
  111.         CAN_Init(CAN1,&CAN_InitStructure);
  112.        
  113.         /****** CAN ×ÜÏß¹ýÂËÆ÷µÄÅäÖÃ******/
  114.         CAN_FilterInitStructure.CAN_FilterNumber=0;        //Ö¸¶¨³õʼ»¯µÄ¹ýÂËÆ÷±àºÅΪ0 (0-13)
  115.         CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;        //±êʶ·ûÆÁ±ÎΪģʽ
  116.         CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;        //1¸ö32λµÄ¹ýÂËÆ÷
  117.         CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;        //É趨¹ýÂËÆ÷µÄ±êʶ·û(32λΪÆä¸ß¶Î£¬16λΪµÚÒ»¸ö)·¶Î§ÊÇ0x0000-0xffff
  118.         CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;        //É趨¹ýÂËÆ÷µÄ±êʶ·û(32λΪÆäµÍ¶Î£¬16λΪµÚ¶þ¸ö)·¶Î§ÊÇ0x0000-0xffff
  119.         CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;        //É趨¹ýÂËÆ÷ÆÁ±Î±êʶ·û»òÕß¹ýÂ˱êʶ·û
  120.         CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;        //É趨¹ýÂËÆ÷ÆÁ±Î±êʶ·û»òÕß¹ýÂ˱êʶ·û
  121.         CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FilterFIFO0;        //¹ýÂËÆ÷FIFOÖ¸Ïò¹ýÂËÆ÷0
  122.         CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;        //ʹÄܹýÂËÆ÷
  123.         CAN_FilterInit(&CAN_FilterInitStructure);
  124.         CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);
  125.        
  126.         /****** CAN ×ÜÏß·¢Ë͵ÄÅäÖÃ******/
  127.         TxMessage.StdId=0x11;        //±ê×¼±êʶ·û
  128.         TxMessage.IDE=CAN_Id_Standard;        //ʹÓñê×¼±êʶ·û
  129.         TxMessage.RTR=CAN_RTR_Data;        //Êý¾ÝÖ¡
  130.         TxMessage.DLC=2;        //´«ÊäÏûÏ¢µÄÖ¡³¤¶ÈΪ2
  131.         TxMessage.Data[0]=0xAB;        //Êý¾Ý1
  132.         TxMessage.Data[1]=0xCD;        //Êý¾Ý2
  133.         CAN_Transmit(CAN1,&TxMessage);
  134.         TransmitMailbox=CAN_Transmit(CAN1,&TxMessage);
  135.        
  136.         i=0;
  137.         while(((CAN_TransmitStatus(CAN1,TransmitMailbox))!=CANTXOK)&&(i!=0xff))
  138.         {
  139.                 i++;
  140.         }
  141.         i=0;
  142.         while((CAN_MessagePending(CAN1,CAN_FIFO0)<1)&&(i!=0xff))
  143.         {
  144.                 i++;
  145.         }

  146.         /****** CAN ×ÜÏß½ÓÊÕµÄÅäÖÃ******/
  147.         RxMessage.StdId=0;
  148.         RxMessage.IDE=CAN_Id_Standard;
  149.         RxMessage.DLC=2;
  150.         RxMessage.Data[0]=0x00;
  151.         RxMessage.Data[1]=0x00;
  152.         CAN_Receive(CAN1,CAN_FIFO0,&RxMessage);
  153.         if((RxMessage.StdId!=0x11)&&(RxMessage.IDE!=CAN_Id_Standard)&&(RxMessage.DLC!=2)&&((RxMessage.Data[0]<<8|RxMessage.Data[1])!=0xABCD))
  154.         {
  155.                 return FAIL;       
  156.         }
  157.         else
  158.         {
  159.                 return PASS;
  160.         }
  161. }
huangcunxiake 发表于 2016-4-7 17:14 | 显示全部楼层
没看到打开这个端口的指令。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

143

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部