打印

GD32F103CBT6 CAN回环模式正常,正常模式不行

[复制链接]
2580|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liuqianlin5|  楼主 | 2023-11-7 23:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
搞了个GD32的开发板,用了例程测试一下CAN通讯,发现了 在回环模式下可以进入CAN的接收中断,可以看到接收到的数据,但是改成正常模式后,使用CAN分析仪就完全看不到内容,下面是代码
void Can0_init( void )
{
        rcu_periph_clock_enable(RCU_CAN0);
                                rcu_periph_clock_enable(RCU_GPIOA);
                                rcu_periph_clock_enable(RCU_AF);   //重映射时钟
//              gpio_pin_remap_config(GPIO_CAN_FULL_REMAP,ENABLE);
       
       
              gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_12);
        gpio_init(GPIOA, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_11);
                                can_deinit(CAN0);

                                //PA11 Rx     PA12 Tx
      
        

//        rcu_periph_reset_enable(RCU_CAN0RST);
//        rcu_periph_reset_disable(RCU_CAN0RST);
                               
                                //初始化CAN0
                                can_parameter_struct Can_InitStructure;
        can_filter_parameter_struct Can_FilterInitStructure;
                                Can_InitStructure.time_triggered = DISABLE;            //禁止事件触发通信
                                Can_InitStructure.auto_bus_off_recovery = DISABLE;     //禁止离线恢复
                                Can_InitStructure.auto_wake_up = ENABLE;               //允许自动唤醒
                                Can_InitStructure.auto_retrans = DISABLE;              //禁止自动重传
        Can_InitStructure.rec_fifo_overwrite = DISABLE;      //禁止接收FIFO锁定
        Can_InitStructure.trans_fifo_order = DISABLE;        //禁止FIFO优先级
        Can_InitStructure.working_mode = CAN_NORMAL_MODE;    //正常通信模式 CAN_LOOPBACK_MODE CAN_NORMAL_MODE
                                //波特率 54M/(1+3+5)/12
        Can_InitStructure.resync_jump_width = CAN_BT_SJW_1TQ;  //再同步宽度补偿 1TQ
        Can_InitStructure.time_segment_1 = CAN_BT_BS1_5TQ;     //位段1长度
        Can_InitStructure.time_segment_2 = CAN_BT_BS2_3TQ;     //位段2长度
        Can_InitStructure.prescaler = 12;   //54M/12/(5+3+1) = 500kbps
        can_init(CAN0, &Can_InitStructure);
                               
                                //配置CAN过滤器
        Can_FilterInitStructure.filter_list_high = 0x100<<5;  //过滤器高字节
        Can_FilterInitStructure.filter_list_low = 0x321<<5;   //过滤器低字节
        Can_FilterInitStructure.filter_mask_high = 0x105<<5;  //过滤器掩码数高位
        Can_FilterInitStructure.filter_mask_low = 0x108<<5;   //过滤器掩码数低位
        Can_FilterInitStructure.filter_fifo_number = CAN_FIFO0;  //过滤器关联FIFO0
        Can_FilterInitStructure.filter_number = 0;
        Can_FilterInitStructure.filter_mode = CAN_FILTERMODE_LIST;  //列表模式
        Can_FilterInitStructure.filter_bits = CAN_FILTERBITS_16BIT; //16位
        Can_FilterInitStructure.filter_enable = ENABLE;
        can_filter_init(&Can_FilterInitStructure);
                               
                                //配置中断
                                //can_interrupt_enable(CAN0, CAN_INTEN_RFFIE0);
                                can_interrupt_enable(CAN0, CAN_INTEN_RFNEIE0);
        nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);
        nvic_irq_enable(USBD_LP_CAN0_RX0_IRQn,8,0);
                               
                               
}

使用特权

评论回复
沙发
两只袜子| | 2023-11-8 10:18 | 只看该作者
建议查阅GD32F103CBT6的技术手册

使用特权

评论回复
板凳
cainiao518| | 2023-11-8 11:02 | 只看该作者
回环模式接收自身发出的数据,正常模式有外部设备发数据到芯片吗?

使用特权

评论回复
地板
liuqianlin5|  楼主 | 2023-11-8 11:16 | 只看该作者
cainiao518 发表于 2023-11-8 11:02
回环模式接收自身发出的数据,正常模式有外部设备发数据到芯片吗?

