打印

GD32E503的can1无法进入接收中断,有无大神知道什么原因?

[复制链接]
1814|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

/* CAN1 interface */
can_trasnmit_message_struct can1_transmit_message;       //can0 rx message
can_receive_message_struct can1_receive_message;       //can0 rx message
uint8_t can1_receive_flag = 0;

static void bsp_can1_gpio_config(void)
{
    /* enable CAN1 clock */
    rcu_periph_clock_enable(RCU_CAN1);
    rcu_periph_clock_enable(RCU_GPIOB);
    rcu_periph_clock_enable(RCU_GPIOC);
    rcu_periph_clock_enable(RCU_AF);

    /* configure CAN1 GPIO */
    gpio_init(GPIOB, GPIO_MODE_IPU,GPIO_OSPEED_50MHZ, GPIO_PIN_12);
    gpio_init(GPIOB, GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ, GPIO_PIN_13);

    gpio_init(GPIOC, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);
    gpio_bit_write(GPIOC, GPIO_PIN_15, RESET);

//    gpio_pin_remap_config(GPIO_CAN1_REMAP,ENABLE);

}


/*!
    \brief      initialize can1 interface
    \param[in]  none
    \param[out] none
    \retval     none
*/
void bsp_can1_init(void)
{

    can_parameter_struct can_parameter;
    can_filter_parameter_struct can_filter;

    bsp_can1_gpio_config();

    can_struct_para_init(CAN_INIT_STRUCT, &can_parameter);
    /* initialize CAN register */
    can_deinit(CAN1);

    /* initialize CAN parameters */
    can_parameter.time_triggered = DISABLE;
    can_parameter.auto_bus_off_recovery = DISABLE;
    can_parameter.auto_wake_up = DISABLE;
    can_parameter.auto_retrans = DISABLE;
    can_parameter.rec_fifo_overwrite = DISABLE;
    can_parameter.trans_fifo_order = DISABLE;
    can_parameter.working_mode = CAN_NORMAL_MODE;
    /* configure CAN0 baud rate 1Mbps */
    can_parameter.resync_jump_width = CAN_BT_SJW_1TQ;
    can_parameter.time_segment_1 = CAN_BT_BS1_7TQ;
    can_parameter.time_segment_2 = CAN_BT_BS2_2TQ;
    can_parameter.prescaler = 18;
    /* initialize CAN */
    can_init(CAN1, &can_parameter);

    /* initialize filter */
    /* configure filter mode */
    can_filter.filter_mode = CAN_FILTERMODE_MASK;
    can_filter.filter_bits = CAN_FILTERBITS_32BIT;
    /* configure filter ID, only the 0xaabb expand ID can be received */
    can_filter.filter_list_high = (uint16_t)(0xAACC >> 13U);
    can_filter.filter_list_low = (uint16_t)(0xAACC << 3U);
    /* configure filter mask */
    can_filter.filter_mask_high = 0x0000;
    can_filter.filter_mask_low = 0x0000;
    /* select receiver fifo */
    can_filter.filter_fifo_number = CAN_FIFO0;
    can_filter.filter_number = 15;
    can_filter.filter_enable = ENABLE;
    can_filter_init(CAN1, &can_filter);

    /* configure CAN1 NVIC */
    nvic_irq_enable(CAN1_RX0_IRQn, 1, 0);
    /* enable can receive FIFO0 not empty interrupt */
    can_interrupt_enable(CAN1, CAN_INT_RFNE0);
}


void CAN1_RX0_IRQHandler(void)
{
    gpio_bit_set(GPIOC, GPIO_PIN_1);
    /* check the receive message */
    can_message_receive(CAN1, CAN_FIFO0, &can1_receive_message);
    can1_receive_flag = 1;
}

使用特权

评论回复
沙发
weifeng90| | 2023-4-14 08:13 | 只看该作者
是不是没有收到数据,仿真看一下,注意CAN的帧类型配置。

使用特权

评论回复
板凳
V853| | 2023-4-14 15:28 | 只看该作者
拿CAN抓包器抓一下,看看是不是没有发送出来。

使用特权

评论回复
地板
朝生| | 2023-4-14 15:29 | 只看该作者
能收到数据,进入不了接收中断?

使用特权

评论回复
5
芯路例程| | 2023-4-14 15:29 | 只看该作者
看代码初始化配置没有什么问题,感觉是硬件的问题。

使用特权

评论回复
6
Qi18226636631| | 2023-4-19 22:38 | 只看该作者
把CAN0的时钟打开,过滤器的配置寄存器都在CAN0上,不打开CAN0时钟,CAN1的过滤功能就无法用。

使用特权

评论回复
7
morthy| | 2023-4-20 14:40 | 只看该作者
can_filter_init(CAN1, &can_filter);
应该改成
can_filter_init(CAN0, &can_filter);
才对

QQ截图20230420143801.png (97.79 KB )

QQ截图20230420143801.png

使用特权

评论回复
8
elephant00| | 2024-8-16 16:02 | 只看该作者
时钟未开启

使用特权

评论回复
9
jcky001| | 2024-8-16 19:56 | 只看该作者
接收过滤器的配置不正确?

使用特权

评论回复
10
cr315| | 2024-8-16 21:02 | 只看该作者
如果CAN1的中断优先级设置得过低,而其他中断的优先级设置得较高,那么在高优先级中断处理期间,CAN1的中断可能会被延迟或忽略。

使用特权

评论回复
11
七毛钱| | 2024-8-16 21:49 | 只看该作者
可能由硬件故障或固件bug引起

使用特权

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

本版积分规则

5

主题

9

帖子

0

粉丝