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

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

[复制链接]
STMCU小助手 发布时间:2021-12-6 10:20
错误代码段如下
3 Q. F6 z% S! m
: ^+ D: i. p$ h$ ~
  1. FlagStatus HRTIM_GetFlagStatus(HRTIM_TypeDef * HRTIMx, uint32_t TimerIdx, uint32_t HRTIM_FLAG)
    / H+ W9 Q" s! `9 g# D$ ]
  2. {; ^( h3 @; d7 N; }) B
  3.   assert_param(IS_HRTIM_TIMERINDEX(TimerIdx));
    , }, J/ \% b& W! L7 Y  d
  4. 1 T4 I) r7 t9 Y! z% ]" ^
  5.   FlagStatus bitstatus = RESET;  * ]% y3 o5 n  x+ r$ u) V2 H
  6. 8 Z+ z! l$ L2 d5 ]3 y. o1 t: i
  7.   switch(TimerIdx)' B& ~) E5 Z" u
  8.   {
    & d: _; u- E# O; [) Q
  9.     case HRTIM_TIMERINDEX_MASTER:8 c6 a1 Y5 S: s4 \7 s! J& F" [
  10.     {
    7 ^( h. k0 l# R5 D% b
  11.       if ((HRTIMx->HRTIM_MASTER.MISR & HRTIM_FLAG) != RESET)
    2 r7 I$ f, W: V; j  I
  12.       {
    4 x) k0 F% u2 L7 z/ [# r2 d( b
  13.         bitstatus = SET;
    $ ?; @- `; T# J. G  h) a2 W
  14.       }
    * l7 D: [5 ]0 n3 l
  15.       else3 A8 D7 ]0 l  ~" V! }- ?
  16.       {+ J8 I) W6 w5 s0 q) k  z
  17.         bitstatus = RESET;6 r/ Z  h( w1 T0 C5 E3 b
  18.       }
    - |: p" O6 M1 a1 Q! r
  19.     }
    $ W$ D8 {; A2 J( A( @1 s' G+ y
  20.     break;4 j# Z3 j  K! T) S
  21. 1 a0 g, V  n4 y  d# P. j
  22.     case HRTIM_TIMERINDEX_TIMER_A:" F7 `9 ^0 F' r/ z+ _3 p4 o
  23.     case HRTIM_TIMERINDEX_TIMER_B:
    ( Z) C- Y7 e7 n: x
  24.     case HRTIM_TIMERINDEX_TIMER_C:
    ; t. `) J& d: @8 e2 u
  25.     case HRTIM_TIMERINDEX_TIMER_D:4 A1 Z8 \9 s# Z6 \5 y& g+ c& m6 j; @
  26.     case HRTIM_TIMERINDEX_TIMER_E:7 B; }* X" A9 N$ u0 d
  27.     {
    - B4 J: h) W: m
  28.       if ((HRTIMx->HRTIM_TIMERx[TimerIdx].TIMxISR & HRTIM_FLAG) != RESET)
    1 l( `: W6 X; ?! i4 I! h
  29.       {
    ( v& ?6 I# a2 i. Q4 F0 G
  30.         bitstatus = SET;
    : s; }- \0 v4 |& a9 j2 h: i, a
  31.       }6 N& S" I, k( ?% i% P& S
  32.       else) |! N1 g* P% ^$ y% T7 K+ I
  33.       {% l: I8 P; y7 K4 m
  34.         bitstatus = RESET;4 c+ M8 N5 j# q  [
  35.       }
    # n% ~! w# c$ j: f4 A6 A$ o3 }( L- u! s/ {
  36.     }
    0 o  f5 Q( m( P0 Q
  37.     break;
    ) y# J: B/ d8 T* p
  38. 7 T5 Z2 p: B  @
  39.     default:4 C/ f) v' l1 l8 a% f6 ?
  40.     break;  6 J; [) s; ?3 h: g  H- `
  41.   }   
    + ~3 |- m9 Q6 V* Z6 u: U  y
  42.   return bitstatus;, N. z* |) z5 ]% r  b. R1 Y
  43. }
复制代码
6 R7 d$ H7 X, q) n" o
编译报错如下
+ Y* e; e+ w4 P! ^' \" t
& v( }  u! T6 J& g
  1. ..\Libraries\STM32F30x_StdPeriph_Driver\src\stm32f30x_hrtim.c(1139): error:  #268: declaration may not appear after executable statement in block
复制代码
% T. [6 f3 }: K0 F- J+ L/ W- O3 B
修改方法:需要将 FlagStatus bitstatus = RESET; 这一段代码移动至 assert_param(IS_HRTIM_TIMERINDEX(TimerIdx));之前。
9 F8 ?; Z' f( f) d9 p
6 H9 z' Q; N! {) e即变量的定义要在语句之前。+ v5 A9 g2 F2 u& G

/ w/ z% E% a5 t" P+ M1 b. u修改后的代码如下:7 u) s8 X3 f+ e8 u
6 U" S4 ^0 P$ ?; @3 f2 r
  1. FlagStatus HRTIM_GetFlagStatus(HRTIM_TypeDef * HRTIMx, uint32_t TimerIdx, uint32_t HRTIM_FLAG)
    7 p! v0 p0 c- U3 p& j2 X/ _: @
  2. {
    ; @( U& w! |1 u2 m# x: K9 W
  3.         FlagStatus bitstatus = RESET;
    2 l" k- c5 m& o7 s  S$ u8 A( p
  4.         
    ( v# t1 E0 o7 _6 R
  5.   assert_param(IS_HRTIM_TIMERINDEX(TimerIdx));  
    6 _1 T. K3 D6 }, M% r

  6. ) B& s& B) C3 i/ [* Y5 n2 ^& h& R9 f% I
  7.   switch(TimerIdx)" V+ s' \8 W! P/ e
  8.   {% x* f+ |$ n6 y2 E' }* m
  9.     case HRTIM_TIMERINDEX_MASTER:0 o( w, s0 f/ X7 Y- W3 P$ r
  10.     {
    5 e1 e2 O  E8 w$ P+ u) a2 h2 f
  11.       if ((HRTIMx->HRTIM_MASTER.MISR & HRTIM_FLAG) != RESET): C6 c9 J' U& ~" C* a
  12.       {
    # E' E0 u8 d; g
  13.         bitstatus = SET;
    1 M1 S% j8 U# g6 f0 y6 B  o/ L
  14.       }/ J8 O$ j# u* X6 U" @
  15.       else( {1 E0 X6 I6 B* m7 L
  16.       {
    8 f4 _& u) Y; v% D
  17.         bitstatus = RESET;
    , s5 N' T( [( C  u7 O) f
  18.       }; @7 ~7 z& W* I) }. [8 O
  19.     }
    ' |, h/ {+ ~: ~( i6 K
  20.     break;
    ; Z. w: J8 I4 s
  21. : c$ r6 Y3 f9 F9 H& k+ d& f
  22.     case HRTIM_TIMERINDEX_TIMER_A:3 h& E: T! h6 M% v! M
  23.     case HRTIM_TIMERINDEX_TIMER_B:
    7 |* b, W  o+ b
  24.     case HRTIM_TIMERINDEX_TIMER_C:+ e1 g/ B) K: d5 f6 N( ~
  25.     case HRTIM_TIMERINDEX_TIMER_D:' u' @/ h4 S3 q( b
  26.     case HRTIM_TIMERINDEX_TIMER_E:
    ' t) R+ m$ n/ [& W
  27.     {
    ! Z2 B$ u) B' a0 e' Q8 S, |
  28.       if ((HRTIMx->HRTIM_TIMERx[TimerIdx].TIMxISR & HRTIM_FLAG) != RESET)+ G, ]6 N3 p3 h! }  n; U
  29.       {" Q& `# Y9 V0 _* `& m
  30.         bitstatus = SET;. W; m' D3 C, B) z+ s9 z) h
  31.       }; k( L( ~) C( ~2 {+ C2 c& T
  32.       else
    ; d9 ~! L. {( e# c0 {# K( |2 a0 e
  33.       {+ B8 i- c4 V8 T. |: [  [
  34.         bitstatus = RESET;
    : @0 [$ q2 U4 |$ j; m0 \
  35.       }4 b6 m- N7 Y# n8 w$ P! S
  36.     }9 K- X: x2 B7 p& g
  37.     break;1 y% g, I, s# P. V
  38. * v% @# d) e, ?6 D
  39.     default:
    8 f. p1 I& a* B- w# d
  40.     break;  
    " f0 t2 @% u9 {* b1 x
  41.   }    : v' J0 ^) L7 w1 F
  42.   return bitstatus;
    8 \5 B8 P. I6 a4 \7 L0 y6 [# ?+ t" S
  43. }& l  y0 W; P8 H
  44. " F/ L& T2 Q: T/ \  }- a
复制代码
/ l. h$ g5 w5 f+ c0 p' k  N# I9 z$ s
收藏 评论0 发布时间:2021-12-6 10:20

举报

0个回答

所属标签

相似分享

官网相关资源

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