|
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! & U" r! U" _- A. r: O6 i 在 KEIL 调试时部分寄存器不显示数据; N& |2 ~& }2 O5 G/ \1 C 现象* W" i& {! V( b( z& x9 w 该问题是我在使用 STM32F103 调试时发现的。进入调试状态,观察某些外设的寄存器,发现有些寄存器不显示配置的值,而是始终显示 0。如下图:
为了验证该问题,我同时也尝试了 Keil uVision4 4.74,也是如此!但是在其他系列的 MCU(例如 STM32F2x) 中并没有发现该问题! 原因3 k- E" ?9 O: r8 o+ e- R 由于该问题仅仅出现在了 STM32F10 系列的 MCU中,所有严重怀疑是 Keil 和 该系列 MCU 配合不是很好导致的。但是一直没有找到具体原因!) j& N% A0 R2 z; v3 `$ u 有种感觉(或许就是),STM32F1 系列明显没有后续系列(例如 STM32F2x)用起来方便!" N$ v1 k) `3 m2 \$ i! {0 p5 f 7 k+ e' d. o* y / ~, {! t* w' R, o; D% O 解决方法 通过修改 KEIL 的配置,可以使用其他方式来查看寄存器的值。需要注意的是,原来的寄存器还是显示异常的。具体如下图:
" E0 {6 d! D1 z f/ u& M STM32F103 某些 IO 初始化后的参数配置不生效 现象 该问是我在使用 MCU 是 STM32F103RC,驱动库为 LL 库 的时候发现的。具体情况如下图:
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 解决方法 知道了原因解决就轻而易举了。为了防止更改驱动库带来的后续麻烦,我选择的是在初始化之后重新配置一下 Speed 这个参数。具体如下:
O2 q* i9 Q5 \& W 1 C9 G( u, [6 R, [; A7 R. f# i 8 X8 _9 r: j$ E( g4 d |
微信公众号
手机版