
一、专栏简介 本专栏介绍如何利用库函数进行STM32单片机开发,主要针对的单片机型号为STM32F103ZET6。总结来说,“速成”体现在以下方面) \0 i e' h) Q% C9 S3 ~9 [$ x • 在讲述基础知识后会有相应的实例或者模板程序 y- X6 m+ g5 c( ~, z* d- l • 学习完后会有小项目练习% O; G0 e, W& T; C • 专栏基础知识部分内容精简,对于“速成”选手更加友好2 ?& |9 K+ G! q2 U, A) Q& E 其次专栏还有以下内容 • 简单介绍编程规范和程序架构$ _5 `% y# M( K$ r% I2 W • 专栏不断更新一些外设的使用方法并提供例程6 M/ W( I3 w( {. w$ f 二、前期准备3 \: P' @3 I) P1 r5 Y 前期准备主要有物品以及相关软件的准备。首先是物品,单片机选用的是普中科技的一款核心板,主控芯片为STM32F102ZET6,是下面的样子6 p8 a3 X/ f, H# ? t ![]() STM32F103ZET6 # Q/ g( B* }+ m0 U+ u 4 ^4 ~6 R; E4 R' x; b 图片上是带有LCD屏幕排母的,有一种是不带的,因为本人开发时经常使用LCD,所以买了带排母的,在某宝和聚诚科技购买的,不带彩屏169RMB。学习过程中除了单片机以外还需要购买调试器,ST-LINK,用来下载程序和调试。USB转TTL(可以直接搜索TTL),用来做串口通信时使用,也可以用来下载程序,但是不可以调试。对于前期学习来讲,这些物品就足够啦。% L7 k% U: E0 w& a8 l 8 }$ h# a8 `3 H) Q! u 除了物品之外还需要提前准备一些软件和驱动。比如Keil5,CH340(串口驱动),ST-LINK的驱动,这些都是需要安装的。其他的类似于下载软件,串口调试助手都是不需要安装的,本人用的是普中科技提供的一些常用辅助开发软件,小伙伴们可以自己动手找一下,没有找到的话私信留一下邮箱,注明需要常用辅助开发软件,后续会邮件发送。# K0 i' K V& s 5 V' c! }. m: B) P; R 三、编程规范以及程序架构简介" W' J" i- r+ r, n) X( z4 Q 1. 编程规范2 T1 P- y) z V6 { 对于新手来讲,编程规范以及代码架构也非常重要,有一个良好的编程规范和代码架构,可以提高开发效率,方便问题排查以及后续的程序维护。这里介绍的编程规范很简单,要求不严格。主要有以下几点 • 变量定义 变量定义时最好是能够体现该变量所属的外设模块,该变量是否为全局变量,静态变量或者指针变量。变量首字母小写,后面的单词首字母大写。举例如下 : I' \+ w8 r$ s; N
• 注释 函数注释举例如下 S4 O% E/ @( [1 l0 O ~
: e% B' g f; L# Q8 j5 I" D 对于程序语句注释,如果过长可以在程序上方加注释,如果不是很长可以在程序语句后面空三格输入注释。- u" B' X! g8 X$ ^' F. P6 d' z • 函数命名 函数命名要体现函数所属的层级以及函数的功能,关于层级会在代码架构的部分详细说明,这里只说一下函数命名方式。2 E& P9 r( r' V; R! X
7 t- y* W0 Z* p; G 这里med指示该函数位于功能层,属于ADC模块,作用是读取AD值。( {' z) V, h. D2 M. J / I% R; ~& J4 Y* S- e7 _% Y" n % D* ]( _: g* p- ` • if,while等语句的使用 使用if或者while等语句时,需要在括号前面加一个空格,如下, n. ~1 _7 k( v$ n% U
• 四则运算 四则运算符号前后需要加空格,包括等于号等符号。如下1 a2 R. D! ~" P9 J$ c( m
2. 程序架构 该程序架构是本人在工作期间学习的,个人感觉还是有助于提高开发效率,方便后续维护的。主要思想是将一个模块的程序分成三部分,每一部分是一个新建的文件夹,下面都是其他模块相同层级的文件。 4 Z2 ]* ]. |' S: T' g • Drv 驱动层 该层主要是写一些模块的初始化程序,例如GPIO的初始化,ADC的初始化等。 • Med 功能层 该层主要是完成一些功能性的操作,比如读取AD值,点亮LED等。Med层的函数可以包含Drv层的函数。( `3 G1 a Q: p! u6 J, U4 Y+ n' u+ ~' p • App 业务层 该层主要是完成一些业务,比如在点亮LED的基础上实现流水灯,比如显示电压值等。 四、STM32F103ZET6简介 STM32F103ZET6是由意法半导体(ST)生产的一款单片机,32指32位。STM32也可以成为32位微处理器。STM32F103ZET6的主时钟频率为72MHz,512KB的FLASH,64KB的SRAM。常用到的有GPIO,中断,ADC,TMR,UART,DMA等。 ]; u9 e1 @ e: H$ a+ W& Z5 k0 p6 D 4 I7 N4 q% F n7 R 五、程序模板 在使用Keil5编程时,针对一个外设需要新建对应的.c和.h文件。这里以LED模块为例,简单介绍一下本人的常用模板 .c文件4 o# w7 S' N/ m9 r
需要注意的是一定要空出来一格,否则编译会报警告。 9 o- |4 {* N E& g' Q 3 z7 a8 H! s j5 } ![]() 文件最后未空一行的警告 8 D8 C( N" Z( s# U: d.h文件- Q8 r( r5 h, W
; G Q! a0 ~% F1 w, A) [ .h文件最后也要空出一行,否则也会有警告。1 k' O$ M1 V0 W- u 0 l0 }. Z/ | K8 y2 @: F/ [' e 新建完之后需要将这两个文件添加到工程中。 + z5 r5 h) `: G- N3 q 对于.c文件,右键工程文件夹,选择“Manage Project Items”打开。' W* Y) i4 p& u5 _' d 7 \8 o- `* h- Y6 i: D 点击“Add Files”将新建的.c文件加入到对应的文件夹下。; [9 ]& Q8 _$ m' z3 y' B4 S ! M3 `: e4 E5 I) q$ g ![]() 添加.c文件 ) ?. P! P5 R, i) I l8 K3 e& M+ q0 z8 n4 Y2 X 对于.h文件,点击魔术棒,选择“C/C++”,点击三个小点选择对应文件夹即可。% o* a$ P" q0 T6 C+ B$ C 5 j* T1 O, {3 ^4 d1 X ![]() 添加.h文件 - m/ q9 ^1 e% D- w1 e D; R ~. ^, v 六、ST-Link调试 在开发过程中学会使用Debug调试,能够帮助我们更快地定位问题。这里简单介绍一下利用ST-Link和普中核心板Debug调试方法。, {/ G: K p5 H 3 v& Q" ]0 O- Y) t7 w : K3 U" Q# g* @0 t; y" p8 ^ 6.1 硬件连接& f0 Q9 F( G; l: O" K" h* @: M 首先将ST-Link与核心板连接起来,ST-Link的引脚如下 ; p+ z" X% ]! ?, U ![]() ST-Link引脚 o6 |% `1 X& k' V: U6 \8 Q) _" Z# P, U 核心板上并没有给ST-Link预留单独的接口,而是跟JTAG一起。 , F. S4 K( P6 V6 k. u% F 其原理图和硬件图如下 , l8 K4 s" }7 O$ ` q+ H $ B; j9 Z) S1 ~# s0 ` ![]() . ?/ ]3 N- F1 t4 V JTAG原理图. s$ J# w3 u; w& i ![]() JTAG硬件图 由原理图可知,ST-Link的“SWCLK”连接核心板的“JTCK”,“SWDIO”连接核心板的“JTMS”,“RST”接“RESET”。 VCC不要接,接好ST-Link后再单独给核心板供电。, w+ U& h8 H' \5 G. H 6.2 Keil配置7 @3 A6 G0 }# u* F7 |' s 硬件连接好后开始配置Keil5,关于ST-Link驱动的安装这里就不再做介绍了。 + N( I6 s' H$ Y# V • 首先确定ST-Link驱动是否正常6 }0 G4 M( b2 t2 ~, K # F0 [- A9 C7 I. p8 e ![]() 确认ST-Link驱动是否安装正常 : j2 B: `9 l! @ V& f# J" I• 配置Debug 点击魔术棒,选择Debug,下图处选择“ST-Link Debugger”。 ![]() Debug配置 ; w- O& F, E8 x$ G! l- r) B; T 然后再点击“Settings”,在“SWIO”右侧不显示“no target connected”就说明ST-Link连接正常。点击“Flash Download” J3 F' O. N3 |9 h9 X& D) ?5 [ 6 V1 b$ R# y0 n) \& t; H/ E ![]() Flash Download k- P" f a+ F5 w! D; z( {3 |- Y! ?$ p$ A7 o3 g- L. q ; ~7 E) p# O: {' ]- z 按照图示配置,“Programming Algorithm”只要选择符合芯片型号的即可,需要注意的是,只能保留一个。9 ^9 _# s9 H* b& u 8 K* U! E1 k* n2 G T5 q4 b ![]() Flash Download配置 " V% a. X ^" s7 g2 {( _/ g2 Q 按照下图配置“Utilities”。" v+ r2 C4 V# |) l 7 ]$ L _) C# j+ T ![]() 配置Utilities 8 i* h; v& _3 [# `+ A: B. G4 H7 d9 F+ a+ x7 }& w ( `8 z- h4 B& \% r 至此,Keil5关于ST-Link的内容配置完成,如果小伙伴遇到其他问题,可以多去看一些大佬们的博客。% u# t+ G3 y* k8 h n9 _* f- J9 w8 e( y 6.3 下载调试" o' ^- _. k6 l! k5 `1 v3 L 配置完上面的内容后就可以使用ST-Link进行下载调试了。下载的话比较简单,编译完成后直接点击下图标注的图标,等到下载完成即可。- {' ~/ h7 T3 ?5 n 4 ^* ~0 ?! b+ n5 L ![]() 下载程序 $ O [: l( ~# h1 L' ^: f7 v* E. e9 k3 ~* h4 V- k ) B; n1 X1 e/ m' i- W 调试时点击下图所示按钮,进入Debug调试。! T6 t& z. ~& S, k+ ]! Y+ J4 \' ` ; A2 N$ f. T9 l# C) g5 o $ U& r/ @8 f* G( ^9 X7 Q ![]() 调试按钮 0 ?% o Z3 h* q0 y% u ~8 t F 下面简单介绍一下调试窗口中各个按钮的作用,其他更加详细的介绍需要小伙伴自行搜索,这里参考了这篇大佬的文章KEIL5中Debug调试。3 @) B6 U: a' ?8 R' g: g z) Q3 T+ C; O7 _4 V ![]() 调试窗口按钮含义 第一部分从左到右: T0 h) B2 F3 I _, u • 复位 • 全速运行 • 停止 • 每点一次运行一行,遇到函数体会进入 • 每点一次运行一行,遇到函数体不进入,直接执行完到下一行: x2 Q5 T+ ?0 F3 k4 y& C6 n • 快速执行当前函数剩余语句,然后跳出该函数体,准备执行下一条 • 直接运行到光标处 第二部分从左到右 • 设置当前光标处为断点 • 失能当前光标处断点& C5 K6 M6 E; X! v" t8 Q- e$ Y2 m • 失能全部断点4 o& e# ?+ D: Q9 e • 删除全部断点 0 L% H1 W% t }+ `* J4 u5 G# R, y 打断点的方法比较简单,直接在想要打断点的一行左侧点击一下,出现一个红点就表示已经添加了断点。断点的作用是能够让程序运行到断点处停止,有助于我们分析函数运行方式以及变量的变化。- Q0 a$ K7 Q9 {4 }9 C& b , s* T# b$ u9 I: J# F. {) h M# N) W2 x7 \ M- e ![]() 断点示意图 " q& A3 z& V$ L, i% S, I1 K. R) D: J3 h0 }6 |5 S, a' H 调试时可以查看某一个变量的值。选中想要查看的变量,右键 ![]() 查看变量值 9 h* Q% U* O! s, t6 z/ V" D, c3 I # r8 Q* v0 `! i* L此时就会出现一个窗口,能够查看该变量的值。 * o& E3 G$ E3 J) E7 s% L4 B. J* S ![]() 查看变量值 . i0 a' P: o' A9 C4 C$ v转载自: 二土电子* S* w6 \. i; o" d1 c 如有侵权请联系删除 |