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

STM32调试小结

[复制链接]
aimejia 发布时间:2018-5-22 16:01
      花费一个月时间玩了一下STM32,因工作原因好几年没有编程了。鉴于工作需要学习了一下STM32固件库的编程,针对一个月的重拾编程以及程序调试工作进行总结。
9 V+ A& }  Y  \3 X# l2 K5 w# n( _0 a! v7 _  Z0 m. o$ z/ K% b: y) ?
       STM32开发优点:
  Z3 N% Y0 \0 L* T7 A8 D( N2 i2 [9 b  Z" M, Q' J( c& ]5 X0 w
       1.固件库大大简化开发难度,提高编程效率;
6 |7 |5 f" E9 u) ~. @8 s# Y) j; ^, o. C- R
       2.固件库中各种外设程序范例详实,可以直接拿来使用;
2 K) [6 `6 w* Z; R
& }- N! c: L8 `* f2 T9 M7 e; Z       3.仿真器便宜,淘宝上几十元就可以搞定。本人使用以前BLE电路上的J-LINK盗版仿真器,
5 R1 Q" a6 X* O. Q1 h9 }3 y3 |4 t& T7 r8 K* w
注意该版本仿真器驱动一定要注意版本。
& I2 x/ H6 m7 z$ Q0 W4 L6 D: @" @" o% ?" `& x8 g. ?9 R8 [+ C( D
       当时安装驱动程序搞了一下午都连接不上,使用J-LINK V6.12J才搞定。一定要注意驱动
! r+ f9 d' B3 d; |& a  x, ]: c0 G" S5 B
版本不能太新,最好不要超过v6.14版本。
8 b2 y8 Q, x+ s: C
" L4 m- D* ^/ v5 f1 K; d) C       缺点:6 ^2 l5 |- c7 D4 I8 k0 H8 W& v6 K
1 k' \7 |' F0 ^3 m$ w) B3 }
       1.几种工作模式切换较慢,特别是从停机模式切换到运行模式时(使用片外晶振模式)
) v) O8 Y: m4 `* x
$ T$ Z3 Q" q/ K) h3 I% U的时间需要2ms到3ms,这种速度特别是和蓝牙模组配合起来时,若接收蓝牙数据反映特别慢。& e$ `9 a( u, ?. o! p- J

. D) L6 T7 p* c8 @       2.IC内部各种外设通道已经固定分配好,不能想其他BLE IC进行灵活分配。如在调试2 m1 ~, w3 H$ q3 T4 i

/ U" Y8 k! v# Y: a' H/ ~. ADMA传输I2C数据时使用固件中程序出现一堆的问题,调试过程中才发现原来自己将DMA通9 N. T; A( o9 h( C! E, R

: x/ A0 _3 D! B4 n: B/ U道修改了。STM32的DMA通道都是已经分配好的,不像其他SOC可以灵活分配。如下图所示:
2 S7 r6 }5 _$ }* V, T, w4 q' ?
2 Y8 u8 \6 R7 K7 O3 U  H% V  C
1.png

; J. Z& d1 i, {, p; D( e( \       如上所示I2C_TX和I2C_RX已固定分配为DMA1中的6和7通道。纠其原因是自己懒得看参考手册。5 x; ~9 f, {2 m- F  C
* t! b! v& d$ B* l/ U
       编程以及调试总结:
4 c2 R# a2 z% T- _8 [! O3 m, L
9 c' c8 j8 H9 P2 N       1.在多中断时处理原则为关键性或小概率(如数据传递处理等)出现的中断设置为
! u4 `, z2 v- z5 G' L) C$ l
4 d4 E0 h5 }8 N0 V* P. Z. d8 r高中断等级,对非关键性或大概率(如定时器或RTC中断)中断设置为低中断等级。
( f* M7 L0 y. `0 B2 ]2 F$ e/ k0 m7 b8 o5 l1 E: j( }- L
       2.程序的调试过程是很蛋疼的过程,秉持原则就是耐性追根溯源。要精读调试功能
5 r& ]* D( o; `
7 U+ y: D  P6 G: N所涉及到的芯片资料,需要仔细比较程序中相关变量或寄存器的值是否正确,这里调试5 _9 ~' R- z: Y# v$ m1 p
* |) _: t. f3 ]* b$ f
过程中软件的使用就非常重要了(不要再懒惰,不去看手册)。7 b% R1 x* a' ~3 A7 `) h

0 U3 l1 B/ S8 a" y0 B       3.keil mdk调试方法小结4 ^6 o/ A. l2 J" A" O% T+ B+ U5 T5 T! W9 g
& N+ W1 j# Y2 z& \# h
        ~逻辑分析仪的仿真(没有示波器时比较有用)  
( v+ E" R7 B0 W* t/ c5 X8 `: _* Z8 e, L
        a.设置为软件仿真。
) h8 K4 V; a4 d4 W: o6 K) d$ w2 S. i, o$ Z8 t: w  @" D9 W
2.png

4 A2 w( t" U( M0 y9 \5 B0 e$ l8 N8 V! k! h6 Z: P
        b.选择sybomls查看程序所涉及到的寄存器,或者是直接输入引脚如PORTB.0即可开始逻辑分析仪仿真。
; E1 }# i  }7 j+ {5 a* }, Y" C6 @! j
' _! m( U, f8 @, t
3.png
4.png
6 e5 g6 K. X4 @) Y+ t
0 w: G0 C) o8 v$ m1 t& k5 {        如上图所示中special function registers中有着所有功能设置标志位,将其将入逻辑分析仪即可开始仿真。9 F7 R6 y* j* k& c; J& e& [* c+ {
. `. b& D+ z7 \) d' D* |
       c.调试中最重要的模块,查看所有外设的寄存器功能值,依照此来进行调试即可。
: b$ h3 V% E) }1 m4 {  m
5.png
' S1 O/ {5 U, a; n. O% z
      d.调试过程中可以查看局部变量或全局变量的值,但有时需要查看某些指针对应的变量值,此时可以使用memory输入地址即可直接查看。% h9 y8 I7 a. M1 V3 z+ r

, j  y( r! E, x# ?
6.png
      附加备注:/ e# P) g* D6 ?7 S
% \' M/ p3 v% k& g4 P: k+ v# q4 q
7.png
      USE_STDPERIPH_DRIVER宏定义为使用固件库,在头文件中包含所有外设头文件。
3 t2 m8 f% S5 `0 {* |2 ?
- i  ^3 I9 r* p3 D# j      STM32F10X_MD宏定义为IC属于大容量器件类型。1 r2 _* p, Y; g& s
2 O0 r9 V( P# U- V

: ^' P1 U/ V1 k2 ^3 Q; I0 P  转载自荷兰风车
: [. b) F' \. q
" p9 |3 k" W2 L' H, |
赞 收藏 评论1 发布时间:2018-5-22 16:01

举报

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