用CAN分析仪发送数据,用示波器量RX端有波形,但是CAN接收没产生中断,GD发送CAN数据的,TX端没有波形

使用特权

评论回复
5
cainiao518| | 2023-11-8 13:44 | 只看该作者
liuqianlin5 发表于 2023-11-8 11:16
用CAN分析仪发送数据,用示波器量RX端有波形,但是CAN接收没产生中断,GD发送CAN数据的,TX端没有波形 ...

可以先把滤波都取消
另波特率确实是 54/9/12 ?
这54是哪里来的?

使用特权

评论回复
6
zeshoufx| | 2023-11-8 13:54 | 只看该作者
问个问题,,你这个抢占优先级和子优先级都是两位,,也就是最大值只能到4,,,你这个8和0配置怕是有点问题,,,另外没看到硬件这块不好说,,

使用特权

评论回复
评论
zeshoufx 2023-11-8 16:14 回复TA
@liuqianlin5 :我猜也是硬件的问题,,因为发送tx引脚没信号,,接收rx没信号,,大概就是硬件问题 
liuqianlin5 2023-11-8 15:53 回复TA
@zeshoufx :已经正常了,原理图上面没错,PCB引脚连错了 
zeshoufx 2023-11-8 15:51 回复TA
@liuqianlin5 :freertos的话一般应该都是抢占式优先级,,,4位抢占和0位子优先级 
liuqianlin5 2023-11-8 14:34 回复TA
我这个是跑freertos系统的,就算中断配置有问题的话,TX发送应该也是可以的吧?不知道这样理解对不对 
7
liuqianlin5|  楼主 | 2023-11-8 14:07 | 只看该作者
cainiao518 发表于 2023-11-8 13:44
可以先把滤波都取消
另波特率确实是 54/9/12 ?
这54是哪里来的?

单片机运行频率是108MHZ ,您说的滤波是指的CAN的滤波接收器吗?关键是现在发送都发送不出去,波形都没有

使用特权

评论回复
8
liuqianlin5|  楼主 | 2023-11-8 15:54 | 只看该作者
正常了,硬件引脚接反了,PCB画错了。。谢谢大家的帮助

使用特权

评论回复
9
xu@xupt| | 2023-11-8 18:52 | 只看该作者
围观,学习~~

使用特权

评论回复
10
tpgf| | 2023-12-1 09:10 | 只看该作者
我在调试st单片机的时候也遇到了一样的问题

使用特权

评论回复
11
aoyi| | 2023-12-1 09:41 | 只看该作者
我也是回环模式可以正常不行 但是我确认没有接线错误了

使用特权

评论回复
12
lemon_lb| | 2023-12-1 10:05 | 只看该作者
我也碰到这个问题了,回环模式下,外面加了接口芯片,周立功CAN连在总线上,cpu的TX引脚信号正常,周立功cantest能收到正确数据,但是切换成正常模式,TX引脚每次只发送一个脉冲信号,然后cantest接受报错,官网例程和自己程序都试了,效果一样,芯片换了进口国产都换了,可以排除接口芯片问题,cantest能收到准确数据,证明CPU引脚没配错,那这是啥原因。。。?

使用特权

评论回复
13
gwsan| | 2023-12-1 12:37 | 只看该作者
是不是回环模式调通了  就意味着正常模式也调试通过啊

使用特权

评论回复
14
lemon_lb| | 2023-12-1 14:28 | 只看该作者
有突破,把周立功test软件删了,目录清除,重装一次,正常模式进口芯片可以用了,国产还是不能用,重新再找国产替代型号

使用特权

评论回复
15
nawu| | 2023-12-2 08:00 | 只看该作者
liuqianlin5 发表于 2023-11-8 15:54
正常了,硬件引脚接反了,PCB画错了。。谢谢大家的帮助

这种情况反而是最好排查的了

使用特权

评论回复
16
zljiu| | 2023-12-2 08:33 | 只看该作者
为什么单片机里边的can都有一个回环模式呢

使用特权

评论回复
17
tfqi| | 2023-12-2 09:11 | 只看该作者
如何在回环模式下更改为正常模式呢

使用特权

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

本版积分规则

1

主题

6

帖子

0

粉丝