我尝试使用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**))这一句循环,没有发送成功。因此想请教一下可能是什么原因造成的呢?
|