|
花费一个月时间玩了一下STM32,因工作原因好几年没有编程了。鉴于工作需要学习了一下STM32固件库的编程,针对一个月的重拾编程以及程序调试工作进行总结。 7 _ Z0 m. o$ z/ K% b: y) ? STM32开发优点: 9 b Z" M, Q' J( c& ]5 X0 w 1.固件库大大简化开发难度,提高编程效率; ) j; ^, o. C- R 2.固件库中各种外设程序范例详实,可以直接拿来使用; 3.仿真器便宜,淘宝上几十元就可以搞定。本人使用以前BLE电路上的J-LINK盗版仿真器, 1 h9 }3 y3 |4 t& T7 r8 K* w 注意该版本仿真器驱动一定要注意版本。 " `& x8 g. ?9 R8 [+ C( D 当时安装驱动程序搞了一下午都连接不上,使用J-LINK V6.12J才搞定。一定要注意驱动 & a x, ]: c0 G" S5 B 版本不能太新,最好不要超过v6.14版本。 缺点:6 ^2 l5 |- c7 D4 I8 k0 H8 W& v6 K 1 k' \7 |' F0 ^3 m$ w) B3 } 1.几种工作模式切换较慢,特别是从停机模式切换到运行模式时(使用片外晶振模式) 的时间需要2ms到3ms,这种速度特别是和蓝牙模组配合起来时,若接收蓝牙数据反映特别慢。& e$ `9 a( u, ?. o! p- J 2.IC内部各种外设通道已经固定分配好,不能想其他BLE IC进行灵活分配。如在调试2 m1 ~, w3 H$ q3 T4 i DMA传输I2C数据时使用固件中程序出现一堆的问题,调试过程中才发现原来自己将DMA通9 N. T; A( o9 h( C! E, R 道修改了。STM32的DMA通道都是已经分配好的,不像其他SOC可以灵活分配。如下图所示:
如上所示I2C_TX和I2C_RX已固定分配为DMA1中的6和7通道。纠其原因是自己懒得看参考手册。5 x; ~9 f, {2 m- F C * t! b! v& d$ B* l/ U 编程以及调试总结: 1.在多中断时处理原则为关键性或小概率(如数据传递处理等)出现的中断设置为 高中断等级,对非关键性或大概率(如定时器或RTC中断)中断设置为低中断等级。 $ e/ k0 m7 b8 o5 l1 E: j( }- L 2.程序的调试过程是很蛋疼的过程,秉持原则就是耐性追根溯源。要精读调试功能 所涉及到的芯片资料,需要仔细比较程序中相关变量或寄存器的值是否正确,这里调试5 _9 ~' R- z: Y# v$ m1 p * |) _: t. f3 ]* b$ f 过程中软件的使用就非常重要了(不要再懒惰,不去看手册)。7 b% R1 x* a' ~3 A7 `) h 3.keil mdk调试方法小结4 ^6 o/ A. l2 J" A" O% T+ B+ U5 T5 T! W9 g & N+ W1 j# Y2 z& \# h ~逻辑分析仪的仿真(没有示波器时比较有用) 8 `: _* Z8 e, L a.设置为软件仿真。 2 S. i, o$ Z8 t: w @" D9 W
$ l8 N8 V! k! h6 Z: P b.选择sybomls查看程序所涉及到的寄存器,或者是直接输入引脚如PORTB.0即可开始逻辑分析仪仿真。
如上图所示中special function registers中有着所有功能设置标志位,将其将入逻辑分析仪即可开始仿真。9 F7 R6 y* j* k& c; J& e& [* c+ { . `. b& D+ z7 \) d' D* | c.调试中最重要的模块,查看所有外设的寄存器功能值,依照此来进行调试即可。
d.调试过程中可以查看局部变量或全局变量的值,但有时需要查看某些指针对应的变量值,此时可以使用memory输入地址即可直接查看。% h9 y8 I7 a. M1 V3 z+ r
% \' M/ p3 v% k& g4 P: k+ v# q4 q
STM32F10X_MD宏定义为IC属于大容量器件类型。1 r2 _* p, Y; g& s 2 O0 r9 V( P# U- V 转载自荷兰风车 |
| 写的不错 大神 |
微信公众号
手机版