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

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

[复制链接]
STMCU-管管 发布时间:2020-11-16 14:43
STM32奇怪问题处理及驱动库 BUG 汇总(持续更新中)
: V* k$ P) m6 N6 e$ p$ A- g
) D( p: Q* a8 M  _8 ]
在使用 STM32 的 MCU 开发过程中,难免遇到各种各样的奇葩问题。或许是开发环境的问题,或许是 MCU 使用的问题,也或许是驱动库的 BUG 等等。这些问题可能不局限于某一种具体型号的 MCU,特此把遇到的问题记录一下!  x% W. _2 {5 f& L( j0 m/ u1 X
3 D3 c0 @# Q4 F' I' v! _5 J
8 w7 K/ R" W7 h' P8 h3 v
注意,如果没有特殊说明,默认的开发环境为 Win10 Pro 20H2 ,Keil uVision5 5.32!
, B9 v7 w- E, R4 B; O6 L: f: \1 j& U" r! U" _- A. r: O6 i

# W. t% `2 }4 T; F: o  {( N3 J在 KEIL 调试时部分寄存器不显示数据; N& |2 ~& }2 O5 G/ \1 C
现象* W" i& {! V( b( z& x9 w
该问题是我在使用 STM32F103 调试时发现的。进入调试状态,观察某些外设的寄存器,发现有些寄存器不显示配置的值,而是始终显示 0。如下图:
; S+ b$ _* F$ x8 ~% |2 S8 k
11.png
问题; P  ], w# V: f$ z7 M* M5 h1 F
为了验证该问题,我同时也尝试了 Keil uVision4 4.74,也是如此!但是在其他系列的 MCU(例如 STM32F2x) 中并没有发现该问题!
' I* r6 I6 E3 V$ \  \8 t3 C
) {9 B4 k. q5 X9 @7 T4 {

# H0 u0 g  N# I+ [+ q: s) t+ K原因3 k- E" ?9 O: r8 o+ e- R
由于该问题仅仅出现在了 STM32F10 系列的 MCU中,所有严重怀疑是 Keil 和 该系列 MCU 配合不是很好导致的。但是一直没有找到具体原因!) j& N% A0 R2 z; v3 `$ u

8 ]: i& W- S2 n0 D- d  V/ B, t$ ~有种感觉(或许就是),STM32F1 系列明显没有后续系列(例如 STM32F2x)用起来方便!" N$ v1 k) `3 m2 \$ i! {0 p5 f
7 k+ e' d. o* y
/ ~, {! t* w' R, o; D% O
解决方法
8 H* X! J6 O0 I通过修改 KEIL 的配置,可以使用其他方式来查看寄存器的值。需要注意的是,原来的寄存器还是显示异常的。具体如下图:
, S: E7 r$ H( h6 |- `/ H+ O
12.png

8 f* L6 l4 y  ~" e
" E0 {6 d! D1 z  f/ u& M
STM32F103 某些 IO 初始化后的参数配置不生效
. Z0 D/ [# W$ n& G& K# W7 z现象
. a1 l. Y# L1 Z& T该问是我在使用 MCU 是 STM32F103RC,驱动库为 LL 库 的时候发现的。具体情况如下图:
$ \, D) S# `% S2 e: q- ?
13.png
' r4 f1 E- x( O+ R2 |' k+ w
2 I+ D0 f7 i/ N4 y3 q. T
原因3 \, Q+ w. r$ j3 C% p; c
经过调试,这里是函数 LL_GPIO_Init 中的 BUG,在设置其他参数时,会把以上已经设置过的值异常更改!具体如下图:% e$ c3 Z! V% ]# j) M7 f0 d6 V  a; i2 z
经过测试,使用标准外设库不会有此问题!HAL 库暂未验证!( @# v2 Z  K* X

, ]# S) A  l7 l; t' I7 b0 L解决方法
  E0 @- L9 W6 s9 c! \) y; {. a知道了原因解决就轻而易举了。为了防止更改驱动库带来的后续麻烦,我选择的是在初始化之后重新配置一下 Speed 这个参数。具体如下:
6 c" F- q' I$ m6 q
  1. /* 时钟 */* A& P5 _5 |3 M  J
  2. USART1_GPIO_CLK_ENABLE();1 B: N8 M( k, A
  3. /* 引脚 */* N0 u  ]; c* f
  4. LL_GPIO_Struct.Pin = USART1_TX_PIN;
    5 `0 j9 J5 V& E, F1 t8 v
  5. LL_GPIO_Init(USART1_TX_GPIOx, &LL_GPIO_Struct);
    1 a7 n# L9 w5 y* V
  6. /* !!!处理 LL库 的一个 BUG,导致 上面的参数 LL_GPIO_Struct.Speed 无法被正确设置!!! */8 i0 x) Z# [6 Z; Y7 Y8 k
  7. /* !!!具体可调试 LL_GPIO_Init 中 的设置模式函数 LL_GPIO_SetPinMode!!! */
    5 T) R" y' {, S7 @4 a
  8. LL_GPIO_SetPinSpeed(USART1_TX_GPIOx, USART1_TX_PIN, LL_GPIO_SPEED_FREQ_HIGH);
    + n9 x2 D3 w* S4 }
  9. LL_GPIO_Struct.Mode = LL_GPIO_MODE_FLOATING;
    * C' k8 X7 }5 s4 S/ o4 d2 ~) c
  10. LL_GPIO_Struct.Pin = USART1_RX_PIN;
    3 C0 l9 @4 y) A  K- N
  11. LL_GPIO_Init(USART1_TX_GPIOx, &LL_GPIO_Struct);
复制代码
5 N; q2 h; k, w) l5 t
  O2 q* i9 Q5 \& W

0 X( Y; C2 s, g; K1 C9 G( u, [6 R, [; A7 R. f# i
8 X8 _9 r: j$ E( g4 d

6 `6 H' ~) u/ _/ }& J0 F& ?
14.png
赞 收藏 1 评论0 发布时间:2020-11-16 14:43

举报

0个回答

所属标签

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