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

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

[复制链接]
STMCU-管管 发布时间:2020-11-16 14:43
STM32奇怪问题处理及驱动库 BUG 汇总(持续更新中)

4 I7 `) z: ]% ?: x* G

, b: N  m0 `& E8 m9 i2 V) T在使用 STM32 的 MCU 开发过程中,难免遇到各种各样的奇葩问题。或许是开发环境的问题,或许是 MCU 使用的问题,也或许是驱动库的 BUG 等等。这些问题可能不局限于某一种具体型号的 MCU,特此把遇到的问题记录一下!
# n+ \# L/ r9 [; G+ d! v* C4 D6 |
9 {" ]; Z$ R1 p. V% c6 @

8 O0 F  [9 R% |注意,如果没有特殊说明,默认的开发环境为 Win10 Pro 20H2 ,Keil uVision5 5.32!4 C9 A" C1 C& Y$ E# a
- z  M) `1 N/ g! Z" u9 n" X( ^
8 S/ g" H9 F4 x) O; v# W
在 KEIL 调试时部分寄存器不显示数据6 V) b6 q6 {  D, l2 R9 `
现象
) Z4 ?; W; J& i8 F$ g该问题是我在使用 STM32F103 调试时发现的。进入调试状态,观察某些外设的寄存器,发现有些寄存器不显示配置的值,而是始终显示 0。如下图:8 i, [, L; v8 B! W" u
11.png
问题
6 t/ u; c8 c) d: v% K, A! B4 }为了验证该问题,我同时也尝试了 Keil uVision4 4.74,也是如此!但是在其他系列的 MCU(例如 STM32F2x) 中并没有发现该问题!
6 Z  ~) i# A9 D; I- c! t
) g  b& Z2 t- w: }/ ]6 ^& a

( o6 Z# `# n  L+ T# d8 u. Z原因
; C1 u. q2 Z# l& Q( ^$ Y  b" e& Y$ l由于该问题仅仅出现在了 STM32F10 系列的 MCU中,所有严重怀疑是 Keil 和 该系列 MCU 配合不是很好导致的。但是一直没有找到具体原因!+ v' |2 `0 A  b1 q" Z6 i
+ l$ @( g9 `0 R: ~
有种感觉(或许就是),STM32F1 系列明显没有后续系列(例如 STM32F2x)用起来方便!; W+ @  S: L+ }( C. I
, m! R6 l- V/ Y0 ^, b0 D6 S
. S; k9 X7 |' o" l- H
解决方法
' t, f$ a% e# }9 }) _4 q通过修改 KEIL 的配置,可以使用其他方式来查看寄存器的值。需要注意的是,原来的寄存器还是显示异常的。具体如下图:
  D5 Z! {! G0 g# n& a
12.png

. M1 [! h( ]$ a; c1 \
3 k0 w7 P/ p; U9 ^
STM32F103 某些 IO 初始化后的参数配置不生效; Z& [* t8 C8 y, I
现象, b! s5 c- Y0 Y/ ^) ^8 X
该问是我在使用 MCU 是 STM32F103RC,驱动库为 LL 库 的时候发现的。具体情况如下图:
, N) T* n- h, g( a6 @
13.png
; `+ s, Z. ]) ?4 ^  c

8 f+ v; c: o* Q5 e8 x" U0 ~' H, T原因# c. S1 S, X, `' o* m3 l3 P* \8 \
经过调试,这里是函数 LL_GPIO_Init 中的 BUG,在设置其他参数时,会把以上已经设置过的值异常更改!具体如下图:5 m+ [. ?7 m7 q; _' z1 V
经过测试,使用标准外设库不会有此问题!HAL 库暂未验证!
/ j4 G4 y' W% n7 K" \  ~- U. c' W( s* s  b7 {9 w
解决方法1 _" l/ V; U  T/ u
知道了原因解决就轻而易举了。为了防止更改驱动库带来的后续麻烦,我选择的是在初始化之后重新配置一下 Speed 这个参数。具体如下:2 J* H* }" T4 z2 X8 b6 B: f
  1. /* 时钟 */
    # ~; h2 o) y. |) W) G  q. Y4 f
  2. USART1_GPIO_CLK_ENABLE();
    0 ?, L8 E3 f3 j% j. h) O' I
  3. /* 引脚 */
    / L( i' y3 S! G7 }9 o$ t! V/ s
  4. LL_GPIO_Struct.Pin = USART1_TX_PIN;) D8 q/ n( |$ a0 y
  5. LL_GPIO_Init(USART1_TX_GPIOx, &LL_GPIO_Struct);! @: {- Q7 }+ a, R# o
  6. /* !!!处理 LL库 的一个 BUG,导致 上面的参数 LL_GPIO_Struct.Speed 无法被正确设置!!! *// W! {/ J: m1 Y8 V# g/ G+ W1 I( V, E4 W
  7. /* !!!具体可调试 LL_GPIO_Init 中 的设置模式函数 LL_GPIO_SetPinMode!!! */
    : e" f" o! S/ w0 K' j7 w. F$ G  z
  8. LL_GPIO_SetPinSpeed(USART1_TX_GPIOx, USART1_TX_PIN, LL_GPIO_SPEED_FREQ_HIGH);
    8 B4 S6 u. ~8 p6 t. ?9 ^
  9. LL_GPIO_Struct.Mode = LL_GPIO_MODE_FLOATING;
    / f! P' m5 e" q1 J7 z
  10. LL_GPIO_Struct.Pin = USART1_RX_PIN;9 m. _+ r$ S1 V# L( @* A
  11. LL_GPIO_Init(USART1_TX_GPIOx, &LL_GPIO_Struct);
复制代码

* @' J6 _- I0 P  P+ R; x+ E- |8 B9 A: z3 n! V) t% u/ s1 H3 K) @. c/ h5 ?

. r8 x' ]8 c4 j3 z/ O; v' p2 T" o0 F
$ ]6 e" Q, `' B3 R( V7 P# [5 B9 i
, w" I1 j' C# N5 K

% D, _3 U: y  i0 Q$ R% s5 F
14.png
收藏 1 评论0 发布时间:2020-11-16 14:43

举报

0个回答

所属标签

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