STM32速成笔记(一)—概述

简介: 本文为STM32速成系列专栏的第一篇文章,主要介绍了一下本专栏的内容特点,前期准备内容以及一些简单的编程规范和代码架构设计内容。


🎀 文章作者:二土电子
🐸 期待大家一起学习交流!


前言

本人技术菜鸟一枚,2022年大学毕业,大学加入老师实验室,参加过一些嵌入式相关的比赛,获得过2020年TI杯大学生电子设计竞赛山东省一等奖,参加两次大学的电子设计竞赛均获得一等奖。其他的参加过蓝桥杯,成绩并不理想,山东省嵌入式大学组省二。

最初大一下刚加入实验室时学习51单片机,后续使用STM32系列单片机。本人也并不是很专业系统的学习过STM32的开发,当时跟随B站上普中科技的STM32视频一步一步学习的STM32开发。个人觉得看视频记笔记的方式还是很适合我的。开这个专栏既是为了能够让更多的人能够快速上手STM32,其次也是为了再次学习,扎实基础。

发自内心的讲,最开始学习STM32时学的是时钟呀,一些文件的关系呀,一下子由51转到32觉得好难,心里发怵。但是实际使用时其实32比51更加简单,重要的是学习过程中要对自己充满信心。最后,祝愿大家能够在专栏中有所收获,共同进步!

一、专栏简介

本专栏介绍如何利用库函数进行STM32单片机开发,主要针对的单片机型号为STM32F103ZET6。总结来说,“速成”体现在以下方面

  • 在讲述基础知识后会有相应的实例或者模板程序
  • 学习完后会有小项目练习
  • 专栏基础知识部分内容精简,对于“速成”选手更加友好

其次专栏还有以下内容

  • 简单介绍变成规范合和程序架构
  • 专栏不断更新一些外设的使用方法并提供例程

    二、前期准备

    前期准备主要有物品以及相关软件的准备。首先是物品,单片机选用的是普中科技的一款核心板,主控芯片为STM32F102ZET6,是下面的样子
    7118ed8ce20dab4d780993c9cdd2e1fe_c8960751e5f64627908831ade5f9a484.jpeg

图片上是带有LCD屏幕排母的,有一种是不带的,因为本人开发时经常使用LCD,所以买了带排母的,在某宝和聚诚科技购买的,不带彩屏169RMB。学习过程中除了单片机以外还需要购买调试器,ST-LINK,用来下载程序和调试。USB转TTL(可以直接搜索TTL),用来做串口通信时使用,也可以用来下载程序,但是不可以调试。对于前期学习来讲,这些物品就足够啦。

除了物品之外还需要提前准备一些软件和驱动。比如Keil5,CH340(串口驱动),ST-LINK的驱动,这些时需要安装的。其他的类似于下载软件,串口调试助手都是不需要安装的,本人用的是普中科技提供的一些常用辅助开发软件,小伙伴们可以自己动手找一下,没有找到的话私信留一下邮箱,注明需要常用辅助开发软件,后续会邮件发送。

三、编程规范以及程序架构简介

1. 编程规范

对于新手来讲,编程规范以及代码架构也非常重要,有一个良好的编程规范和代码架构,可以提高开发效率,方便问题排查以及后续的程序维护。这里介绍的编程规范很简单,要求不严格。主要有以下几点

  • 变量定义
    变量定义时最好是能够体现该变量所属的外设模块,该变量是否为全局变量,静态变量或者指针变量。变量首字母小写,后面的单词首字母大写。举例如下
// 以ADC模块为例,需要定义一个存储AD值的变量,举例说明变量命名方式

// 局部变量
u32 adValue = 0;

// 全局变量
u32 gAdcAdValue = 0;   // 加一个g表示是全局变量

// 全局静态变量
static u32 gsAdcAdValue = 0;   // 加一个s表示静态变量

// 指针变量
u32 *gpAdcAdValue = (u32*)0x2000800;   // 加一个p表示为指针变量
  • 注释
    函数注释举例如下
/*
 *==============================================================================
 *函数名称:
 *函数功能:
 *输入参数:
 *返回值:无
 *==============================================================================
*/

对于程序语句注释,如果过长可以在程序上方加注释,如果不是很长可以在程序语句后面空三格输入注释。

  • 函数命名
    函数命名要体现函数所属的层级以及函数的功能,关于层级会在代码架构的部分详细说明,这里只说一下函数命名方式。
// 这里以ADC模块的读取AD值函数为例,说明函数命名方式
void Med_Adc_ReadAdValue (void)
{
   
   
    // 函数内容
}

这里med指示该函数位于功能层,属于ADC模块,作用是读取AD值。

  • if,while等语句的使用
    使用if或者while等语句时,需要在括号前面加一个空格,如下
