问答

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

21ic问答首页 - hc32f460 can导致单片机复位

hc32f460 CAN tc ni ST 单片机复位

hc32f460 can导致单片机复位

zzqssq2024-08-27
can使能后发送数据,如果can总线上没有其他节点接收数据,单片机直接重启。接上接收设备后,单片机正常工作。can配置代码如下
//CAN Config
static void App_CANCfg(void)
{
    stc_can_init_t stcCanInit;

    /************************* Configure CAN1***************************/
    stc_can_filter_config_t astcFilter1[1U] = {
        {0x1UL, 0x0000UL, CAN_ID_STD},
    };

    /* Initializes CAN. */
    (void)CAN_StructInit(&stcCanInit);
    stcCanInit.stcBitCfg.u32Prescaler = 12U;
    stcCanInit.stcBitCfg.u32TimeSeg1  = 5U;
    stcCanInit.stcBitCfg.u32TimeSeg2  = 3;
    stcCanInit.stcBitCfg.u32SJW       = 3;
    stcCanInit.pstcFilter             = astcFilter1;
    stcCanInit.u16FilterSelect        = CAN_FILTER1;
    stcCanInit.u8WorkMode             = CAN_WORK_MD_NORMAL;//CAN_WORK_MD_ELB;
    stcCanInit.u8PTBSingleShotTx      = CAN_PTB_SINGLESHOT_TX_ENABLE;
    stcCanInit.u8STBSingleShotTx      = CAN_STB_SINGLESHOT_TX_ENABLE;
    stcCanInit.u8STBPrioMode          = CAN_STB_PRIO_MD_DISABLE;
    stcCanInit.u8RxWarnLimit          = 10U;
    stcCanInit.u8ErrorWarnLimit       = 15U;
    stcCanInit.u8RxAllFrame           = CAN_RX_ALL_FRAME_DISABLE;
    stcCanInit.u8RxOvfMode            = CAN_RX_OVF_DISCARD_NEW;
        stcCanInit.u8SelfAck                          = CAN_SELF_ACK_DISABLE;
    /* Enable peripheral clock of CAN. */
    FCG_Fcg1PeriphClockCmd(FCG1_PERIPH_CAN, ENABLE);
    (void)CAN_Init(CM_CAN, &stcCanInit);
       
        CAN_ExitLocalReset(CM_CAN);
    /* Enable the interrupts, the status flags can be read. */
    CAN_IntCmd(CM_CAN, CAN_INT_ALL, DISABLE);
    CAN_IntCmd(CM_CAN, CAN_INT_ERR_INT|CAN_INT_RX_BUF_WARN|CAN_INT_RX|CAN_INT_BUS_ERR, ENABLE);
}

回答 +关注 6
4758人浏览 13人回答问题 分享 举报
13 个回答
12下一页

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