金牌会员
- 积分
- 1390
- 威望
- 676
- 贡献
- 390
- 兑换币
- 411
- 注册时间
- 2013-10-7
- 在线时间
- 162 小时
- 毕业学校
- 湖北工业大学
|
自己做的核心板,芯片是MK60DN256VLL10,用的野火的库V5.0版本
有时候,在单步调试或连续运行程序时,程序运行正常,
但关掉电源,再开启时,程序就无法运行了,一点反应都没有,液晶都不亮了,这是为什么?
但有时候又可以运行,真心觉得无解啊,
还有个问题,为啥我的FTM1 可以正常计数,FTM2却不行,模式是AB相模式。
void QD_Init(void)
{
FTM_QUAD_Init(FTM1);
FTM_QUAD_Init(FTM2);
}
inline void GetWheelSpeed(void) //注意符号的转化,底层库函数输出的是无符号数
{
gL_Speed = FTM_QUAD_get(FTM1); // 左轮速度
FTM_QUAD_clean(FTM1); //清除计数
gR_Speed = -FTM_QUAD_get(FTM2); //右轮速度
FTM_QUAD_clean(FTM2);
}
对野火底层函数修改如下,因为它默认的是加减计数模式,我用的AB相模式
void FTM_QUAD_Init(FTMn_e ftmn)
{
ASSERT( (ftmn == FTM1) || (ftmn == FTM2 ) ); //检查传递进来的通道是否正确
/******************* 开启时钟 和 复用IO口*******************/
switch(ftmn)
{
case FTM1:
SIM_SCGC6 |= SIM_SCGC6_FTM1_MASK; //使能FTM1时钟
if(FTM1_QDPHA == PTA8) //管脚复用
{
port_init(FTM1_QDPHA, ALT6);
}
else if(FTM1_QDPHA == PTA12)
{
port_init(FTM1_QDPHA, ALT7);
}
else if(FTM1_QDPHA == PTB0)
{
port_init(FTM1_QDPHA, ALT6);
}
else
{
ASSERT(0); //断言,配置的管脚不符合要求
}
if(FTM1_QDPHB == PTA9)
{
port_init(FTM1_QDPHB, ALT6);
}
else if(FTM1_QDPHB == PTA13)
{
port_init(FTM1_QDPHB, ALT7);
}
else if(FTM1_QDPHB == PTB1)
{
port_init(FTM1_QDPHB, ALT6);
}
else
{
ASSERT(0); //断言,配置的管脚不符合要求
}
break;
case FTM2:
SIM_SCGC3 |= SIM_SCGC3_FTM2_MASK; //使能FTM2时钟
if(FTM2_QDPHA == PTA10) //管脚复用
{
port_init(FTM2_QDPHA, ALT6);
}
else if(FTM2_QDPHA == PTB18)
{
port_init(FTM2_QDPHA, ALT6);
}
else
{
ASSERT(0); //断言,配置的管脚不符合要求
}
if(FTM2_QDPHB == PTA11) //管脚复用
{
port_init(FTM2_QDPHA, ALT6);
}
else if(FTM2_QDPHB == PTB19)
{
port_init(FTM2_QDPHA, ALT6);
}
else
{
ASSERT(0); //断言,配置的管脚不符合要求
}
break;
default:
ASSERT(0); //断言,配置的模块有误
break;
}
FTM_MODE_REG(FTMN[ftmn]) |= FTM_MODE_FTMEN_MASK ; //FTM2EN=1
FTM_CNTIN_REG(FTMN[ftmn]) = 0; //FTM计数器初始值为0
FTM_CNT_REG(FTMN[ftmn]) = 0;
FTM_MOD_REG(FTMN[ftmn]) = 0xFFFF;//结束值
FTM_QDCTRL_REG(FTMN[ftmn]) |= 0; //AB相模式 // 0x8u,加减计数模式
FTM_QDCTRL_REG(FTMN[ftmn]) |=FTM_QDCTRL_QUADEN_MASK ; //使能
}
求帮助有什么问题啊
|
|