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

【经验分享】关于STM32F3标准外设库中的一个语法错误

[复制链接]
STMCU小助手 发布时间:2021-12-6 10:20
错误代码段如下

  1. FlagStatus HRTIM_GetFlagStatus(HRTIM_TypeDef * HRTIMx, uint32_t TimerIdx, uint32_t HRTIM_FLAG)
  2. {
  3.   assert_param(IS_HRTIM_TIMERINDEX(TimerIdx));

  4.   FlagStatus bitstatus = RESET;  

  5.   switch(TimerIdx)
  6.   {
  7.     case HRTIM_TIMERINDEX_MASTER:
  8.     {
  9.       if ((HRTIMx->HRTIM_MASTER.MISR & HRTIM_FLAG) != RESET)
  10.       {
  11.         bitstatus = SET;
  12.       }
  13.       else
  14.       {
  15.         bitstatus = RESET;
  16.       }
  17.     }
  18.     break;

  19.     case HRTIM_TIMERINDEX_TIMER_A:
  20.     case HRTIM_TIMERINDEX_TIMER_B:
  21.     case HRTIM_TIMERINDEX_TIMER_C:
  22.     case HRTIM_TIMERINDEX_TIMER_D:
  23.     case HRTIM_TIMERINDEX_TIMER_E:
  24.     {
  25.       if ((HRTIMx->HRTIM_TIMERx[TimerIdx].TIMxISR & HRTIM_FLAG) != RESET)
  26.       {
  27.         bitstatus = SET;
  28.       }
  29.       else
  30.       {
  31.         bitstatus = RESET;
  32.       }
  33.     }
  34.     break;

  35.     default:
  36.     break;  
  37.   }   
  38.   return bitstatus;
  39. }
复制代码

编译报错如下

  1. ..\Libraries\STM32F30x_StdPeriph_Driver\src\stm32f30x_hrtim.c(1139): error:  #268: declaration may not appear after executable statement in block
复制代码

修改方法:需要将 FlagStatus bitstatus = RESET; 这一段代码移动至 assert_param(IS_HRTIM_TIMERINDEX(TimerIdx));之前。

即变量的定义要在语句之前。

修改后的代码如下:

  1. FlagStatus HRTIM_GetFlagStatus(HRTIM_TypeDef * HRTIMx, uint32_t TimerIdx, uint32_t HRTIM_FLAG)
  2. {
  3.         FlagStatus bitstatus = RESET;
  4.         
  5.   assert_param(IS_HRTIM_TIMERINDEX(TimerIdx));  

  6.   switch(TimerIdx)
  7.   {
  8.     case HRTIM_TIMERINDEX_MASTER:
  9.     {
  10.       if ((HRTIMx->HRTIM_MASTER.MISR & HRTIM_FLAG) != RESET)
  11.       {
  12.         bitstatus = SET;
  13.       }
  14.       else
  15.       {
  16.         bitstatus = RESET;
  17.       }
  18.     }
  19.     break;

  20.     case HRTIM_TIMERINDEX_TIMER_A:
  21.     case HRTIM_TIMERINDEX_TIMER_B:
  22.     case HRTIM_TIMERINDEX_TIMER_C:
  23.     case HRTIM_TIMERINDEX_TIMER_D:
  24.     case HRTIM_TIMERINDEX_TIMER_E:
  25.     {
  26.       if ((HRTIMx->HRTIM_TIMERx[TimerIdx].TIMxISR & HRTIM_FLAG) != RESET)
  27.       {
  28.         bitstatus = SET;
  29.       }
  30.       else
  31.       {
  32.         bitstatus = RESET;
  33.       }
  34.     }
  35.     break;

  36.     default:
  37.     break;  
  38.   }   
  39.   return bitstatus;
  40. }

复制代码

收藏 评论0 发布时间:2021-12-6 10:20

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版