|
一、专栏简介 本专栏介绍如何利用库函数进行STM32单片机开发,主要针对的单片机型号为STM32F103ZET6。总结来说,“速成”体现在以下方面 • 在讲述基础知识后会有相应的实例或者模板程序 • 学习完后会有小项目练习1 B' r* [, P& \4 P2 v9 Z8 f • 专栏基础知识部分内容精简,对于“速成”选手更加友好 其次专栏还有以下内容4 |+ h) z% |4 }, H& l' [ • 简单介绍编程规范和程序架构8 j6 ^/ Q0 F# `% V a- N • 专栏不断更新一些外设的使用方法并提供例程 9 v" _7 n2 @2 j. Z3 n7 Y 二、前期准备 前期准备主要有物品以及相关软件的准备。首先是物品,单片机选用的是普中科技的一款核心板,主控芯片为STM32F102ZET6,是下面的样子
STM32F103ZET6 / z* b; m1 w& q$ y4 w图片上是带有LCD屏幕排母的,有一种是不带的,因为本人开发时经常使用LCD,所以买了带排母的,在某宝和聚诚科技购买的,不带彩屏169RMB。学习过程中除了单片机以外还需要购买调试器,ST-LINK,用来下载程序和调试。USB转TTL(可以直接搜索TTL),用来做串口通信时使用,也可以用来下载程序,但是不可以调试。对于前期学习来讲,这些物品就足够啦。 除了物品之外还需要提前准备一些软件和驱动。比如Keil5,CH340(串口驱动),ST-LINK的驱动,这些都是需要安装的。其他的类似于下载软件,串口调试助手都是不需要安装的,本人用的是普中科技提供的一些常用辅助开发软件,小伙伴们可以自己动手找一下,没有找到的话私信留一下邮箱,注明需要常用辅助开发软件,后续会邮件发送。) q/ ~+ V+ w5 Y( W8 P. v- Z4 f & j! H' |3 q* M) n) E0 x ! s" T# X* o( `- n 三、编程规范以及程序架构简介7 K* y- P. U- w0 @5 a0 U8 m 1. 编程规范 对于新手来讲,编程规范以及代码架构也非常重要,有一个良好的编程规范和代码架构,可以提高开发效率,方便问题排查以及后续的程序维护。这里介绍的编程规范很简单,要求不严格。主要有以下几点 " i% t2 U8 b( m! S & ^$ O* H, m$ J" ?+ K5 Z' E" ] • 变量定义 变量定义时最好是能够体现该变量所属的外设模块,该变量是否为全局变量,静态变量或者指针变量。变量首字母小写,后面的单词首字母大写。举例如下' e+ n! z# J# Y' W+ ~ ) F# L. d" H# ^+ V4 y4 A4 R ( _) Q5 @# _# N# N% K0 E+ Y
• 注释 函数注释举例如下9 W/ t3 h9 A0 V: j( l- K
对于程序语句注释,如果过长可以在程序上方加注释,如果不是很长可以在程序语句后面空三格输入注释。0 I1 ?- ]0 f3 _# J0 U) _/ L0 S " @* `# {! W9 s1 C0 e / f% P. ~$ _; V0 X0 r/ L • 函数命名 函数命名要体现函数所属的层级以及函数的功能,关于层级会在代码架构的部分详细说明,这里只说一下函数命名方式。. |; z3 E9 P! k9 i8 u# E
+ ] H `2 Y( D 这里med指示该函数位于功能层,属于ADC模块,作用是读取AD值。 - a1 X! `( o5 L6 X* V3 L" ~ • if,while等语句的使用 使用if或者while等语句时,需要在括号前面加一个空格,如下
0 Y8 M3 c. ]: O • 四则运算 四则运算符号前后需要加空格,包括等于号等符号。如下
2. 程序架构 该程序架构是本人在工作期间学习的,个人感觉还是有助于提高开发效率,方便后续维护的。主要思想是将一个模块的程序分成三部分,每一部分是一个新建的文件夹,下面都是其他模块相同层级的文件。 5 q* t+ O' N }6 F. `: ` • Drv 驱动层 该层主要是写一些模块的初始化程序,例如GPIO的初始化,ADC的初始化等。 • Med 功能层 该层主要是完成一些功能性的操作,比如读取AD值,点亮LED等。Med层的函数可以包含Drv层的函数。 • App 业务层 该层主要是完成一些业务,比如在点亮LED的基础上实现流水灯,比如显示电压值等。$ T0 e# B6 c/ ]# p/ k0 Q4 Q 1 j& z; X) B [ 四、STM32F103ZET6简介! D; X/ c; _- X, w4 U4 y/ g8 U# s STM32F103ZET6是由意法半导体(ST)生产的一款单片机,32指32位。STM32也可以成为32位微处理器。STM32F103ZET6的主时钟频率为72MHz,512KB的FLASH,64KB的SRAM。常用到的有GPIO,中断,ADC,TMR,UART,DMA等。 五、程序模板+ z8 B/ |- k) R" N1 A! D8 x4 G# ~ 在使用Keil5编程时,针对一个外设需要新建对应的.c和.h文件。这里以LED模块为例,简单介绍一下本人的常用模板 .c文件
需要注意的是一定要空出来一格,否则编译会报警告。6 Z& V7 W: }* m! m 0 E2 h- S$ y2 l* q
文件最后未空一行的警告 .h文件$ _: K& g4 z. i2 L: g7 h, M
.h文件最后也要空出一行,否则也会有警告。 $ w/ Y- q n3 N7 O$ L r1 V 新建完之后需要将这两个文件添加到工程中。 对于.c文件,右键工程文件夹,选择“Manage Project Items”打开。7 P; x+ o) _ H 2 H9 v# l5 M" o1 ]0 ] 7 l) l" W7 K6 M 点击“Add Files”将新建的.c文件加入到对应的文件夹下。1 U* B' }8 W Z2 r4 N ; c5 \$ W4 L1 {5 W% C+ b$ D+ S+ s9 g# h- A
添加.c文件 , L* m) M" n; I! H ) c0 e& {6 {, w8 o 对于.h文件,点击魔术棒,选择“C/C++”,点击三个小点选择对应文件夹即可。 H) ?; k: h3 ^- f/ m& y - c. j d, Z- o; X- q: w8 | 6 s# o% D2 d& c" N- h) t# s! b9 b
添加.h文件 ! n: E( L# a% x+ J4 _3 @ 六、ST-Link调试 在开发过程中学会使用Debug调试,能够帮助我们更快地定位问题。这里简单介绍一下利用ST-Link和普中核心板Debug调试方法。 6.1 硬件连接 首先将ST-Link与核心板连接起来,ST-Link的引脚如下 6 \" p6 l! A# H( G h0 n0 t
ST-Link引脚 2 W, X) v# h7 d+ \( i( ro4 F. P2 A9 S# n: D& B& c3 x 核心板上并没有给ST-Link预留单独的接口,而是跟JTAG一起。( D& d5 |$ v' E7 X/ w% t & Y; t: `# a" Q4 r3 O# y 7 I3 R* O: w6 y5 J$ a 其原理图和硬件图如下% ] @5 r$ @2 l# H% {0 } & r2 [4 B9 i, S- q 3 r- [- D) e# I$ X$ B% Q
+ f0 Z( K. b$ q6 J" B. K0 q JTAG原理图
JTAG硬件图 : f/ w' E$ x" d* I# Q& S6 O$ Y: h' W# Y, p: T 0 u2 z. n6 o! o6 {+ j 由原理图可知,ST-Link的“SWCLK”连接核心板的“JTCK”,“SWDIO”连接核心板的“JTMS”,“RST”接“RESET”。 VCC不要接,接好ST-Link后再单独给核心板供电。 6.2 Keil配置% ~7 Q0 I- |/ _( D, { 硬件连接好后开始配置Keil5,关于ST-Link驱动的安装这里就不再做介绍了。; o2 A. B: j' e$ q) O + P6 H+ ~& o) J& K • 首先确定ST-Link驱动是否正常( R+ w! G' U/ w* H7 m & z+ K( ]) R3 Q5 Z) ^0 }
确认ST-Link驱动是否安装正常 : f% [# S- |0 K6 J ) k$ m' ~! C* l • 配置Debug 点击魔术棒,选择Debug,下图处选择“ST-Link Debugger”。 N" M) k( M* w% E
Debug配置 $ ~, c3 n6 M! ]8 n/ ^$ n, B# v 然后再点击“Settings”,在“SWIO”右侧不显示“no target connected”就说明ST-Link连接正常。点击“Flash Download” # y/ S6 w( k" j5 E
Flash Download % K& s- x6 B" _6 _* P* R按照图示配置,“Programming Algorithm”只要选择符合芯片型号的即可,需要注意的是,只能保留一个。! V% Y/ w% g7 u! ?) L7 v/ Z 4 I5 E' s; [; S* I4 Y
Flash Download配置 6 n5 l( d8 v$ y' v9 p5 e+ O* T / ~9 c5 R4 Q" J4 b( b3 X 按照下图配置“Utilities”。 * Y/ f+ N0 |+ g4 X u ) @8 W7 \* s( m! \
配置Utilities , d0 z, T G& A* Q1 V5 ~8 v; a$ u' K/ N( o/ E+ g + R/ P) y3 Z; ^7 s 至此,Keil5关于ST-Link的内容配置完成,如果小伙伴遇到其他问题,可以多去看一些大佬们的博客。0 e, J+ K: f* }+ d' M! { # X1 _9 s9 o7 ~4 y3 C+ z0 u 6.3 下载调试2 A6 f5 O; n0 q* B* g0 x 配置完上面的内容后就可以使用ST-Link进行下载调试了。下载的话比较简单,编译完成后直接点击下图标注的图标,等到下载完成即可。8 {3 X2 s3 ~) h! K+ Q8 _3 ~ 4 g9 W) u; R% c
下载程序 8 P0 x8 c) x# r, B8 o$ M5 h 调试时点击下图所示按钮,进入Debug调试。 & |& ?* a( B( |- a( F
调试按钮 6 M& G T0 }" E; H$ T& E: P 下面简单介绍一下调试窗口中各个按钮的作用,其他更加详细的介绍需要小伙伴自行搜索,这里参考了这篇大佬的文章KEIL5中Debug调试。 $ t" k) _ P1 C7 y, R/ l
调试窗口按钮含义 * H( M6 m3 c: }9 l% \% N6 C* L 第一部分从左到右3 D* \; o5 k) k7 B2 t7 X • 复位8 `+ W$ ?) I& M: D4 d • 全速运行 • 停止 • 每点一次运行一行,遇到函数体会进入 • 每点一次运行一行,遇到函数体不进入,直接执行完到下一行 • 快速执行当前函数剩余语句,然后跳出该函数体,准备执行下一条2 F2 p( \$ J+ s5 ^1 g • 直接运行到光标处. @- R) b, ^$ D! @) ^) i# f! u$ B 第二部分从左到右4 \2 s& x8 v) x: w" g • 设置当前光标处为断点/ `+ R) T5 E7 `3 Y6 d _& O+ E • 失能当前光标处断点$ T, b0 l# y; S7 {4 ? • 失能全部断点4 o2 X3 k& s! t. X( z9 N: X$ } • 删除全部断点( d9 ?2 y9 E' @- [: l 打断点的方法比较简单,直接在想要打断点的一行左侧点击一下,出现一个红点就表示已经添加了断点。断点的作用是能够让程序运行到断点处停止,有助于我们分析函数运行方式以及变量的变化。8 r7 [! E1 N: _% e 9 w" R. h0 S+ Y: Q u* E% Y: i
断点示意图 / R4 r2 s3 W, h( H- f调试时可以查看某一个变量的值。选中想要查看的变量,右键9 x% _$ @1 k# Z4 u! z5 Y ; z4 r6 ?/ P4 p) B7 R6 z! g" `
查看变量值 - A5 x1 [" |% k7 o( B7 }$ F& l此时就会出现一个窗口,能够查看该变量的值。 ' G+ I) Z- T5 p0 I
查看变量值 ( s; w8 {' X$ |+ e2 q转载自: 二土电子 如有侵权请联系删除 |
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之继电器模块
微信公众号
手机版