打印
[AT32F407]

AT32F407VGT7的CAN2是不是有问题啊?不发送也有波形

[复制链接]
5171|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
CAN2初始化后发送一次数据,用示波器测量始终有波行输出,频率有规则40K,驱动是按官方CAN1的改的,调试多次未解决,怀疑是否芯片问题。

使用特权

评论回复
沙发
fuquan19801117|  楼主 | 2021-7-9 08:33 | 只看该作者
示波器测量图片

webwxgetmsgimg.jpg (88.89 KB )

webwxgetmsgimg.jpg

使用特权

评论回复
板凳
fuquan19801117|  楼主 | 2021-7-9 08:34 | 只看该作者
        GPIO_InitType GPIO_InitStructure;
       
        GPIO_InitStructure.GPIO_Pins = GPIO_Pins_13;
        GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;       
        GPIO_Init(GPIOB, &GPIO_InitStructure);       

        GPIO_InitStructure.GPIO_Pins = GPIO_Pins_12;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_PU;       
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        //
        RCC_APB1PeriphClockCmd(RCC_APB1PERIPH_CAN2, ENABLE);
引脚配置

使用特权

评论回复
地板
fuquan19801117|  楼主 | 2021-7-9 08:35 | 只看该作者
        CAN_InitType  CAN_InitStructure;
        CAN_FilterInitType          CAN_FilterInitStructure = {0};       
       
        CAN_InitStructure.CAN_TTC = DISABLE;                       
        CAN_InitStructure.CAN_ABO = ENABLE;                       
        CAN_InitStructure.CAN_AWU = ENABLE;                       
        CAN_InitStructure.CAN_NART = DISABLE;                       
        CAN_InitStructure.CAN_RFL = DISABLE;                        
        CAN_InitStructure.CAN_TFP = DISABLE;                       
        CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
        CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;       

        switch (bulv)
  {
          case 1000:
                {
                                CAN_InitStructure.CAN_BS1 = CAN_BS1_8tq;
                                CAN_InitStructure.CAN_BS2 = CAN_BS2_3tq;
                                CAN_InitStructure.CAN_Prescaler = 10;
                }
                  break;
                case 800:
                {
                                CAN_InitStructure.CAN_BS1 = CAN_BS1_10tq;
                                CAN_InitStructure.CAN_BS2 = CAN_BS2_2tq;
                                CAN_InitStructure.CAN_Prescaler = 10;       
                }
                  break;
          case 500:
                {
                                CAN_InitStructure.CAN_BS1 = CAN_BS1_2tq;
                                CAN_InitStructure.CAN_BS2 = CAN_BS2_1tq;
                                CAN_InitStructure.CAN_Prescaler = 60;                       
                }
                  break;
          case 250:
                {
                                CAN_InitStructure.CAN_BS1 = CAN_BS1_8tq;
                                CAN_InitStructure.CAN_BS2 = CAN_BS2_3tq;
                                CAN_InitStructure.CAN_Prescaler = 40;                       
                }
                  break;               
                case 100:
                {
                                CAN_InitStructure.CAN_BS1 = CAN_BS1_14tq;
                                CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq;
                                CAN_InitStructure.CAN_Prescaler = 60;               
                }
                  break;
                case 50:
                {
                                CAN_InitStructure.CAN_BS1 = CAN_BS1_14tq;
                                CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq;
                                CAN_InitStructure.CAN_Prescaler = 120;               
                }
                  break;               
                case 20:
                {
                                CAN_InitStructure.CAN_BS1 = CAN_BS1_14tq;
                                CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq;
                                CAN_InitStructure.CAN_Prescaler = 300;                       
                }
                  break;                       
          default:
                {
                                CAN_InitStructure.CAN_BS1 = CAN_BS1_8tq;
                                CAN_InitStructure.CAN_BS2 = CAN_BS2_3tq;
                                CAN_InitStructure.CAN_Prescaler =10;       
                }                       
                  break;
  }

        CAN_Init(CAN2, &CAN_InitStructure);       ///<SYSCLK=240M,  APB1CLK=120M, CAN Baudrate=(240/2)*1000K)/((1+9)*(3+7+2)) = 1000K
   
  CAN_FilterInitStructure.CAN_FilterNumber=0;       
        CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;        
        CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;        
        CAN_FilterInitStructure.CAN_FilterIdHigh=0x0;       
        CAN_FilterInitStructure.CAN_FilterIdLow=0x0;
        CAN_FilterInitStructure.CAN_FilterMskIdHigh=0x0;
        CAN_FilterInitStructure.CAN_FilterMskIdLow=0x0;
        CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;
        CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
        CAN_FilterInit(CAN2, &CAN_FilterInitStructure);
       
  CAN_INTConfig(CAN2,CAN_INT_RFP0,ENABLE);
CAN配置

使用特权

评论回复
5
fuquan19801117|  楼主 | 2021-7-9 08:35 | 只看该作者
        NVIC_InitType  NVIC_InitStructure = {0};
       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
        NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX0_IRQn ;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x10;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
CAN2中断配置

使用特权

评论回复
6
林堪堪| | 2021-7-9 09:30 | 只看该作者

CAN没输出但是pin有输出的话,首先排除一下这个pin上其他功能有没有开起来。你这边PB12/PB13的话可能是TMR1或SPI2。你可以看看数据手册的引脚定义这一节,看看有没有别的功能开启。

使用特权

评论回复
7
fuquan19801117|  楼主 | 2021-7-9 09:59 | 只看该作者
问题找到了,借鉴了STM32的,查到的

使用特权

评论回复
评论
木吉铁平 2022-8-28 20:28 回复TA
什么原因呢,是使用CAN2要开CAN1的时钟吗? 
8
zhengshuai888| | 2021-7-10 13:58 | 只看该作者
是什么原因呢?

使用特权

评论回复
9
084425| | 2021-7-10 14:18 | 只看该作者
没接负载的话自动重传开着没ACK,就会一直重发

使用特权

评论回复
10
Henryko| | 2022-9-7 21:39 | 只看该作者
楼主,是因为什么原因啊?

使用特权

评论回复
11
Undshing| | 2022-10-5 21:04 | 只看该作者
楼主原因是啥啊?

使用特权

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

本版积分规则

14

主题

70

帖子

1

粉丝