打印

GD32F303 CAN回环正常 正常模式不行 TX看不到波形

[复制链接]
3508|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ETO降临派|  楼主 | 2022-4-19 19:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
搞了个GD32的开发板,用了例程测试一下CAN通讯,发现了 在回环模式下可以进入CAN的接收中断,可以看到接收到的数据,但是改成正常模式后,使用CAN分析仪就完全看不到内容,使用示波器查看CAN0_TX这个引脚也看不到信号 下面是初始化代码

//CAN 引脚初始化
void can_gpio_config(void)
{
        /* enable can clock */
        rcu_periph_clock_enable(RCU_CAN0);
        rcu_periph_clock_enable(RCU_GPIOD);
       
        /* configure CAN0 GPIO, CAN0_TX(PD1) and CAN0_RX(PD0) */
        gpio_init(GPIOD, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
       
        gpio_init(GPIOD, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_0);
       
        gpio_pin_remap_config(GPIO_CAN_FULL_REMAP,ENABLE);
}

//CAN 控制器初始化
void __can_networking_init(void)
{
    can_parameter_struct can_parameter;
    can_filter_parameter_struct can_filter;
    /* 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 = DISABLE;
    can_parameter.rec_fifo_overwrite = DISABLE;
    can_parameter.trans_fifo_order = DISABLE;
    can_parameter.working_mode = CAN_NORMAL_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;
    /* baudrate 1Mbps */
    can_parameter.prescaler = 6;
    can_init(CAN0, &can_parameter);

    /* initialize filter */
    /* CAN0 filter number */
    can_filter.filter_number = 0;

    /* initialize filter */   
    can_filter.filter_mode = CAN_FILTERMODE_MASK;
    can_filter.filter_bits = CAN_FILTERBITS_32BIT;
    can_filter.filter_list_high = 0x0000;
    can_filter.filter_list_low = 0x0000;
    can_filter.filter_mask_high = 0x0000;
    can_filter.filter_mask_low = 0x0000;  
    can_filter.filter_fifo_number = CAN_FIFO0;
    can_filter.filter_enable = ENABLE;
    can_filter_init(&can_filter);
}

使用特权

评论回复
沙发
ETO降临派|  楼主 | 2022-4-19 19:47 | 只看该作者
芯片是GD32F303ZE

使用特权

评论回复
板凳
ETO降临派|  楼主 | 2022-4-19 20:48 | 只看该作者
仿真测试 发现 ERRN = 0x05 ,报位显性错误 ,一查发现CAN_TX CAN_RX 都是3.3V高电平 经过仿真发现 在gpio初始化完成后就一直是高电平了

使用特权

评论回复
地板
Qi18226636631| | 2022-4-19 21:49 | 只看该作者
打开RCU_AF时钟再试试

使用特权

评论回复
5
ETO降临派|  楼主 | 2022-4-20 09:23 | 只看该作者
Qi18226636631 发表于 2022-4-19 21:49
打开RCU_AF时钟再试试

试过了 还是一样的  我试过官方提供的例程 也是一样的现象  

使用特权

评论回复
6
alienmiller| | 2022-4-20 15:39 | 只看该作者
查查 CAN 总线上挂的器件

使用特权

评论回复
7
Rogerzl1234| | 2022-4-20 17:01 | 只看该作者
和我遇到的问题一模一样。如果 CAN TX和RX没有和CAN收发器连接的情况下,正常模式下CAN TX和RX是没有数据发出的。我这边经过一系列的排查最终发现是收发器RX相连的电路中存在问题。

使用特权

评论回复
8
ETO降临派|  楼主 | 2022-4-20 21:03 | 只看该作者
已解决  硬件问题   吐槽一下 GD32 can的波特率 让人吐血~

使用特权

评论回复
9
zcbmd| | 2022-4-24 10:13 | 只看该作者
ETO降临派 发表于 2022-4-20 21:03
已解决  硬件问题   吐槽一下 GD32 can的波特率 让人吐血~

你好,你是什么硬件问题啊,我也同样情况,也没发现什么硬件问题

使用特权

评论回复
10
cx103931118cc| | 2022-5-12 14:44 | 只看该作者
楼主,是什么硬件问题,能把CAN的例程程序发我吗,我这几天一直CAN调不通,103931118@qq.com

使用特权

评论回复
评论
ETO降临派 2022-5-12 16:43 回复TA
我就是用的官方提供的例程,直接去官网下载 
11
yangxiaor520| | 2022-5-13 09:00 | 只看该作者
回环模式是没有经过TX的。

使用特权

评论回复
12
ETO降临派|  楼主 | 2022-6-20 15:35 | 只看该作者

使用特权

评论回复
13
中国罗宾鸟| | 2022-6-22 10:18 | 只看该作者
CAN收发芯片的RX与MCU的RX引脚连接,TX与TX连接,这个与485及232芯片有点区别,我第一次用就搞反了。另外就是你所要用的调试设备上是否需要连接终端电阻之类的东西,如果CAN收发芯片输出端加TVS或电容的话,值(TVS为寄生电容)应该尽量小,容值为pF级别。否则波形会严重变形。

使用特权

评论回复
14
kakahucao| | 2022-8-13 17:25 | 只看该作者
ETO降临派 发表于 2022-4-20 21:03
已解决  硬件问题   吐槽一下 GD32 can的波特率 让人吐血~

楼主 请问你这个硬件问题怎么解决的呀

使用特权

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

本版积分规则

6

主题

21

帖子

0

粉丝