打印

GD32F105RB CAN1 CAN2 为什么接收不进中断

[复制链接]
13417|45
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
代码如下
void can_config(can_parameter_struct can_parameter, can_filter_parameter_struct can_filter)
{
    /* initialize CAN register */
    can_deinit(CAN0);
    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;
    can_parameter.resync_jump_width = CAN_BT_SJW_1TQ;
    can_parameter.time_segment_1 = CAN_BT_BS1_5TQ;
    can_parameter.time_segment_2 = CAN_BT_BS2_3TQ;
   
    /* 1MBps */
#if CAN_BAUDRATE == 1000
    can_parameter.prescaler = 6;
    /* 500KBps */
#elif CAN_BAUDRATE == 500
    can_parameter.prescaler = 12;
    /* 250KBps */
#elif CAN_BAUDRATE == 250
    can_parameter.prescaler = 24;
    /* 125KBps */
#elif CAN_BAUDRATE == 125
    can_parameter.prescaler = 48;
    /* 100KBps */
#elif  CAN_BAUDRATE == 100
    can_parameter.prescaler = 60;
    /* 50KBps */
#elif  CAN_BAUDRATE == 50
    can_parameter.prescaler = 120;
    /* 20KBps */
#elif  CAN_BAUDRATE == 20
    can_parameter.prescaler = 300;
#else
    #error "please select list can baudrate in private defines in main.c "
#endif  
    /* initialize CAN */
    can_init(CAN0, &can_parameter);
    can_init(CAN1, &can_parameter);
   
    /* initialize filter */
    can_filter.filter_number=0;
    can_filter.filter_mode = CAN_FILTERMODE_MASK;
    can_filter.filter_bits = CAN_FILTERBITS_32BIT;
    can_filter.filter_list_high = 0;
    can_filter.filter_list_low = 0x0000;
    can_filter.filter_mask_high = 0;
    can_filter.filter_mask_low = 0x0000;
    can_filter.filter_fifo_number = CAN_FIFO0;
    can_filter.filter_enable = ENABLE;
   
    can_filter_init(&can_filter);
   

}


void nvic_config(void)
{
    /* configure CAN0 NVIC */
    nvic_irq_enable(CAN0_RX0_IRQn,0,0);

    /* configure CAN1 NVIC */
    nvic_irq_enable(CAN1_RX0_IRQn,1,1);
}


void can_gpio_config(void)
{
    /* enable CAN clock */
    rcu_periph_clock_enable(RCU_CAN0);
    rcu_periph_clock_enable(RCU_CAN1);
    rcu_periph_clock_enable(RCU_GPIOB);
    rcu_periph_clock_enable(RCU_AF);
   
    /* configure CAN0 GPIO */
    gpio_init(GPIOB,GPIO_MODE_IN_FLOATING,GPIO_OSPEED_50MHZ,GPIO_PIN_8);
    gpio_init(GPIOB,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_9);
    gpio_pin_remap_config(GPIO_CAN0_FULL_REMAP,ENABLE);
   
    /* configure CAN1 GPIO */
  //  gpio_init(GPIOB,GPIO_MODE_IN_FLOATING,GPIO_OSPEED_50MHZ,GPIO_PIN_5);
  //  gpio_init(GPIOB,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_6);
  //  gpio_pin_remap_config(GPIO_CAN1_REMAP,ENABLE);
}


void  can_init(void)
{
  can_gpio_config();
    /* configure NVIC */
    nvic_config();
   

    printf("\r\nGD32F10x dual CAN test, please press Wakeup key or Tamper key to start communication!\r\n");

   
    /* initialize CAN and filter */
    can_config(can_init_parameter, can_filter_parameter);
    /* enable can receive FIFO0 not empty interrupt */
    can_interrupt_enable(CAN0, CAN_INT_RFNE0);
    can_interrupt_enable(CAN1, CAN_INT_RFNE0);

}


不进中断void CAN0_RX0_IRQHandler(void) void CAN1_RX0_IRQHandler(void)为什么呢? 请大神指点,特急  谢谢

