|
一、专栏简介+ P# I R5 w `4 F9 f: _: ? 本专栏介绍如何利用库函数进行STM32单片机开发,主要针对的单片机型号为STM32F103ZET6。总结来说,“速成”体现在以下方面 j; S+ X; V3 x • 在讲述基础知识后会有相应的实例或者模板程序 • 学习完后会有小项目练习 • 专栏基础知识部分内容精简,对于“速成”选手更加友好4 U" P; E; s e# z- P2 t2 c ! g% m, ^$ e3 x# [ 其次专栏还有以下内容4 j- J6 s4 o6 j- | • 简单介绍编程规范和程序架构 • 专栏不断更新一些外设的使用方法并提供例程5 H) c( t# a$ Q/ p9 u 二、前期准备- u5 K. C; t& s, a, G( ~ 前期准备主要有物品以及相关软件的准备。首先是物品,单片机选用的是普中科技的一款核心板,主控芯片为STM32F102ZET6,是下面的样子( t. Z( |/ {" _$ l. {
STM32F103ZET6 6 @* m$ o# `. L9 K 图片上是带有LCD屏幕排母的,有一种是不带的,因为本人开发时经常使用LCD,所以买了带排母的,在某宝和聚诚科技购买的,不带彩屏169RMB。学习过程中除了单片机以外还需要购买调试器,ST-LINK,用来下载程序和调试。USB转TTL(可以直接搜索TTL),用来做串口通信时使用,也可以用来下载程序,但是不可以调试。对于前期学习来讲,这些物品就足够啦。$ ~# E5 |& O$ \" z8 r; J6 Y3 M 6 j7 s* G1 F8 h, A& A, V / h, Y3 ~# W4 `' \' p 除了物品之外还需要提前准备一些软件和驱动。比如Keil5,CH340(串口驱动),ST-LINK的驱动,这些都是需要安装的。其他的类似于下载软件,串口调试助手都是不需要安装的,本人用的是普中科技提供的一些常用辅助开发软件,小伙伴们可以自己动手找一下,没有找到的话私信留一下邮箱,注明需要常用辅助开发软件,后续会邮件发送。 # H# E/ m0 C, T. K' S 三、编程规范以及程序架构简介 1. 编程规范. b0 x/ L# H, L* ]9 J 对于新手来讲,编程规范以及代码架构也非常重要,有一个良好的编程规范和代码架构,可以提高开发效率,方便问题排查以及后续的程序维护。这里介绍的编程规范很简单,要求不严格。主要有以下几点 • 变量定义 变量定义时最好是能够体现该变量所属的外设模块,该变量是否为全局变量,静态变量或者指针变量。变量首字母小写,后面的单词首字母大写。举例如下 $ ~7 f j. o# x! B9 G7 K- {) g
H1 E. I9 R! @. L • 注释 函数注释举例如下
对于程序语句注释,如果过长可以在程序上方加注释,如果不是很长可以在程序语句后面空三格输入注释。5 V9 \( O) [- _& i' p, x: W 2 W9 o1 Y' M& j5 @- s • 函数命名 函数命名要体现函数所属的层级以及函数的功能,关于层级会在代码架构的部分详细说明,这里只说一下函数命名方式。
这里med指示该函数位于功能层,属于ADC模块,作用是读取AD值。 • if,while等语句的使用 使用if或者while等语句时,需要在括号前面加一个空格,如下5 _2 v& f5 D- K8 h1 l
• 四则运算 四则运算符号前后需要加空格,包括等于号等符号。如下
2. 程序架构% |4 f' P# G' n6 t4 e0 z4 Y 该程序架构是本人在工作期间学习的,个人感觉还是有助于提高开发效率,方便后续维护的。主要思想是将一个模块的程序分成三部分,每一部分是一个新建的文件夹,下面都是其他模块相同层级的文件。 # _+ z! m6 m; w/ q# [ • Drv 驱动层 该层主要是写一些模块的初始化程序,例如GPIO的初始化,ADC的初始化等。- {+ W' @6 Q: V& w4 s • Med 功能层 该层主要是完成一些功能性的操作,比如读取AD值,点亮LED等。Med层的函数可以包含Drv层的函数。 • App 业务层 该层主要是完成一些业务,比如在点亮LED的基础上实现流水灯,比如显示电压值等。' s7 `. Y# |- O1 { 四、STM32F103ZET6简介/ p. n. h& [, A1 X% N STM32F103ZET6是由意法半导体(ST)生产的一款单片机,32指32位。STM32也可以成为32位微处理器。STM32F103ZET6的主时钟频率为72MHz,512KB的FLASH,64KB的SRAM。常用到的有GPIO,中断,ADC,TMR,UART,DMA等。1 V6 b! s1 h9 }5 V# F4 n/ r. K 1 s1 v. D" n2 V' ?; f: l& | 五、程序模板! o* b# V- A2 g7 Z( j$ P 在使用Keil5编程时,针对一个外设需要新建对应的.c和.h文件。这里以LED模块为例,简单介绍一下本人的常用模板 ' l* `$ A( Q# D .c文件
' ^ B7 j* }- t( w! l" X$ P* F" s 需要注意的是一定要空出来一格,否则编译会报警告。 * J) [3 T$ l1 W6 B( e6 f % _8 f+ N0 w# h2 P8 r2 Z% ^
文件最后未空一行的警告 & s" w3 ]' M4 e7 m( B- d.h文件
5 k0 O# f; |+ o2 f .h文件最后也要空出一行,否则也会有警告。 ! d4 U% Y* V% u, H: e7 F 新建完之后需要将这两个文件添加到工程中。0 a5 _1 A; d* e ( B) Y( v' B# p8 X, U) M b. m: O( R m4 o+ A2 U4 ] ^4 _ 对于.c文件,右键工程文件夹,选择“Manage Project Items”打开。 2 w1 p$ A- ?) ~7 a9 r' d $ L0 x' W$ c: S! |) R 点击“Add Files”将新建的.c文件加入到对应的文件夹下。8 @% L [% i# D5 A7 S! S
添加.c文件 , S/ V6 z# r# U6 S 对于.h文件,点击魔术棒,选择“C/C++”,点击三个小点选择对应文件夹即可。" c/ h( C- [8 ]; C
添加.h文件 5 N# ], l& S' |& e2 c8 N* v9 k M, j " Q& r1 c, i& f- M 六、ST-Link调试# @& l3 z: P7 d. I7 i+ E 在开发过程中学会使用Debug调试,能够帮助我们更快地定位问题。这里简单介绍一下利用ST-Link和普中核心板Debug调试方法。 ; y7 |: u) w7 ~( P3 x3 p+ l! v 3 |5 t/ R" a% K 6.1 硬件连接( L" C+ B* I8 A 首先将ST-Link与核心板连接起来,ST-Link的引脚如下8 C- t4 _" x' ]6 y" Z* _8 H / _% h2 h- I6 G . M/ [1 Q7 m2 @1 `0 P
ST-Link引脚 0 @, j. i# [# e核心板上并没有给ST-Link预留单独的接口,而是跟JTAG一起。 ) b# d: Q3 C' `4 T3 }4 @+ `, o 其原理图和硬件图如下& L' Q- {! Y! y( e 9 O0 j) u& |% q% }" |- _( X 3 Q3 U; j. ~0 J# t
JTAG原理图+ t$ r. o; S8 a( q 6 W5 V* _5 c2 Y3 _3 A
JTAG硬件图 ( x w% _! x8 O 由原理图可知,ST-Link的“SWCLK”连接核心板的“JTCK”,“SWDIO”连接核心板的“JTMS”,“RST”接“RESET”。 4 I) R* c. c' e. T6 X9 g! J VCC不要接,接好ST-Link后再单独给核心板供电。' f j3 U7 u; F$ N; R7 c" r 5 i' E" m% i7 E; l * O0 ?7 s5 ~4 R4 o2 G/ f/ k' n 6.2 Keil配置 硬件连接好后开始配置Keil5,关于ST-Link驱动的安装这里就不再做介绍了。. u/ e1 h3 D: u- A" U- [. N • 首先确定ST-Link驱动是否正常$ H- o5 H, a% G4 n) V 2 v5 C4 H9 W# ` ! g8 m1 H& N+ u- Q$ h6 d
确认ST-Link驱动是否安装正常 + k& s* I1 P0 P* Q* d" |) c! G, d9 p1 }2 E • 配置Debug 点击魔术棒,选择Debug,下图处选择“ST-Link Debugger”。, k% m* S( G+ K6 `8 k5 F- e ( E1 ~( ?7 j1 G6 G& D 8 F+ |. d8 S+ N& B6 G4 z! L" w' Q
Debug配置 : o" O% W3 M; c: c. {7 b( m0 A, F. P 然后再点击“Settings”,在“SWIO”右侧不显示“no target connected”就说明ST-Link连接正常。点击“Flash Download”2 ]: F4 ~1 V9 o- E: h
Flash Download ! c1 H, O5 u/ O0 g" w& X & N8 q$ T: G6 H0 W& A 按照图示配置,“Programming Algorithm”只要选择符合芯片型号的即可,需要注意的是,只能保留一个。. O/ H9 r' Z& E" t1 H # q6 K0 S3 \% r. q* D" E 3 W% [: N, J8 X) T- c* J) ~, _
Flash Download配置 7 j1 i: |1 q: r$ {) C w) ?+ k2 N, k( T8 x5 G; k 按照下图配置“Utilities”。 5 V' T" r" N7 y0 {. r2 K - | c; Z- q+ {$ q T/ m
配置Utilities - ]6 S4 Q) j+ Z! F: g* Z8 R0 x) O" R 至此,Keil5关于ST-Link的内容配置完成,如果小伙伴遇到其他问题,可以多去看一些大佬们的博客。/ b4 f2 K+ @. e 6 Y9 l) B! _5 F" q7 B# X 6.3 下载调试 配置完上面的内容后就可以使用ST-Link进行下载调试了。下载的话比较简单,编译完成后直接点击下图标注的图标,等到下载完成即可。
下载程序 调试时点击下图所示按钮,进入Debug调试。; d/ l: i( N- | e9 B1 j6 Q3 ^ + m4 q' y' j$ | . P9 a0 }6 M3 v& U3 A
调试按钮 " |# b8 p9 P5 k" ^9 x 下面简单介绍一下调试窗口中各个按钮的作用,其他更加详细的介绍需要小伙伴自行搜索,这里参考了这篇大佬的文章KEIL5中Debug调试。 ; S: X; i& t5 l5 a- D. j( Q$ v# y
调试窗口按钮含义 + ~0 M9 Q: O1 v 第一部分从左到右 • 复位 • 全速运行 • 停止 • 每点一次运行一行,遇到函数体会进入( v( ~, _& D M6 h5 e' N; ^8 l/ K • 每点一次运行一行,遇到函数体不进入,直接执行完到下一行) e ]2 U+ [, A" n7 |: G6 t • 快速执行当前函数剩余语句,然后跳出该函数体,准备执行下一条 • 直接运行到光标处 4 v% f, t6 p( i5 m2 ~0 a 第二部分从左到右- D- w S% b% h# |3 J) E0 V • 设置当前光标处为断点 • 失能当前光标处断点 • 失能全部断点5 r% h6 i& B$ {/ p+ T • 删除全部断点 打断点的方法比较简单,直接在想要打断点的一行左侧点击一下,出现一个红点就表示已经添加了断点。断点的作用是能够让程序运行到断点处停止,有助于我们分析函数运行方式以及变量的变化。 ! V! r* X7 B2 V4 @* p! Z
断点示意图 0 N: d1 M; k; y# f% }* P5 s% J 调试时可以查看某一个变量的值。选中想要查看的变量,右键' C( w. W: @" n i, d6 ^! ^. T $ z9 }/ X$ N3 w& M
查看变量值 7 b$ q+ Y: p+ i9 j5 v. W3 u7 B# E 此时就会出现一个窗口,能够查看该变量的值。. k' i/ c# H/ T' A2 N5 d " l$ O' I& N- F5 G) F' [ B+ j8 M D & Q v) b5 `2 {1 H$ }- Z: u/ s5 Q
查看变量值 转载自: 二土电子& h# C) ?' O! n4 i6 c6 v 如有侵权请联系删除; ~* G$ `* |# a5 B |
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
【福利三:雨露均沾·逢7狂欢】之五:STM32系统时钟PLL故障排除1例
【福利三:雨露均沾·逢7狂欢】之三:AI帮我查BUG
福利三:雨露均沾·逢7狂欢】之二:STM32F407VG串口通信乱码故障的排除
基于STM32F103的I2C主从机通信
OpenBLT移植到STM32F103战舰开发板上适用于所有STM32F103系列的Bootloader
TFT LCD 与 FSMC 的硬件连接大容量 STM32F10xxx FSMC 接口
单片机:初学者该了解的STM32F103基础知识
2025软件工具兔哥知道
STM32之继电器模块
微信公众号
手机版