HC32F4A0 CANFD 的使用记录

这篇博客记录了使用HC32FA0开发板调试CAN-FD模块的过程,详细介绍了如何配置仲裁域和数据域的波特率,包括1M、2M和4M的设置。作者提到了CAN_FD_TDC_DISABLE的注意事项,并分享了具体的代码片段以供参考。
摘要由CSDN通过智能技术生成

看了一圈,这个片子没有人发个类似的,发个文章记录调试

1、调试了HC32F4A0 CANFD                       

     调试环境用的HC32FA0 开发板 

    用的是can1测试

 测试华大的教程,测试验证 仲裁端为 1M 数据端为8M                         

 以下是华大的配置

2、具体的计算公式

不想计算的的小伙伴,可以参考下手册时钟对应波特率图,用户手册上1353页

3、配置这个要注意的一点是    CAN_FD_TDC_DISABLE   这个禁止。

     至于为什么,我也不懂,懂得朋友告诉一声

//500k  canfd 配置   在时钟80M通讯


 
    /* Initializes CAN. */
    (void)CAN_StructInit(&stcCanInit);        //500k   仲裁域的500k配置
    stcCanInit.stcBitCfg.u32Prescaler = 4U;
    stcCanInit.stcBitCfg.u32TimeSeg1  = 32U;
    stcCanInit.stcBitCfg.u32TimeSeg2  = 8U;
    stcCanInit.stcBitCfg.u32SJW       = 8U;
    stcCanInit.pstcFilter             = astcFilter;
    stcCanInit.u16FilterSelect        = CAN_FILTER_SEL;
    stcCanInit.u8WorkMode             = CAN_WORK_MD_NORMAL;

    /* CAN-FD configuration. */
    (void)CAN_FD_StructInit(&stcCanFd);         //500K   数据域的500k配置
    stcCanFd.stcBitCfg.u32Prescaler = 8U;
    stcCanFd.stcBitCfg.u32TimeSeg1  = 16U;
    stcCanFd.stcBitCfg.u32TimeSeg2  = 4U;
    stcCanFd.stcBitCfg.u32SJW       = 4U;
    stcCanFd.u8TDC                  = CAN_FD_TDC_DISABLE;
    stcCanFd.u8SSPOffset            = stcCanFd.stcBitCfg.u32TimeSeg1; /* Equal to SEG1 is suggested. */
    stcCanInit.pstcCanFd = &stcCanFd;
		

以下的是测试数据

4、以下是调试完成    1M   2M   4M  的代码

1M

   // 1m  
    /* Initializes CAN. */
    (void)CAN_StructInit(&stcCanInit);        //500k
    stcCanInit.stcBitCfg.u32Prescaler = 4U;
    stcCanInit.stcBitCfg.u32TimeSeg1  = 32U;
    stcCanInit.stcBitCfg.u32TimeSeg2  = 8U;
    stcCanInit.stcBitCfg.u32SJW       = 8U;
    stcCanInit.pstcFilter             = astcFilter;
    stcCanInit.u16FilterSelect        = CAN_FILTER_SEL;
    stcCanInit.u8WorkMode             = CAN_WORK_MD_NORMAL;

    /* CAN-FD configuration. */
    (void)CAN_FD_StructInit(&stcCanFd);         //1M
    stcCanFd.stcBitCfg.u32Prescaler = 4U;
    stcCanFd.stcBitCfg.u32TimeSeg1  = 16U;
    stcCanFd.stcBitCfg.u32TimeSeg2  = 4U;
    stcCanFd.stcBitCfg.u32SJW       = 4U;
    stcCanFd.u8TDC                  = CAN_FD_TDC_DISABLE;
    stcCanFd.u8SSPOffset            = stcCanFd.stcBitCfg.u32TimeSeg1; /* Equal to SEG1 is suggested. */
    stcCanInit.pstcCanFd = &stcCanFd;
		

