|
一、专栏简介 本专栏介绍如何利用库函数进行STM32单片机开发,主要针对的单片机型号为STM32F103ZET6。总结来说,“速成”体现在以下方面 D/ W1 U3 [) Q" `& B. |6 e • 在讲述基础知识后会有相应的实例或者模板程序 • 学习完后会有小项目练习 • 专栏基础知识部分内容精简,对于“速成”选手更加友好1 L F" x7 r6 Y; L l# G 0 M7 J. l1 O* x; i* a8 H5 T; [ 其次专栏还有以下内容 • 简单介绍编程规范和程序架构 • 专栏不断更新一些外设的使用方法并提供例程 3 \8 w& f, J9 Z% p% E 二、前期准备5 G- f7 B! Q6 m- C4 w" f8 n 前期准备主要有物品以及相关软件的准备。首先是物品,单片机选用的是普中科技的一款核心板,主控芯片为STM32F102ZET6,是下面的样子1 Q; O* Z0 d4 x* O, X
STM32F103ZET6 + d0 D' | q% ?+ Nj; l P2 @4 W7 Q, ~" M' k 图片上是带有LCD屏幕排母的,有一种是不带的,因为本人开发时经常使用LCD,所以买了带排母的,在某宝和聚诚科技购买的,不带彩屏169RMB。学习过程中除了单片机以外还需要购买调试器,ST-LINK,用来下载程序和调试。USB转TTL(可以直接搜索TTL),用来做串口通信时使用,也可以用来下载程序,但是不可以调试。对于前期学习来讲,这些物品就足够啦。 $ H2 y% |6 @; K" j3 D. T 除了物品之外还需要提前准备一些软件和驱动。比如Keil5,CH340(串口驱动),ST-LINK的驱动,这些都是需要安装的。其他的类似于下载软件,串口调试助手都是不需要安装的,本人用的是普中科技提供的一些常用辅助开发软件,小伙伴们可以自己动手找一下,没有找到的话私信留一下邮箱,注明需要常用辅助开发软件,后续会邮件发送。 5 Y0 }6 y. R5 o7 o8 ] 三、编程规范以及程序架构简介 1. 编程规范 对于新手来讲,编程规范以及代码架构也非常重要,有一个良好的编程规范和代码架构,可以提高开发效率,方便问题排查以及后续的程序维护。这里介绍的编程规范很简单,要求不严格。主要有以下几点 3 n$ p8 w e6 ` : L9 N' x5 G* l" Q • 变量定义 变量定义时最好是能够体现该变量所属的外设模块,该变量是否为全局变量,静态变量或者指针变量。变量首字母小写,后面的单词首字母大写。举例如下 # x7 n2 T8 Q& \$ O
2 j. I, ]2 C' E# \- I# G# P • 注释 函数注释举例如下
& o. p6 T. l1 o( Y( q$ P$ ^# ]5 C! ? 对于程序语句注释,如果过长可以在程序上方加注释,如果不是很长可以在程序语句后面空三格输入注释。' O# \3 {: G$ |4 H9 C & V$ L2 `3 A. y8 @ • 函数命名 函数命名要体现函数所属的层级以及函数的功能,关于层级会在代码架构的部分详细说明,这里只说一下函数命名方式。
这里med指示该函数位于功能层,属于ADC模块,作用是读取AD值。8 r: {* H/ m ^, F6 n- j • if,while等语句的使用 使用if或者while等语句时,需要在括号前面加一个空格,如下
4 V- _$ F3 W$ W D' o • 四则运算 四则运算符号前后需要加空格,包括等于号等符号。如下( s" p, @: t( b. d5 E
2 u7 [2 E# _* S# e 2. 程序架构/ x& V8 ~* u6 q2 Z0 X6 o 该程序架构是本人在工作期间学习的,个人感觉还是有助于提高开发效率,方便后续维护的。主要思想是将一个模块的程序分成三部分,每一部分是一个新建的文件夹,下面都是其他模块相同层级的文件。 6 I3 h+ [& n8 {" }' u • Drv 驱动层 该层主要是写一些模块的初始化程序,例如GPIO的初始化,ADC的初始化等。 • Med 功能层 该层主要是完成一些功能性的操作,比如读取AD值,点亮LED等。Med层的函数可以包含Drv层的函数。7 ]2 U9 ~# K+ F+ `9 L • App 业务层 该层主要是完成一些业务,比如在点亮LED的基础上实现流水灯,比如显示电压值等。6 y' }3 H4 `9 [' l3 o1 j ) @1 O4 l0 M6 J# I4 f( @, E 四、STM32F103ZET6简介5 o! K3 [7 m$ S/ J+ j' h STM32F103ZET6是由意法半导体(ST)生产的一款单片机,32指32位。STM32也可以成为32位微处理器。STM32F103ZET6的主时钟频率为72MHz,512KB的FLASH,64KB的SRAM。常用到的有GPIO,中断,ADC,TMR,UART,DMA等。5 u$ K5 P ?9 j- _6 m1 K 1 _8 v4 X9 c: w" ? 五、程序模板 在使用Keil5编程时,针对一个外设需要新建对应的.c和.h文件。这里以LED模块为例,简单介绍一下本人的常用模板- N" Y" p* ^, @4 U. n6 H , n2 x# z, }+ q3 J1 a6 p! C .c文件( _: `. _! O6 `9 L2 F7 i! l! e
2 K* j) p' B' W/ y" e; P* Z+ x 需要注意的是一定要空出来一格,否则编译会报警告。 6 U$ f, l0 C4 ?( N* H( h
文件最后未空一行的警告 ) \2 T% ~7 x( {2 }- d+ U" {.h文件
.h文件最后也要空出一行,否则也会有警告。 4 r3 k1 `" f$ O5 G7 _; Q 4 Q) Q! n, o5 ^5 @ 新建完之后需要将这两个文件添加到工程中。% D! Z& y6 ^5 _! q , S) _. \7 \. I % l( q, |# `5 k3 h5 K" G0 u, l 对于.c文件,右键工程文件夹,选择“Manage Project Items”打开。7 |! H( z, ?4 U- ?( P; e, u. b 点击“Add Files”将新建的.c文件加入到对应的文件夹下。 ) x* m- d5 D0 J( S9 Q& a' |
添加.c文件 6 Y, W/ w. c, Z1 \" D- S5 D' c 对于.h文件,点击魔术棒,选择“C/C++”,点击三个小点选择对应文件夹即可。 : d4 d0 }3 t) ^4 L) U 6 v& {& [4 i$ I+ g! ` ^9 s
添加.h文件 7 x5 E% A, V, h) x: M 六、ST-Link调试 在开发过程中学会使用Debug调试,能够帮助我们更快地定位问题。这里简单介绍一下利用ST-Link和普中核心板Debug调试方法。9 v5 e$ ?) K/ _4 W ; p5 W2 W, i/ [. n 6.1 硬件连接/ e0 x8 B# d4 W- j 首先将ST-Link与核心板连接起来,ST-Link的引脚如下8 N2 w0 r$ g; H7 E6 n* U7 H
ST-Link引脚 2 b5 w, @; m" `7 t T1 _' w6 t. F, q) ]' f7 g9 `9 P 核心板上并没有给ST-Link预留单独的接口,而是跟JTAG一起。 ) w8 N) y) B0 w A 其原理图和硬件图如下& l2 I/ m9 A/ h 8 R/ K# ^: A0 _ 5 q9 x/ Y. y. z) `" T
JTAG原理图 - F8 \. @/ D. A3 S
JTAG硬件图 & \- ~, K1 ]7 T7 U- R1 N由原理图可知,ST-Link的“SWCLK”连接核心板的“JTCK”,“SWDIO”连接核心板的“JTMS”,“RST”接“RESET”。& `8 ?- n1 `1 `2 A& D VCC不要接,接好ST-Link后再单独给核心板供电。9 V/ L/ R# ~$ W, B # e0 r# z( G* X; y 3 v4 O$ }! I- ], [; O6 W' U) e" L 6.2 Keil配置 硬件连接好后开始配置Keil5,关于ST-Link驱动的安装这里就不再做介绍了。5 U5 ]5 p- h9 R4 G • 首先确定ST-Link驱动是否正常. k5 p& N1 `9 Z( K5 s; F/ z ! X' f3 [8 q" _ T. M, _
确认ST-Link驱动是否安装正常 7 _' N0 S4 R; C• 配置Debug 点击魔术棒,选择Debug,下图处选择“ST-Link Debugger”。7 r! ^3 P! F2 B0 \ & z# s7 I" e1 x2 K w * \3 k! ?- e0 B) T5 b6 f+ Z9 K
Debug配置 % c5 L% C/ u3 g9 \" b6 L* q; {7 K8 \) c- M2 {! T+ p& [ * S" k, S- d1 | _ 然后再点击“Settings”,在“SWIO”右侧不显示“no target connected”就说明ST-Link连接正常。点击“Flash Download”6 ^- O) y- V' i ! c- H+ E, C( W0 K. K% V" a* p2 { : `& K! ]1 L$ s; W
Flash Download 按照图示配置,“Programming Algorithm”只要选择符合芯片型号的即可,需要注意的是,只能保留一个。$ e8 j8 e# ?9 T. D
Flash Download配置 按照下图配置“Utilities”。 8 d9 E2 T$ C& W( j' w) z
配置Utilities , H% Z! v y U- Q. L' A, O至此,Keil5关于ST-Link的内容配置完成,如果小伙伴遇到其他问题,可以多去看一些大佬们的博客。# D+ v; A' ]% j0 Z0 W v" }! U# i' [+ L+ p! n. ? 6.3 下载调试8 ~1 U- F1 I6 w7 m$ R, Z+ b8 z7 U 配置完上面的内容后就可以使用ST-Link进行下载调试了。下载的话比较简单,编译完成后直接点击下图标注的图标,等到下载完成即可。0 H* X. \3 D6 r2 G+ Y& T ' H, O% r% H; F- ^$ D
下载程序 4 d' k" z7 B- j4 ?! m1 U5 C* A& n; D" w1 U( M9 N 调试时点击下图所示按钮,进入Debug调试。# a: y5 l# n1 P$ H d
调试按钮 _4 Z. a7 @9 e/ j5 Q6 E) _6 T下面简单介绍一下调试窗口中各个按钮的作用,其他更加详细的介绍需要小伙伴自行搜索,这里参考了这篇大佬的文章KEIL5中Debug调试。 8 R# n5 Q3 H4 H# v1 A
调试窗口按钮含义 第一部分从左到右8 Z' d7 _! A4 n, R5 t7 N$ _ • 复位 • 全速运行+ a" s& E% p7 y' r, e • 停止 • 每点一次运行一行,遇到函数体会进入1 x: y! v& F6 G# b# ^* S3 i6 V • 每点一次运行一行,遇到函数体不进入,直接执行完到下一行 • 快速执行当前函数剩余语句,然后跳出该函数体,准备执行下一条' G. ~+ C2 y" Q4 t • 直接运行到光标处2 a3 z8 O: a( H) u - y0 B4 b, A: C0 P# S& {: X " \" P! t* l: n2 d o% x' |; b 第二部分从左到右 • 设置当前光标处为断点' _1 G! k9 J! C4 D0 J. L • 失能当前光标处断点- y' F- `0 ?* @: d. _" ~ • 失能全部断点7 z" M! a( ^5 N9 g • 删除全部断点 打断点的方法比较简单,直接在想要打断点的一行左侧点击一下,出现一个红点就表示已经添加了断点。断点的作用是能够让程序运行到断点处停止,有助于我们分析函数运行方式以及变量的变化。$ M* E |* B& g% w - ~- E- m l# l1 \
断点示意图 2 V3 @0 Z( M" X, z/ j5 M V! a" k5 Z4 k) v+ A$ h. v # c# n- t/ Q2 @! v8 ~" U1 W& i" C% x 调试时可以查看某一个变量的值。选中想要查看的变量,右键3 A& A, K2 _% f2 f- S$ S- L: N 9 x: Y j1 ~$ O3 X 9 _: V1 l; J3 P1 c# x3 j& p3 S- e2 i3 h
查看变量值 此时就会出现一个窗口,能够查看该变量的值。 8 A$ {/ v% A2 o9 ?5 Y* k
查看变量值 转载自: 二土电子, A# D- N9 p, D) N# M3 c 如有侵权请联系删除 |
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之继电器模块
微信公众号
手机版