0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32速成笔记(1)概述

冬至子 来源:二土电子 作者:二土电子 2023-10-23 16:15 次阅读

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,UARTDMA等。

    五、程序模板

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

.c文件

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

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

图片

文件最后未空一行的警告

.h文件

#ifndef _LED_H
#define _LED_H

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

#endif

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

新建完之后需要将这两个文件添加到工程中。

对于.c文件,右键工程文件夹,选择“Manage Project Items”打开。

点击“Add Files”将新建的.c文件加入到对应的文件夹下。

图片

添加.c文件

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

图片

添加.h文件

六、ST-Link调试

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

6.1 硬件连接

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

图片

ST-Link引脚

核心板上并没有给ST-Link预留单独的接口,而是跟JTAG一起。

其原理图和硬件图如下

图片

JTAG原理图

图片

JTAG硬件图

由原理图可知,ST-Link的“SWCLK”连接核心板的“JTCK”,“SWDIO”连接核心板的“JTMS”,“RST”接“RESET”。

VCC不要接,接好ST-Link后再单独给核心板供电

6.2 Keil配置

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

  • • 首先确定ST-Link驱动是否正常
    图片
    确认ST-Link驱动是否安装正常

  • • 配置Debug 点击魔术棒,选择Debug,下图处选择“ST-Link Debugger”。
    图片
    Debug配置
    然后再点击“Settings”,在“SWIO”右侧不显示“no target connected”就说明ST-Link连接正常。点击“Flash Download”
    图片
    Flash Download
    按照图示配置,“Programming Algorithm”只要选择符合芯片型号的即可,需要注意的是,只能保留一个。
    图片
    Flash Download配置
    按照下图配置“Utilities”。
    图片
    配置Utilities
    至此,Keil5关于ST-Link的内容配置完成,如果小伙伴遇到其他问题,可以多去看一些大佬们的博客。

    6.3 下载调试

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

图片

下载程序

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

图片

调试按钮

下面简单介绍一下调试窗口中各个按钮的作用,其他更加详细的介绍需要小伙伴自行搜索,这里参考了这篇大佬的文章KEIL5中Debug调试。

图片

调试窗口按钮含义

第一部分从左到右

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

第二部分从左到右

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

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

图片

断点示意图

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

图片

查看变量值

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

图片

查看变量值

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微处理器
    +关注

    关注

    11

    文章

    2133

    浏览量

    81421
  • GPIO
    +关注

    关注

    16

    文章

    1135

    浏览量

    50578
  • LED模块
    +关注

    关注

    0

    文章

    27

    浏览量

    12164
  • ADC模块
    +关注

    关注

    1

    文章

    19

    浏览量

    10975
  • STM32F103ZET6
    +关注

    关注

    9

    文章

    67

    浏览量

    20773
收藏 人收藏

    评论

    相关推荐

    STM32速成

    哟管STM32速成贴?求助
    发表于 01-23 14:34

    速成Cadence Allegro的方法概述

    4周小白成为大神,速成Cadence Allegro 让你走向职场巅峰!.pdf(114.83 KB)
    发表于 10-08 07:49

    STM32电源监控器概述原因

    MCU学习笔记电源管理系统1. STM32电源监控器概述2. STM32电源3. HAL库配置PVD实例
    发表于 11-03 07:01

    笔记概述

    笔记概述          &nbs
    发表于 12-18 10:10 360次阅读

    笔记本电脑选购与使用常识(高手速成)

    笔记本电脑选购与使用常识(高手速成) 专家建议,在笔记本电脑选购时,一般来讲,应该从价格、性能、质量和服务4个方面综合考虑
    发表于 01-20 11:51 695次阅读

    笔记本屏幕测试速成

    笔记本屏幕测试速成篇   暑期的到来,广大学生朋友着实给本已经垂死挣扎的市场注入了一针强心剂,不过今天我们讨论的并不
    发表于 01-23 08:59 996次阅读

    STM32各模块学习笔记

    STM32个模块学习笔记 目录 STM32笔记之一 中断优先级.....................................................1
    发表于 11-30 03:32 2983次阅读

    概述STM32中GPIO的8种工作模式

    概述STM32中GPIO的8种工作模式
    发表于 07-06 17:35 26次下载
    <b class='flag-5'>概述</b><b class='flag-5'>STM32</b>中GPIO的8种工作模式

    STM32自学笔记 零死角玩转STM32

    STM32自学笔记》以新颖的思路、简单的逻辑、简洁的语言来阐述作者初遇STM32以来的种种认识,书中多处内容都是由作者从STM32初学时的实践中总结而来。
    发表于 07-18 10:54 8530次阅读

    MCU学习笔记_STM32低功耗模式概述

    MCU学习笔记电源管理系统1. STM32低功耗模式概述2. 寄存器和库函数配置3. HAL库配置PVD实例1. STM32低功耗模式概述
    发表于 10-28 17:36 9次下载
    MCU学习<b class='flag-5'>笔记</b>_<b class='flag-5'>STM32</b>低功耗模式<b class='flag-5'>概述</b>

    STM32笔记)一、STM32特点

    我用的是正点的STM32F767来进行学习。之后的这个系列笔记开头未标明的话,用的也是这个板子。一、STM32 特点1、什么是
    发表于 12-04 14:36 8次下载
    (<b class='flag-5'>STM32</b><b class='flag-5'>笔记</b>)一、<b class='flag-5'>STM32</b>特点

    STM32学习笔记--------day1

    STM32学习笔记--------day1
    发表于 12-05 20:36 8次下载
    <b class='flag-5'>STM32</b>学习<b class='flag-5'>笔记</b>--------day1

    [笔记]|[stm32]|[寄存器存储器区别]|[PWM]|[串口]|[Timer]stm32f103笔记

    [笔记]|[stm32]|[寄存器存储器区别]|[PWM]|[串口]|[Timer]stm32f103笔记笔记为18.12.21笔者期末复
    发表于 12-06 18:51 10次下载
    [<b class='flag-5'>笔记</b>]|[<b class='flag-5'>stm32</b>]|[寄存器存储器区别]|[PWM]|[串口]|[Timer]<b class='flag-5'>stm32</b>f103<b class='flag-5'>笔记</b>

    AN4729_STM32L0和STM32L4防火墙概述

    AN4729_STM32L0和STM32L4防火墙概述
    发表于 11-21 17:06 0次下载
    AN4729_<b class='flag-5'>STM32</b>L0和<b class='flag-5'>STM32</b>L4防火墙<b class='flag-5'>概述</b>

    STM32速成笔记(6)—定时器

    关于什么是定时器,简单来讲,就是是用来定时的。STM32F103ZET6有两个基本定时器TIM6和TIM7,四个通用定时器TIM2~TIM5和两个高级定时器TIM1,TIM8。
    的头像 发表于 10-24 09:41 1697次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>速成</b><b class='flag-5'>笔记</b>(6)—定时器