问答

汇集网友智慧,解决技术难题

21ic问答首页 - 有关HC32F460的CAN通讯问题

CAN通讯 hc32f460 tc ni LTE

有关HC32F460的CAN通讯问题

Wtt小菜鸟2021-10-31
我尝试使用HC32F460来进行CAN通讯,但是在使用例程的时候始终无法进行正常的CAN通讯,想请教一下是不是哪里配置错误导致的问题。
选用的是20MHz外部晶振,主频与例程相同配至200MHz。
以下是有关CAN的配置
static void CanInitConfig(void)
{
    stc_can_init_config_t stcCanInitCfg;
    stc_can_filter_t astcFilters[CAN_FILTERS_COUNT] = \
    {
        {0x00000000ul, 0x1FFFFFFFul, CanFilterSel1, CanAllFrames}
    };

    //<< Enable can peripheral clock and buffer(ram)
    PWC_RamOpMdConfig(HighSpeedMd);
    PWC_RamPwrdownCmd(PWC_RAMPWRDOWN_CAN, Enable);
    PWC_Fcg1PeriphClockCmd(PWC_FCG1_PERIPH_CAN, Enable);

    //<< CAN GPIO config  这里是自己配置的两个端口
    PORT_SetFunc(PortB, Pin02, Func_Can1_Rx, Disable);
    PORT_SetFunc(PortB, Pin10, Func_Can1_Tx, Disable);

    //64pin没有PD15,所以屏蔽了以下两句
    //PORT_ResetBits(PortD, Pin15);
    //PORT_OE(PortD, Pin15, Enable);

    MEM_ZERO_STRUCT(stcCanInitCfg);
    //<< Can bit time config  这边跟例程相同选用1MHz波特率
    stcCanInitCfg.stcCanBt.PRESC = 1u-1u;
    stcCanInitCfg.stcCanBt.SEG_1 = 5u-2u;
    stcCanInitCfg.stcCanBt.SEG_2 = 3u-1u;
    stcCanInitCfg.stcCanBt.SJW   = 3u-1u;

    stcCanInitCfg.stcWarningLimit.CanErrorWarningLimitVal = 10u;
    stcCanInitCfg.stcWarningLimit.CanWarningLimitVal = 16u-1u;

    stcCanInitCfg.enCanRxBufAll  = CanRxNormal;
    stcCanInitCfg.enCanRxBufMode = CanRxBufNotStored;
    stcCanInitCfg.enCanSAck      = CanSelfAckEnable;
    stcCanInitCfg.enCanSTBMode   = CanSTBFifoMode;

    stcCanInitCfg.pstcFilter     = astcFilters;
    stcCanInitCfg.u8FilterCount  = CAN_FILTERS_COUNT;

    CAN_Init(&stcCanInitCfg);
}

因为通讯不上,我又尝试使用CAN内部回环模式通信的例程,想看看能不能进行内部通讯,但是仍然失败,且一直在while (false == CAN_Irq**Get(CanTxPrimaryIrq**))这一句循环,没有发送成功。因此想请教一下可能是什么原因造成的呢?
回答 +关注 16
9767人浏览 26人回答问题 分享 举报
26 个回答
123下一页

您需要登录后才可以回复 登录 | 注册