2M


    /* Initializes CAN. */
    (void)CAN_StructInit(&stcCanInit);        //1M
    stcCanInit.stcBitCfg.u32Prescaler = 1U;
    stcCanInit.stcBitCfg.u32TimeSeg1  = 64U;
    stcCanInit.stcBitCfg.u32TimeSeg2  = 16U;
    stcCanInit.stcBitCfg.u32SJW       = 16U;
    stcCanInit.pstcFilter             = astcFilter;
    stcCanInit.u16FilterSelect        = CAN_FILTER_SEL;
    stcCanInit.u8WorkMode             = CAN_WORK_MD_NORMAL;

    /* CAN-FD configuration. */
    (void)CAN_FD_StructInit(&stcCanFd);         //2M
    stcCanFd.stcBitCfg.u32Prescaler = 2U;
    stcCanFd.stcBitCfg.u32TimeSeg1  = 16U;
    stcCanFd.stcBitCfg.u32TimeSeg2  = 4U;
    stcCanFd.stcBitCfg.u32SJW       = 4U;
    stcCanFd.u8TDC                  = CAN_FD_TDC_ENABLE;
    stcCanFd.u8SSPOffset            = stcCanFd.stcBitCfg.u32TimeSeg1; /* Equal to SEG1 is suggested. */
    stcCanInit.pstcCanFd = &stcCanFd;

4M

    /* Initializes CAN. */
    (void)CAN_StructInit(&stcCanInit);
    stcCanInit.stcBitCfg.u32Prescaler = 1U;     //1M
    stcCanInit.stcBitCfg.u32TimeSeg1  = 64U;
    stcCanInit.stcBitCfg.u32TimeSeg2  = 16U;
    stcCanInit.stcBitCfg.u32SJW       = 16U;
    stcCanInit.pstcFilter             = astcFilter;
    stcCanInit.u16FilterSelect        = CAN_FILTER_SEL;
    stcCanInit.u8WorkMode             = CAN_WORK_MD_NORMAL;

    /* CAN-FD configuration. */
    (void)CAN_FD_StructInit(&stcCanFd);         //4M
    stcCanFd.stcBitCfg.u32Prescaler = 1U;
    stcCanFd.stcBitCfg.u32TimeSeg1  = 16U;
    stcCanFd.stcBitCfg.u32TimeSeg2  = 4U;
    stcCanFd.stcBitCfg.u32SJW       = 4U;
    stcCanFd.u8TDC                  = CAN_FD_TDC_ENABLE;
    stcCanFd.u8SSPOffset            = stcCanFd.stcBitCfg.u32TimeSeg1; /* Equal to SEG1 is suggested. */
    stcCanInit.pstcCanFd = &stcCanFd;

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
HC32F4A0华大控股(HOLTEK)推出的一款低功耗高性能32位微控制器系列产品。该系列产品采用ARM Cortex-M4F内核,工作频率高达200MHz,具有强大的计算和运算能力。它采用了低功耗设计,支持多种低功耗模式,可在满足高性能要求的同时降低功耗,延长系统的工作时间。 HC32F4A0数据手册是针对该系列产品的详细说明书。数据手册提供了丰富的技术参数、引脚功能、寄存器配置和功能描述等信息,使得用户能够全面了解该系列产品的特性和应用。数据手册还提供了丰富的应用示例和代码,帮助用户快速上手和开发基于HC32F4A0的应用。 在HC32F4A0数据手册中,用户可以找到芯片的各个模块功能和工作原理的详细说明,例如中央处理器、内部存储器、时钟管理、模拟/数字转换等。通过阅读数据手册,用户能够深入了解芯片的性能和特性,并按需配置芯片的功能模块,以实现自己的设计要求。 此外,数据手册还提供了芯片的电气特性、工作条件、封装和焊接规范等重要信息。这些信息对于正确使用和布局芯片是非常重要的,能够减少故障和不正确使用产生的风险。 总之,HC32F4A0数据手册是用户了解和使用HC32F4A0系列产品的重要参考资料。通过阅读数据手册,用户可以全面了解该系列产品的特性、技术参数和应用示例,从而更好地应用和开发基于HC32F4A0的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mg_hover

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值