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);
}
|