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

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

[复制链接]
STMCU小助手 发布时间:2021-12-6 10:20
错误代码段如下7 f/ t# M* C& n
- H+ z( I6 [( T1 }9 g) }
  1. FlagStatus HRTIM_GetFlagStatus(HRTIM_TypeDef * HRTIMx, uint32_t TimerIdx, uint32_t HRTIM_FLAG)
    , h: ]/ b5 K, a" j+ u5 H
  2. {
    7 k2 I) k, @9 [
  3.   assert_param(IS_HRTIM_TIMERINDEX(TimerIdx));+ M% d7 u( e( w; z, s0 ]- M8 F0 {

  4. $ E9 P: A8 }% D' i
  5.   FlagStatus bitstatus = RESET;  
    6 n+ ^9 d+ i  w9 y7 i% `

  6. 2 Q% m" Q/ m( S9 v5 Q/ l( O
  7.   switch(TimerIdx)9 {6 x; V4 |9 `- t
  8.   {
    $ _5 {4 m) z  i2 J
  9.     case HRTIM_TIMERINDEX_MASTER:2 t) L7 _/ B( {$ i: x, L
  10.     {6 r& t0 k3 {: F; m- d6 k" @) ?3 _
  11.       if ((HRTIMx->HRTIM_MASTER.MISR & HRTIM_FLAG) != RESET)
    / Y1 g0 P+ a# }) C% [; J9 x+ P
  12.       {
    8 x* k; d( p3 h$ h: N2 Q' E
  13.         bitstatus = SET;
    9 n" T2 Y3 W3 V1 `4 u! h# E
  14.       }
    " u% f& N5 E' G8 }+ M
  15.       else7 C) D. w: ~' s) `
  16.       {; p2 w  T2 Z. Y9 T- z
  17.         bitstatus = RESET;8 M9 s. w# g, U% R1 j
  18.       }
    & d+ p! w, _3 q: m! v2 o; b( R
  19.     }, P  B9 _+ b. T" ]* g, _1 [7 k
  20.     break;
    ' n% X" v! q6 Q- R; N  C. Z
  21. 2 m8 C" w1 y& c5 I1 P: \
  22.     case HRTIM_TIMERINDEX_TIMER_A:
    , b% K, D/ R  d3 F
  23.     case HRTIM_TIMERINDEX_TIMER_B:
    2 R  K; w- U4 B, T* k. x
  24.     case HRTIM_TIMERINDEX_TIMER_C:
    4 z7 x) @# C5 L- j
  25.     case HRTIM_TIMERINDEX_TIMER_D:( l0 ^3 r5 ?3 r6 A+ C/ _  x. Z
  26.     case HRTIM_TIMERINDEX_TIMER_E:
    & ~! N. |- [; z3 i
  27.     {
      B; u1 w) I% B$ }
  28.       if ((HRTIMx->HRTIM_TIMERx[TimerIdx].TIMxISR & HRTIM_FLAG) != RESET)1 y/ Q3 q9 A- G+ q1 F$ h8 Z
  29.       {
    ' A: q# Y) J9 N& W* s) \) V2 D
  30.         bitstatus = SET;" y5 o' |3 l/ A  X' E
  31.       }
    : P! G. B7 p2 u$ ^( _# k& R
  32.       else* v2 B0 }( e) b5 r% l2 {. ~
  33.       {5 v& x! v( U9 u# ~/ \* C! \  {
  34.         bitstatus = RESET;, h) ?3 T: |1 H; e
  35.       }
    1 j: ]0 ]; l, _/ W2 K; ?
  36.     }* h" w8 S: B9 Z- e, u4 K, ~$ X( J
  37.     break;
    2 f" e. T/ O. j' j% n/ C! S
  38. 0 G8 o9 N# ?) H, {6 D$ K7 [
  39.     default:
    8 J9 e" [9 L) u6 c/ F$ X
  40.     break;  2 h9 W* r6 E4 a* a4 J8 f
  41.   }    - \% Y6 W; `' }2 R: v1 s( A8 E
  42.   return bitstatus;$ M  a+ `. U5 S, F2 s% ^- M- u5 N" k
  43. }
复制代码
- _$ R0 X$ c7 f0 k
编译报错如下- P& d; }& J" p2 a8 s

  S7 p2 K- b8 {; [% i: Q; S- N
  1. ..\Libraries\STM32F30x_StdPeriph_Driver\src\stm32f30x_hrtim.c(1139): error:  #268: declaration may not appear after executable statement in block
复制代码
9 P7 _  L# _2 q
修改方法:需要将 FlagStatus bitstatus = RESET; 这一段代码移动至 assert_param(IS_HRTIM_TIMERINDEX(TimerIdx));之前。
( G$ V4 M  e3 B/ s) E' O6 W1 D/ ~' P6 |+ F- B7 i/ E
即变量的定义要在语句之前。0 s7 }+ j9 y6 K- ^5 J. @

  G: x9 x' |  k, `; Z7 Y修改后的代码如下:
8 L% V' y9 i! }3 ?! Z. A* N+ Z. ^$ V5 ~
  1. FlagStatus HRTIM_GetFlagStatus(HRTIM_TypeDef * HRTIMx, uint32_t TimerIdx, uint32_t HRTIM_FLAG)
      a- a- I: G; t; W) M. l( T
  2. {
    ! U7 S; q8 a+ p. {# a, A; }, l
  3.         FlagStatus bitstatus = RESET;
    3 d' ^" b4 _$ l& G1 [! L
  4.         
    2 M* q0 ]# p3 s8 ~4 e4 @- G
  5.   assert_param(IS_HRTIM_TIMERINDEX(TimerIdx));  
    . f8 u/ b$ G# M5 Y) ~! l# v' X

  6. 0 \. I: H& L# z& B( O
  7.   switch(TimerIdx)( {7 Q( K' v; ~3 Z" Y& P
  8.   {
    % }+ ^4 \8 g% u  l$ W- }
  9.     case HRTIM_TIMERINDEX_MASTER:
    5 q9 \- g5 d/ @6 d# N0 b
  10.     {
    3 G, I  |, ~/ E7 p* F- _% q
  11.       if ((HRTIMx->HRTIM_MASTER.MISR & HRTIM_FLAG) != RESET)1 m" V" T2 g- e, m' I4 A  ?: T
  12.       {
    ) W, W- M# Y: _
  13.         bitstatus = SET;2 }1 t" l$ I$ h; r8 h
  14.       }
    5 m* S9 H# S% \. k2 @. L
  15.       else2 \( h' A( a; `" u" p9 v% _4 O# K
  16.       {
    1 L' X/ o2 R" ]9 U
  17.         bitstatus = RESET;% l: J+ x% O  Y. e) k# R2 N
  18.       }
    ' c1 E3 `" h+ L- I
  19.     }
    2 A* a; u' G- O/ o4 _
  20.     break;, k( {$ ^7 Q/ T5 l4 C0 `. d

  21. ( l# ?3 h  |1 ]5 Q! ?+ v% J- K. l
  22.     case HRTIM_TIMERINDEX_TIMER_A:; \- E1 a, X- D, D" |( U% o! B
  23.     case HRTIM_TIMERINDEX_TIMER_B:8 K2 c) f+ b9 p$ t8 n" i
  24.     case HRTIM_TIMERINDEX_TIMER_C:
    ) c' T& R- M) O& O3 O8 Z& L1 K
  25.     case HRTIM_TIMERINDEX_TIMER_D:
    $ D- s. U) ~% U& {
  26.     case HRTIM_TIMERINDEX_TIMER_E:
    " F# E& {: K% t
  27.     {
    5 }* O  \+ \! o
  28.       if ((HRTIMx->HRTIM_TIMERx[TimerIdx].TIMxISR & HRTIM_FLAG) != RESET). x; r6 M4 Z) V0 q- q* C3 a
  29.       {
    5 D8 s; g8 Q5 l, h, s3 c$ J* R# L2 n0 _
  30.         bitstatus = SET;
    2 C/ E( d- A! E& ]7 R3 N/ b' P  l$ g
  31.       }- h; ]8 f0 x3 I1 b- v0 r! P& X
  32.       else# b7 W3 M- q5 J& p( _2 ?
  33.       {
    1 g6 _% N# t$ r+ \; b" x* R7 Y
  34.         bitstatus = RESET;
    # J: ^8 H0 o% t( \0 ]2 J
  35.       }0 y. o# P2 K% A# b$ P
  36.     }! l/ h2 N5 g8 {7 z, |* g
  37.     break;7 G/ H2 Z8 v/ `2 F5 j
  38. 1 `2 @5 i5 G3 P: P8 ^
  39.     default:0 F+ [4 P8 ]3 l. S
  40.     break;  * [/ i! {2 G" ]5 w; T5 `
  41.   }    ; H+ m2 c2 ~1 F; P
  42.   return bitstatus;
    7 U/ Z% C) x- @8 E, [; u" W/ ?2 Z
  43. }' H3 G$ D& k! r5 S* P. j& B
  44.   J' K" s9 a# V: X+ ~: P# }1 W5 Y4 C
复制代码
( m$ R; ?3 }  I( t' e: A+ o
赞 收藏 评论0 发布时间:2021-12-6 10:20

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版