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

STM32奇怪问题处理及驱动库 BUG 汇总(持续更新中)

[复制链接]
STMCU-管管 发布时间:2020-11-16 14:43
STM32奇怪问题处理及驱动库 BUG 汇总(持续更新中)
7 l$ u/ m& h; A* q" e1 k
. x  ]( ]% ~& Z; ]- ?
在使用 STM32 的 MCU 开发过程中,难免遇到各种各样的奇葩问题。或许是开发环境的问题,或许是 MCU 使用的问题,也或许是驱动库的 BUG 等等。这些问题可能不局限于某一种具体型号的 MCU,特此把遇到的问题记录一下!! r! l" ]5 a  u, Z# c# X

8 T, B( }- u7 }
) |  ?: f8 C! |; r& B
注意,如果没有特殊说明,默认的开发环境为 Win10 Pro 20H2 ,Keil uVision5 5.32!" C/ V# S; k: S3 p0 K5 i

0 f7 r* _1 t& p. Q/ v5 Q

2 S6 ^0 z2 q. i2 ?& w7 @( o  {; Z7 `在 KEIL 调试时部分寄存器不显示数据
; K' H7 c$ d4 U4 o) _* b现象/ Y7 ~8 R' q8 m
该问题是我在使用 STM32F103 调试时发现的。进入调试状态,观察某些外设的寄存器,发现有些寄存器不显示配置的值,而是始终显示 0。如下图:  n( p% D" ?1 a5 ^6 J  \9 l
11.png
问题  d  s- Q% _  j* M
为了验证该问题,我同时也尝试了 Keil uVision4 4.74,也是如此!但是在其他系列的 MCU(例如 STM32F2x) 中并没有发现该问题!  b6 X/ A$ K7 h% E( i

; }: o4 d: N" Y! Y; H& |$ o& z2 s
4 b9 q7 C3 P( j4 B
原因& m  ?8 s8 G( F( h6 f7 k
由于该问题仅仅出现在了 STM32F10 系列的 MCU中,所有严重怀疑是 Keil 和 该系列 MCU 配合不是很好导致的。但是一直没有找到具体原因!+ L7 c0 T3 s7 ]- _- H4 H& P3 g0 ?# [
0 ]% `! u' V" Y7 y  j# b
有种感觉(或许就是),STM32F1 系列明显没有后续系列(例如 STM32F2x)用起来方便!
4 Z! W. @/ U" Q  R, b
/ \: D3 T" j, m

5 n, V5 B  y/ x/ q( F& l8 X解决方法. }9 J; K$ _' i
通过修改 KEIL 的配置,可以使用其他方式来查看寄存器的值。需要注意的是,原来的寄存器还是显示异常的。具体如下图:
9 i2 X+ i: c7 u' G7 O5 H3 y' K
12.png

& p$ `8 }+ Y2 r" u8 y1 F. p

1 E* F' I5 L0 V3 r; M# {STM32F103 某些 IO 初始化后的参数配置不生效
, c* c  r6 R0 \0 M+ H现象1 V! Z! P+ ]! }5 B" D3 T
该问是我在使用 MCU 是 STM32F103RC,驱动库为 LL 库 的时候发现的。具体情况如下图:' ^7 }$ M. R, t1 Y
13.png

1 Q6 X% k. U7 t  [/ h

+ ~: S( [( W; P( _, j1 @3 ^原因
  r! e4 D5 z& B经过调试,这里是函数 LL_GPIO_Init 中的 BUG,在设置其他参数时,会把以上已经设置过的值异常更改!具体如下图:
4 c$ c0 z. x  d
经过测试,使用标准外设库不会有此问题!HAL 库暂未验证!  s6 h) j( n( a4 R4 z9 t
6 w8 ~* s& t1 S) j; A
解决方法6 [& _6 V4 H6 z8 Q
知道了原因解决就轻而易举了。为了防止更改驱动库带来的后续麻烦,我选择的是在初始化之后重新配置一下 Speed 这个参数。具体如下:
( ?2 ~% U3 K; u  W- h2 J7 p
  1. /* 时钟 */
      ?! A- w* j1 }; z1 }( {  [
  2. USART1_GPIO_CLK_ENABLE();7 S/ V5 ^  t! J( }1 o
  3. /* 引脚 */
    * j! `: k9 j8 d1 g- f9 w* x  V; U
  4. LL_GPIO_Struct.Pin = USART1_TX_PIN;
    8 p+ ?$ [2 t  }8 d! H4 {' }
  5. LL_GPIO_Init(USART1_TX_GPIOx, &LL_GPIO_Struct);- h. a8 ^0 j) a! f3 M4 i
  6. /* !!!处理 LL库 的一个 BUG,导致 上面的参数 LL_GPIO_Struct.Speed 无法被正确设置!!! */" a6 E3 Y/ e1 K
  7. /* !!!具体可调试 LL_GPIO_Init 中 的设置模式函数 LL_GPIO_SetPinMode!!! */1 L( E- F# l3 G( }! w( e# j
  8. LL_GPIO_SetPinSpeed(USART1_TX_GPIOx, USART1_TX_PIN, LL_GPIO_SPEED_FREQ_HIGH);
    ' ?% a  d' h3 |: e, d9 r8 ]' n/ f
  9. LL_GPIO_Struct.Mode = LL_GPIO_MODE_FLOATING;
    5 s) n% Z, Q+ S9 l% v9 Q: P4 P
  10. LL_GPIO_Struct.Pin = USART1_RX_PIN;
    4 Q8 z/ }; v) `' h; {: a
  11. LL_GPIO_Init(USART1_TX_GPIOx, &LL_GPIO_Struct);
复制代码
% Q& K8 I2 j, ~2 Q! J2 k

) Z! J5 @  {$ H' a7 k$ |

2 X% U( D1 f- i0 b' r; p  R5 A2 s' S9 w6 y! Z$ z7 b
' p* u6 t+ O0 _2 l

; s5 Z' }' I  c7 k0 k5 w
14.png
赞 收藏 1 评论0 发布时间:2020-11-16 14:43

举报

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