打印
[N32G430]

CAN相关问题

[复制链接]
781|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
春风知意|  楼主 | 2023-11-20 11:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
配置如下:

/**
*\*\name   CAN_CONFIG
*\*\fun    CAN configure.
*\*\param  none
*\*\return none
**/
void CAN_CONFIG(void)
{
    RCC_APB1_Peripheral_Clock_Enable(RCC_APB1_PERIPH_CAN);

    /* Initializes CAN*/
    CAN_NVIC_Configuration();
    CAN_GPIO_Configuration();

    CAN_Reset(CAN);
    CAN_Structure_Initializes(&CAN_InitStructure);
    /* CAN cell init */
    CAN_InitStructure.TTCM          = DISABLE;
    CAN_InitStructure.ABOM          = DISABLE;
    CAN_InitStructure.AWKUM         = DISABLE;
    CAN_InitStructure.NART          = DISABLE;
    CAN_InitStructure.RFLM          = DISABLE;
    CAN_InitStructure.TXFP          = ENABLE;
    CAN_InitStructure.OperatingMode = CAN_NORMAL_MODE;
    /* Baud rate calculation = CAN clock/(BaudRatePrescaler*(TBS1+TBS2+1)) */
    CAN_InitStructure.RSJW          = CAN_RSJW_1TQ;
    CAN_InitStructure.TBS1          = CAN_TBS1_8TQ;
    CAN_InitStructure.TBS2          = CAN_TBS2_7TQ;   
    CAN_InitStructure.BaudRatePrescaler = 4;

    /*Initializes the CAN */
    CAN_Initializes(CAN, &CAN_InitStructure);


    /* CAN filter init */
    CAN_FilterInitStructure.Filter_Num            = 0;
    CAN_FilterInitStructure.Filter_Mode           = CAN_FILTER_IDLISTMODE;
    CAN_FilterInitStructure.Filter_Scale          = CAN_FILTER_32BITSCALE;
    CAN_FilterInitStructure.Filter_HighId         = CAN_STD_ID_LIST_32BIT_H(0x00000400);
    CAN_FilterInitStructure.Filter_LowId          = CAN_STD_ID_LIST_32BIT_L(0x00000400);
    CAN_FilterInitStructure.FilterMask_HighId     = CAN_STD_ID_LIST_32BIT_H(0x00000200);
    CAN_FilterInitStructure.FilterMask_LowId      = CAN_STD_ID_LIST_32BIT_L(0x00000200);
    CAN_FilterInitStructure.Filter_FIFOAssignment = CAN_FIFO0;
    CAN_FilterInitStructure.Filter_Act            = ENABLE;
    CAN_Filter_Initializes(&CAN_FilterInitStructure);
    /* IT Configuration for CAN */  
    CAN_Config_Interrupt_Enable(CAN, CAN_INT_FMP0);
}


/**
*\*\name   CAN_NVIC_Configuration
*\*\fun    CAN NVIC configure.
*\*\param  none
*\*\return none
**/
void CAN_NVIC_Configuration(void)
{
    NVIC_InitType NVIC_InitStructure;

    /* NVIC priority group set */
    NVIC_Priority_Group_Set(NVIC_PER2_SUB2_PRIORITYGROUP);

    /* NVIC configure */
    NVIC_InitStructure.NVIC_IRQChannel                   = CAN_RX0_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 0x1;
    NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
    NVIC_Initializes(&NVIC_InitStructure);
}


/**
*\*\name   CAN_GPIO_Configuration
*\*\fun    CAN GPIO configure.
*\*\param  none
*\*\return none
**/
void CAN_GPIO_Configuration(void)
{
   GPIO_InitType GPIO_InitStructure;

   /* Initializes the GPIO */
   GPIO_Structure_Initialize(&GPIO_InitStructure);

   /* configure CAN pin */
   RCC_AHB_Peripheral_Clock_Enable(RCC_AHB_PERIPH_GPIOB);
   RCC_APB2_Peripheral_Clock_Enable(RCC_APB2_PERIPH_AFIO);

   GPIO_InitStructure.Pin            = GPIO_PIN_6;
   GPIO_InitStructure.GPIO_Mode      = GPIO_MODE_AF_PP;
   GPIO_InitStructure.GPIO_Alternate = GPIO_AF11_CAN;
   GPIO_Peripheral_Initialize(GPIOB, &GPIO_InitStructure);

   GPIO_InitStructure.Pin             = GPIO_PIN_7;
   GPIO_InitStructure.GPIO_Alternate  = GPIO_AF11_CAN;
   GPIO_Peripheral_Initialize(GPIOB, &GPIO_InitStructure);
} 用的都是官方例程,只是把引脚修改了下,没办法通信,麻烦帮忙看下,谢谢。

使用特权

评论回复
沙发
春风知意|  楼主 | 2023-11-20 11:24 | 只看该作者
修改成回环可以测到tx,rx波形,正常模式波形都没办法测到。

使用特权

评论回复
板凳
flyfish79| | 2023-11-20 12:05 | 只看该作者
收发器有没有接。没有收发器的话,RX要接高电平才能检测到空闲,初始化工作。

使用特权

评论回复
评论
春风知意 2023-11-20 13:16 回复TA
找到问题,收发器芯片出问题导致的,谢谢回答 
地板
长的帅怪我落| | 2023-11-20 22:30 | 只看该作者
这个单片机不知道,但是之前GD32的IO管脚有个重映射什么的需要设置,就是复用那里看一下手册

使用特权

评论回复
5
skg65874200| | 2023-11-21 11:13 | 只看该作者
提供技术支持:V:18151082510

使用特权

评论回复
6
储小勇_526| | 2023-11-21 11:22 | 只看该作者
最近也一直在搞CAN,不过还好有cubeMX和CANOpen协议栈,轻松许多,不过移植的时候别人给的代码被封装成lib,在他基础上只能手动添加代码,最后遇到的问题时中断HAL库没初始化,头疼。

使用特权

评论回复
7
可口可口| | 2023-11-22 20:41 | 只看该作者
本帖最后由 可口可口 于 2023-11-22 20:45 编辑

这个N32有点不一样,有些复用接口又不需要开启复用时钟,有些要开启,这个can在官方例程中就开启了,而在usart上又没有开启,用户手册上也没找到关于复用时钟的具体说明。看楼主的代码是没有开启复用时钟。(补,看到帖子最后发现也开启了复用时钟)

使用特权

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

本版积分规则

11

主题

41

帖子

0

粉丝