智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1088|回复: 0
打印 上一主题 下一主题

野火FTM问题求助

[复制链接]

16

主题

49

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1390
威望
676
贡献
390
兑换币
411
注册时间
2013-10-7
在线时间
162 小时
毕业学校
湖北工业大学
跳转到指定楼层
1#
发表于 2014-3-29 13:05:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自己做的核心板,芯片是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 ; //使能
}
求帮助有什么问题啊


回复

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2025-1-28 12:15 , Processed in 0.085731 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表