if (gAdcAdValue == 0)
{
   
   
    // 程序语句
}
  • 四则运算
    四则运算符号前后需要加空格,包括等于号等符号。如下
c = a * b;

2. 程序架构

该程序架构是本人在工作期间学习的,个人感觉还是有助于提高开发效率,方便后续维护的。主要思想是将一个模块的程序分成三部分,每一部分是一个新建的文件夹,下面都是其他模块相同层级的文件。

  • Drv 驱动层
    该层主要是写一些模块的初始化程序,例如GPIO的初始化,ADC的初始化等。
  • Med 功能层
    该层主要是完成一些功能性的操作,比如读取AD值,点亮LED等。Med层的函数可以包含Drv层的函数。
  • App 业务层
    该层主要是完成一些业务,比如在点亮LED的基础上实现流水灯,比如显示电压值等。

    四、STM32F103ZET6简介

    STM32F103ZET6是由意法半导体(ST)生产的一款单片机,32指32位。STM32也可以成为32位微处理器。STM32F103ZET6的主时钟频率为72MHz,512KB的FLASH,64KB的SRAM。常用到的有GPIO,中断,ADC,TMR,UART,DMA等。

    五、程序模板

    在使用Keil5编程时,针对一个外设需要新建对应的.c和.h文件。这里以LED模块为例,简单介绍一下本人的常用模板

.c文件

#include "LED.h"   // LED头文件

需要注意的是一定要空出来一格,否则编译会报警告。
4ecf360231fb345b45090d9a847ad92e_b0e8fd7711e24d3e9d5ae18de0b9f14b.png

.h文件

#ifndef _LED_H
#define _LED_H

#include "sys.h"   // STM32库文件

#endif

.h文件最后也要空出一行,否则也会有警告。

新建完之后需要将这两个文件添加到工程中。对于.c文件,右键工程文件夹,选择“Manage Project Items”打开。点击“Add Files”将新建的.c文件加入到对应的文件夹下。
9205f1860d62422bf2e4ca704751da89_cd84f7b73b4a4fd7adedf2c66d747c2f.png

对于.h文件,点击魔术棒,选择“C/C++”,点击三个小点选择对应文件夹即可。
6d57c1834af2dda75db2ad8e791b2d5d_3ba08c6415844a4a9c9602f78077a9cd.png

六、ST-Link调试

在开发过程中学会使用Debug调试,能够帮助我们更快地定位问题。这里简单介绍一下利用ST-Link和普中核心板Debug调试方法。

6.1 硬件连接

首先将ST-Link与核心板连接起来,ST-Link的引脚如下
c1e586aad39df7dd2e8bedc099957639_6358773b950f49f2a136a468c53c97fa.png

核心板上并没有给ST-Link预留单独的接口,而是跟JTAG一起。其原理图和硬件图如下
9b80f908c86273f7ce6d3103f8dc9fe0_014b0447fc5c46bb856ad907cb1cbb12.png

28a2941a88f68457d20b28c6d1270820_158e58a0d90841b2835b2cc2c3b8f218.png

由原理图可知,ST-Link的“SWCLK”连接核心板的“JTCK”,“SWDIO”连接核心板的“JTMS”,“RST”接“RESET”。VCC不要接,接好ST-Link后再单独给核心板供电。

6.2 Keil配置

硬件连接好后开始配置Keil5,关于ST-Link驱动的安装这里就不再做介绍了。

  • 首先确定ST-Link驱动是否正常
    bc31da9d632b58824f78d4937817c8e6_62ab8ef139ab4c37b0dd76d27df096be.png

  • 配置Debug
    点击魔术棒,选择Debug,下图处选择“ST-Link Debugger”。
    7dea90327ac69e855bc6ba6cb8ec1c7a_61587fa86c644edab62a4d9eae8b4a04.png

然后再点击“Settings”,在“SWIO”右侧不显示“no target connected”就说明ST-Link连接正常。点击“Flash Download”
5341fc681d1342cfa0d7d65c3cc3e612_4185d424091e463f8b1fe428a760087b.png

按照图示配置,“Programming Algorithm”只要选择符合芯片型号的即可,需要注意的是,只能保留一个。
ff54ad0913cb0cf5b4f620aece611526_b2e326072da3430a8d144315296b2f63.png

按照下图配置“Utilities”。
f1a09ddecf80243770d3d81d3b135538_67f4c8242e97453483b304052bfe8bd6.png

至此,Keil5关于ST-Link的内容配置完成,如果小伙伴遇到其他问题,可以多去看一些大佬们的博客。

6.3 下载调试

配置完上面的内容后就可以使用ST-Link进行下载调试了。下载的话比较简单,编译完成后直接点击下图标注的图标,等到下载完成即可。

0f8683837857a4658dbcbc055338222e_b648935d43c045ffa6d77330dba9ac33.png