(SRBQ`)I$_U6~(9%(6XI$A0.png (140.63 KB )

(SRBQ`)I$_U6~(9%(6XI$A0.png

{CPBX3XOWDH6AD30R)[B@9O.png (269.69 KB )

{CPBX3XOWDH6AD30R)[B@9O.png
沙发
yingxg518|  楼主 | 2018-3-3 21:35 | 只看该作者
人呢?

使用特权

评论回复
板凳
lvben5d| | 2018-3-9 12:35 | 只看该作者
楼主,留QQ, 让兄弟我把实际运行测试OK的代码和工程发给你COPY。

使用特权

评论回复
地板
yingxg518|  楼主 | 2018-3-10 17:15 | 只看该作者
lvben5d 发表于 2018-3-9 12:35
楼主,留QQ, 让兄弟我把实际运行测试OK的代码和工程发给你COPY。

非常感谢,不过已经搞好了

使用特权

评论回复
5
angerbird| | 2018-3-17 13:22 | 只看该作者
这个代码的分享还是蛮不错的

使用特权

评论回复
6
smilingangel| | 2018-3-18 20:59 | 只看该作者
这种if ...elseif...的设计嵌套是不是太深了?

使用特权

评论回复
7
chuntian2016| | 2018-3-21 21:15 | 只看该作者
这个没看出啥问题的啊,怎就进不了中断的呢?

使用特权

评论回复
8
tongbu2015| | 2018-3-22 20:32 | 只看该作者
这是CAN总线的配置设计的

使用特权

评论回复
9
tongbu2015| | 2018-3-22 20:33 | 只看该作者
我参考的了,这些代码的主要是针对相关寄存器的进行设计。

使用特权

评论回复
10
shenmu2012| | 2018-3-22 22:09 | 只看该作者
这个程序代码的也没看出啥问题的啊

使用特权

评论回复
11
zhangbo1985| | 2018-3-22 23:13 | 只看该作者
CAN总线设计这一块的我还是盲区的,不过只要去深入了解的,怎会能熟悉的

使用特权

评论回复
12
miao5061| | 2018-5-30 17:30 | 只看该作者
yingxg518 发表于 2018-3-10 17:15
非常感谢,不过已经搞好了

老哥,什么问题?我现在也进不去中断。

使用特权

评论回复
13
伊森亨特| | 2018-6-21 11:09 | 只看该作者
楼主弄好了吗?我这页不进中断了,之前还好好的

使用特权

评论回复
14
李科| | 2018-9-11 23:35 | 只看该作者
miao5061 发表于 2018-5-30 17:30
老哥,什么问题?我现在也进不去中断。

大哥,什么问题?怎么解决的接收进中断

使用特权

评论回复
15
李科| | 2018-9-12 15:58 | 只看该作者
大神,您最后怎么解决的,谢谢帮助哦

使用特权

评论回复
16
李科| | 2018-9-12 15:59 | 只看该作者
伊森亨特 发表于 2018-6-21 11:09
楼主弄好了吗?我这页不进中断了,之前还好好的

您怎么解决的呢?不进接收函数

使用特权

评论回复
17
2233453742| | 2018-11-29 19:55 | 只看该作者
兄弟,我也遇到了同样的问题。请问您是怎么解决的呀?

使用特权

评论回复
18
lvben5d| | 2018-11-30 19:17 | 只看该作者
首先你有个CAN分析仪,确保发送方的包是出现在总线的,然后核对波特率以及是否是被滤掉的包。 去GD库 找CAN EXAMPLE, COPY代码 写入你的工程。  还不行,加我Q,我这边有GD105实战 运行好的CAN0 CAN1代码。

使用特权

评论回复
评论
小白菜666 2021-5-26 14:48 回复TA
老铁,这个能不能也给我一份2211087621@qq.com 
19
shenmu2012| | 2018-11-30 22:00 | 只看该作者
这个先看下硬件设计上的问题的

使用特权

评论回复
20
only_sale| | 2019-6-10 17:29 | 只看该作者
这个帖子就这样结束了,我也有同样的问题,使用gd32f103rct6,也是PB8和PB9作为can的引脚,现在can能发出数据,就是不能收到数据,也不能进中断函数CAN0_RX0_IRQHandler,有人能提供点帮助吗?

使用特权

评论回复
评论
我相信童话了333 2021-11-12 15:25 回复TA
解决了吗 我也遇到这个问题 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

1

粉丝