求分析CAN发送在LOOPBACK下可以,NORMAL模式无输出

[复制链接]
6018|3
 楼主| lisn1234 发表于 2013-7-11 13:24 | 显示全部楼层 |阅读模式
用STM32F407的CAN1口进行发送,CAN的收发器用SN65HVD230,原理图如下。电脑端用PCI-1680U这个型号的CAN卡接收。
can.png
我开始用LOOPBACK模式,中断接收并用串口打印出来,打印的数值和CAN卡接收到的数值一致(这时候CAN卡能收到)
示波器接407的CanTx端看到的图像如下图:
TEK00000.JPG

但是问题就是,我把loopback改成normal之后,can卡收不到数据,示波器接407的CanTx端一直是3.3v,附上代码,求大神帮忙分析一下啊~
可以排除的问题:总线电阻测了是60欧。can卡可以算作一个总线上的节点,因为用别的板子可以直接和他收发。
  1. void rt_hw_can_init(void)
  2. {
  3.         NVIC_InitTypeDef                                NVIC_InitStructure;
  4.         GPIO_InitTypeDef                                GPIO_InitStructure;
  5.         CAN_InitTypeDef                                        CAN_InitStructure;
  6.         CAN_FilterInitTypeDef                CAN_FilterInitStructure;

  7.         /* CAN Periph clock enable */
  8.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOF  ,ENABLE);
  9.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);

  10.         GPIO_PinAFConfig (GPIOB,GPIO_PinSource8|GPIO_PinSource9,GPIO_AF_CAN1);
  11.         /* Configure CAN pin: RX & TX*/
  12.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;       
  13.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  14.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  15.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  16.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
  17.         GPIO_Init(GPIOB, &GPIO_InitStructure);   
  18.         /* CAN register init */
  19.         CAN_DeInit(CAN1);
  20.         CAN_StructInit(&CAN_InitStructure);

  21.   /* CAN cell init */
  22.         CAN_InitStructure.CAN_TTCM = DISABLE;
  23.         CAN_InitStructure.CAN_ABOM = DISABLE;
  24.         CAN_InitStructure.CAN_AWUM = DISABLE;
  25.         CAN_InitStructure.CAN_NART = DISABLE;
  26.         CAN_InitStructure.CAN_RFLM = DISABLE;
  27.         CAN_InitStructure.CAN_TXFP = DISABLE;
  28. //         CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
  29.         CAN_InitStructure.CAN_Mode = CAN_Mode_LoopBack;
  30.         /* CAN Baudrate = 1 MBps (CAN clocked at 32 MHz) */
  31.         CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
  32.         CAN_InitStructure.CAN_BS1 = CAN_BS1_5tq;//CAN_BS1_6tq;
  33.         CAN_InitStructure.CAN_BS2 = CAN_BS2_2tq;//CAN_BS2_5tq;
  34.         CAN_InitStructure.CAN_Prescaler = 4;//3;

  35.         /*Initializes the CAN1 */
  36.         CAN_Init(CAN1, &CAN_InitStructure);

  37.         CAN_FilterInitStructure.CAN_FilterNumber=0;
  38.         CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
  39.         CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
  40.         CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;
  41.         CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
  42.         CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;
  43.         CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
  44.         CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;
  45.         CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
  46.         CAN_ITConfig(CAN1,CAN_IT_FMP0, ENABLE);
  47.         CAN_FilterInit(&CAN_FilterInitStructure);
  48.        
  49.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  50.         /* Enable CAN1 RX0 interrupt IRQ channel */
  51.         NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
  52.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  53.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  54.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  55.         NVIC_Init(&NVIC_InitStructure);
  56.         /* IT Configuration for CAN1 */  
  57.         CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
  58.        
  59.         rt_kprintf("CAN thread is started!!! Speed is 1MHz!!! \r\n");
  60. }


hxuetao1989 发表于 2013-7-11 14:46 | 显示全部楼层
搭车求指导~~~
 楼主| lisn1234 发表于 2013-7-11 15:32 | 显示全部楼层
在大神指导下解决了,问题是TX、RX脚不能在一起配置,分开配置就行了,像下面这样
  1. GPIO_PinAFConfig (GPIOB,GPIO_PinSource8,GPIO_AF_CAN1);
  2.         GPIO_PinAFConfig (GPIOB,GPIO_PinSource9,GPIO_AF_CAN1);
  3.         /* Configure CAN pin: RX */
  4.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;//| GPIO_Pin_9;
  5.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  6.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  7.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  8.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
  9.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  10.         /* Configure CAN pin: TX */
  11.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  12.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  13.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  14.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  15.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
  16.         GPIO_Init(GPIOB, &GPIO_InitStructure);
gang544043963 发表于 2013-11-27 21:46 | 显示全部楼层
:handshake
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

26

帖子

1

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