打印

gd32c103 can收发一段时间出现异常,请教如何解决?

[复制链接]
4216|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ltfy|  楼主 | 2022-11-1 09:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
gd32c103 can使用,单总线上有其他节点,其他节点会间隔发数据,发现C103只接收没问题,但是一发数据,过后就会出现异常(离线、总线错误什么的),收不到其他节点的数据了,除非使能了离线自动恢复会自己恢复,想请教一下这个是什么问题,如何解决,还是我配置不对,懂的大佬帮忙看看,配置如下:void CAN0_Init(void)
{
  /* enable CAN clock */
    rcu_periph_clock_enable(RCU_CAN0);
    rcu_periph_clock_enable(RCU_GPIOB);
    rcu_periph_clock_enable(RCU_AF);

    /* configure CAN1 GPIO */
    gpio_init(GPIOB,GPIO_MODE_IPU,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_PARTIAL_REMAP, ENABLE);  
           
   can0_networking_init();
  /* configure CAN0 NVIC */
    nvic_irq_enable(CAN0_RX0_IRQn, 0, 2);
  /* enable CAN receive FIFO0 not empty interrupt */
    can_interrupt_enable(CAN0, CAN_INT_RFNE0);
}

void can0_networking_init(void)
{       
    can_parameter_struct can_parameter;
    can_struct_para_init(CAN_INIT_STRUCT, &can_parameter);
    /* initialize CAN register */
    can_deinit(CAN0);

    /* initialize CAN */
    can_parameter.time_triggered = DISABLE;  //时间触发通信模式
    can_parameter.auto_bus_off_recovery = DISABLE ; //离线自动恢复   
    can_parameter.auto_wake_up = DISABLE; //自动唤醒
    can_parameter.auto_retrans = ENABLE;  //自动重发
    can_parameter.rec_fifo_overwrite = ENABLE; //接收FIFO满时覆盖  
    can_parameter.trans_fifo_order = ENABLE;  //发送FIFO顺序
    can_parameter.working_mode = CAN_NORMAL_MODE;
//    can_parameter.resync_jump_width = CAN_BT_SJW_1TQ;
//    can_parameter.time_segment_1 = CAN_BT_BS1_6TQ;
//    can_parameter.time_segment_2 = CAN_BT_BS2_3TQ;
    can_init(CAN0, &can_parameter);

    /* config CAN0 baud rate */
    can_frequency_set(CAN0, 250000);
    can_filter_mask_mode_init(DEV_CAN0_ID, DEV_CAN0_MASK, CAN_EXTENDED_FIFO0, 0);                       
}

使用特权

评论回复
沙发
linkunzhen| | 2022-11-1 11:47 | 只看该作者
手上有GD32C103    有没有需求的。

使用特权

评论回复
板凳
Pretext| | 2022-11-1 18:20 | 只看该作者
应该就是离线了吧。知道解决方案就好了呀!

使用特权

评论回复
地板
ltfy|  楼主 | 2022-11-2 10:05 | 只看该作者
Pretext 发表于 2022-11-1 18:20
应该就是离线了吧。知道解决方案就好了呀!

虽然可以使用离线自动恢复功能恢复,但我觉得应该是有问题,在高速通信、其他节点在不停发数据就会有问题。

使用特权

评论回复
5
ltfy|  楼主 | 2022-11-2 10:05 | 只看该作者
linkunzhen 发表于 2022-11-1 11:47
手上有GD32C103    有没有需求的。

专业的不,帮我看看问题呗

使用特权

评论回复
6
Pretext| | 2022-11-6 10:50 | 只看该作者
ltfy 发表于 2022-11-2 10:05
虽然可以使用离线自动恢复功能恢复,但我觉得应该是有问题,在高速通信、其他节点在不停发数据就会有问题 ...

其他节点发数据,如果不停的话,你的节点就没法发送数据吧。

使用特权

评论回复
7
ltfy|  楼主 | 2022-11-8 15:27 | 只看该作者
Pretext 发表于 2022-11-6 10:50
其他节点发数据,如果不停的话,你的节点就没法发送数据吧。

停了也没发出去,貌似它自己离线了? 不是有仲裁机制么 怎么还把自己搞崩了

使用特权

评论回复
8
zzccww| | 2022-11-8 15:54 | 只看该作者
GD32c103没用过。用过GD32F303的CAN。303没有这句:gpio_pin_remap_config()。要不你去掉试试。

使用特权

评论回复
9
ltfy|  楼主 | 2022-11-8 16:08 | 只看该作者
zzccww 发表于 2022-11-8 15:54
GD32c103没用过。用过GD32F303的CAN。303没有这句:gpio_pin_remap_config()。要不你去掉试试。 ...

CAN0默认不是PB8、9,所以需要重映射

使用特权

评论回复
10
jf101| | 2022-11-23 13:12 | 只看该作者
ltfy 发表于 2022-11-2 10:05
虽然可以使用离线自动恢复功能恢复,但我觉得应该是有问题,在高速通信、其他节点在不停发数据就会有问题 ...

应该跟芯片首发速率有关系,你可以速率调低试一下

使用特权

评论回复
11
OKAKAKO| | 2022-11-24 21:30 | 只看该作者
我遇到过一个老的CAN转换模块一直收数据速率还挺快,大概10分钟CAN转换模块自己就速度慢了,我当时分析跟传输速率有关系,而且低端MCU中CAN不能一直高速接收转发,当然可能跟转换模块本身硬件有关系

使用特权

评论回复
12
Pretext| | 2022-12-4 11:54 | 只看该作者
ltfy 发表于 2022-11-8 15:27
停了也没发出去,貌似它自己离线了? 不是有仲裁机制么 怎么还把自己搞崩了 ...

就是突然间不收数据了呗,你看看能不能调试。

使用特权

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

本版积分规则

1

主题

7

帖子

0

粉丝