调试时点击下图所示按钮,进入Debug调试。
c55e0732e108501b5254c108c4e1dda8_c3c4b58e5c974233944335f72feb6255.png

下面简单介绍一下调试窗口中各个按钮的作用,其他更加详细的介绍需要小伙伴自行搜索。

3b0d7c9b3da65066c5e616a50fc19d73_b4161fa524d9406282c5a96f07a78366.png

第一部分从左到右

  • 复位
  • 全速运行
  • 停止
  • 每点一次运行一行,遇到函数体会进入
  • 每点一次运行一行,遇到函数体不进入,直接执行完到下一行
  • 快速执行当前函数剩余语句,然后跳出该函数体,准备执行下一条
  • 直接运行到光标处

第二部分从左到右

  • 设置当前光标处为断点
  • 失能当前光标处断点
  • 失能全部断点
  • 删除全部断点

打断点的方法比较简单,直接在想要打断点的一行左侧点击一下,出现一个红点就表示已经添加了断点。断点的作用是能够让程序运行到断点处停止,有助于我们分析函数运行方式以及变量的变化。

fc98358902e6639f5a040cfd9162947e_5e516c47cc3544ea85b548de272f5c60.png

调试时可以查看某一个变量的值。选中想要查看的变量,右键

330db456d6d790a5efec40b68a382e1e_f30a25c83fdb42ed94a01e475cc14733.png

此时就会出现一个窗口,能够查看该变量的值。

47902963f0c7f35dcd764927539c06af_fbc6bdb585c14f90b4cdb053e5db40ea.png

相关文章
|
芯片
STM32速成笔记(二)—GPIO
本文介绍了STM32的GPIO的配置和使用方法,并且给出了应用实例。此外,针对使用时可能遇到的一些问题给出了解决办法。
423 0
STM32速成笔记(二)—GPIO
STM32速成笔记(三)—按键检测
本文介绍了如何利用STM32进行按键检测,先介绍了原理,后面给出了配置步骤和应用例程。此外,本文还叙述了如何利用一个按键单独控制一个LED亮灭,以及如何检测按键长短按。
745 0
STM32速成笔记(三)—按键检测
|
存储 物联网 芯片
STM32速成笔记(十四)—串口IAP
本文介绍了什么是IAP,IAP有什么作用,如何实现IAP。最后,给出了IAP的实现程序。
399 0
STM32速成笔记(十四)—串口IAP
|
芯片 内存技术
STM32速成笔记(十三)—低功耗模式
本文介绍了三种STM32低功耗模式的进入和退出方法,针对待机唤醒给出了程序设计。
427 0
STM32速成笔记(十三)—低功耗模式
|
存储 芯片 内存技术
STM32速成笔记(十二)—Flash闪存
本文简单介绍了什么是Flash。针对STM32F1的Flash做了详细介绍,介绍了操作Flash的步骤,并且给出了程序设计。最后,介绍了一些注意事项。
171 0
STM32速成笔记(十二)—Flash闪存
|
存储 芯片
STM32速成笔记(十一)—EEPROM(AT24C02)
本文详细介绍了什么是AT24C02,介绍了它的引脚,读/写时序,给出了应用实例和详细的程序设计。最后,简单介绍了AT24C02的应用场景。
598 0
STM32速成笔记(十一)—EEPROM(AT24C02)
STM32速成笔记(十)—IWDG
本文详细介绍了什么是IWDG,STM32的IWDG特性,框图和配置步骤。此外,给出了STM32的IWDG配置程序。通过一个简单的应用实例,展示了IWDG的配置和使用方法。
147 0
STM32速成笔记(十)—IWDG
|
API
STM32速成笔记(九)—RTC
本文详细介绍了RTC模块,介绍了STM32的RTC的特性,框图,配置步骤,并给出了详细的程序设计。最后,针对实际使用时可能遇到的问题给出了解决方法以及程序。
112 0
STM32速成笔记(九)—RTC
|
存储 Perl
STM32速成笔记(八)—DMA
本文介绍了DMA的概念,用途。对于STM32F103ZET6的DMA做出了详细地介绍,给出了DMA配置步骤。最后,以配置DMA搬运ADC转换结果为例,给出了DMA的配置和使用方法。
266 0
STM32速成笔记(八)—DMA
STM32速成笔记(六)—定时器
本文介绍了定时器的概念,作用。针对STM32F1的通用定时器做了详细介绍。此外,介绍了PWM的概念,用途以及STM32F1的PWM,给出了PWM频率的计算方法。最后通过介绍利用定时器的更新中断和PWM这两种方法实现呼吸灯,展示了定时器和PWM的配置步骤,并给出了详细的程序设计。另外,介绍了利用定时器实现按键长短按的检测方法。
226 0
STM32速成笔记(六)—定时器

热门文章

最新文章