请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

FOC5.4 按键启动变量的传递

[复制链接]
是谁事实上 提问时间:2022-6-29 18:33 / 已解决
各位亲:

       我在5.4的库里面发现按键启动后,开始电机用的是 pMCI[M1] 这个结构体,如下

__weak bool MC_StartMotor1(void)
{
        return MCI_StartMotor( pMCI[M1] );
}

但是,在电机底层执行的时候判断的却是 STM[M1] 这个结构体,如下

  StateM1 = STM_GetState( &STM[M1] );      // STM[M1]->bState
  switch ( StateM1 )
  {
  case IDLE_START:

看了很多遍都没发现是怎么将 pMCI[M1]->pSTM->bState 的 IDLE_START 传递给 STM[M1]->bState 的
哪位大哥哥帮小弟看看哈,感谢,感谢
收藏 评论3 发布时间:2022-6-29 18:33

举报

3个回答
弗兰克 最优答案 回答时间:2022-6-30 10:29:48
__weak bool MCI_StartMotor( MCI_Handle_t * pHandle )
{
  bool RetVal = STM_NextState( pHandle->pSTM, IDLE_START );

  if ( RetVal == true )
  {
    pHandle->CommandState = MCI_COMMAND_NOT_ALREADY_EXECUTED;
  }

  return RetVal;
}

电机启动通过,改变状态机来进行的,bool RetVal = STM_NextState( pHandle->pSTM, IDLE_START );

状态机是在中频任务里固定频率调用的,可以查看文件mc_task.c 里面__weak void TSK_MediumFrequencyTaskM1(void) 这个函数,就清楚怎么回事了。

是谁事实上 回答时间:2022-6-30 14:26:12
弗兰克 发表于 2022-6-30 10:29
__weak bool MCI_StartMotor( MCI_Handle_t * pHandle )
{
  bool RetVal = STM_NextState( pHandle->pSTM, ...


Hi 弗兰克:    谢谢你回答我的问题,中频任务里面我看到是判断这个
StateM1 = STM_GetState( &STM[M1] );
switch ( StateM1 ){case ...}
这里面的结构体是用STM[M1]这个名称去get电机状态的
而应用层那边MCI_StartMotor( pMCI[M1] )
这里面的结构体是用pMCI[M1]这个名称去set电机状态的
这两个名称不一样,是怎么传递过去的呢
是谁事实上 回答时间:2022-6-30 16:19:11
是谁事实上 发表于 2022-6-30 14:26
Hi 弗兰克:    谢谢你回答我的问题,中频任务里面我看到是判断这个
StateM1 = STM_GetState( &STM[M1] ); ...

已经找到位置了,感谢
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版