【STM32】程序建立模板

文章目录

  • STM32的开发方式
  • 建立基于库函数的工程
    • 建立工程的具体步骤
    • 具体程序举例
    • 工程架构

本篇介绍如何建立一个STM32工程

STM32工程结构比较复杂,需要用到的文件很多,并且程序代码也都是建立在工程结构的基础之上,所以学习如何新建一个STM32工程也是至关重要的

STM32的开发方式

目前STM32的开发方式主要有

  1. 基于寄存器的方式

    和51类似,是用程序直接配置寄存器来实现相应的功能

    特点:最底层、最直接、效率更高

    但是由于STM32结构复杂、寄存器太多,所以不推荐使用基于寄存器的方式

  2. 基于库函数的方式(推荐使用)

    使用 ST 官方提供的封装好的函数,通过调用这些函数来间接地配置寄存器

    特点:既能满足对寄存器的配置,也能提高开发效率(对开发人员友好)

  3. 基于HAL库的方式

    用图形化界面快速配置STM32,隐藏了底层逻辑(暂时不推荐,可以等熟悉底层逻辑之后使用)

建立基于库函数的工程

使用基于库函数的方式对STM32进行开发需要准备一个STM32库函数的压缩包

压缩包:STM32F10x_StdPeriph_Lib_V3.5.0.zip
链接: https://pan.baidu.com/s/15TGR31RRQXaLphke6DumGQ?pwd=276k
提取码: 276k

解压之后文件中就是库函数的文件夹目录了

在这里插入图片描述

建立工程的具体步骤

  • Step1:建立一个存放工程的文件夹

    选一个合适的地方,建立一个名为STM32Project的文件夹,用于存放以后建立的STM32工程(叫其他名字也可以,最好见名知意且是英文)

    在这里插入图片描述

  • Step2:在Keil5中新建工程

    打开Kile5,点击 Project → New μVision Project… → 选择STM32Project文件夹 → 在STM32Project文件夹中新建一个文件夹用于存放本次工程 → 在该文件夹中给工程取名 → ……

    详细步骤可参考 《STM32入门教程-2023版 细致讲解 中文字幕》教程视频 P4

  • Step3:给工程添加必要文件

    • STM32的启动文件(STM32的程序就是从启动文件开始执行的)

      在这里插入图片描述

      启动文件要根据型号来选择

      在这里插入图片描述

    • STM32外设寄存器描述文件(用于描述STM32有哪些寄存器和它对应的地址)

      在这里插入图片描述

    • STM32时钟配置文件

      在这里插入图片描述

    • STM32内核寄存器描述文件(STM32分内核和内核外围设备)

      在这里插入图片描述

      这些文件在压缩包中都有,具体如何将这些文件添加到Keil5中请参考 《STM32入门教程-2023版 细致讲解 中文字幕》教程视频 P4

    • STM32库函数文件

      • STM32标准外设驱动

        在这里插入图片描述

      • 库函数的头文件

        在这里插入图片描述

      • 其他必要文件

        在这里插入图片描述

  • Step4:在工程选项中添加文件夹的头文件路径

    魔术棒(Option for Target) → C/C++ → Include Path → ……

  • Step5:新建一个main函数

  • Step6:编译 & 下载

具体程序举例

使用库函数(间接配置寄存器)实现点灯操作

  1. 首先定义使能时钟,使用库函数中的 RCC_APB2PeriphClockCmd 函数开启时钟(不清楚函数的使用方法时,可以右击函数查看函数简介和参数说明)

    【建议先了解一下什么是系统时钟和RCC,可以先看看我另外一篇博客 STM32系统时钟RCC】

    在这里插入图片描述

    我们选择 RCC_APB2Periph_GPIOC 作为第一个参数,ENABLE 作为第二个参数

    在这里插入图片描述

  2. 配置端口模式:使用 GPIO_Init 函数

    在这里插入图片描述

    两个参数,第一个是选择那个GPIO,第二个是参数的结构体

    我们选择 GPIOC 作为第一个参数,GPIO_InitStructure 作为第二个参数(注意在使用 GPIO_InitStructure 作为函数参数之前要先定义该结构体及其相应参数)

    在这里插入图片描述

    (GPIO参数不知道怎么配置同样可以右键查看参数说明)

  3. 设置指定端口的高低电平来控制LED灯:使用 GPIO_SetBits / GPIO_ResetBits

    • LED灯亮

    在这里插入图片描述

    • LED灯灭

    在这里插入图片描述

工程架构

在这里插入图片描述


STM32 专栏文章均参考 《STM32入门教程-2023版 细致讲解 中文字幕》教程视频

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/903323.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Oracle视频基础1.1.4练习

1.1.4 dbb,ddabcPMON,SMON,LGWR,CKPT,DBWna5,b4,c2,d3,e1ad,a,c,b,eOracle instance,Oracle databaseSGA,background processcontrol file,data file,online redo file 以下是一篇关于 Oracle 基础习题 1.1.4 的博客: Oracle 基础习题解析:1.1.4 本篇文…

UE5 喷射背包

首选创建一个输入操作 然后在输入映射中添加,shift是向上飞,ctrl是向下飞 进入人物蓝图中编写逻辑,变量HaveJatpack默认true,Thrust为0 最后

linux进程的状态

​​​​​​​linux进程的概念 上篇我们学习了进程的概念,这篇我们将学习进程的状态 目录 前言 一、子进程和父进程 1、pid和ppid 2、通过系统调用创建进程-fork初识 二、进程的状态 1.Linux内核源代码 2.进程状态查看 3、Z(zombie)-僵尸进程 ​编辑 僵尸…

Linux下docker中elasticsearch与kibana的安装

他的脸红不是因为亚热带季风气候,而是因为那天太阳不忠,出卖一九九四年夏末心动。–《太平山顶》 在本篇博客中,我将详细介绍如何在 Linux 系统中安装并配置 Elasticsearch 和 Kibana,这两者是 ELK 堆栈的重要组成部分&#xff0c…

密钥管理方法DUKPT的OpenSSL代码实现Demo

目录 1 DUKPT简介 2 基本概念 2.1 BDK 2.2 KSN 2.3 IPEK 2.4 FK 2.5 TK 3 工作流程 3.1 密钥注入过程 3.2 交易过程 3.3 BDK派生IPEK过程 3.4 IPEK计算FK过程 4 演示Demo 4.1 开发环境 4.2 功能介绍 4.3 下载地址 5 在线工具 6 标准下载 1 DUKPT简介 DUKPT&a…

DEVOPS: 集群伸缩原理

概述 阿里云 K8S 集群的一个重要特性,是集群的节点可以动态的增加或减少有了这个特性,集群才能在计算资源不足的情况下扩容新的节点,同时也可以在资源利用 率降低的时候,释放节点以节省费用理解实现原理,在遇到问题的…

Linux系统解压分卷压缩文件的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【CUDA代码实践03】m维网格n维线程块对二维矩阵的索引

文章目录 一、数据存储方式二、二维网格二维线程块三、二维网格一维线程块四、一维网格一维线程块 为了方便下次找到文章,也方便联系我给大家提供帮助,欢迎大家点赞👍、收藏📂和关注🔔!一起讨论技术问题&am…

低功耗4G模组:FTP应用示例

一、FTP 概述 FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。 FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。 其中FTP服务器用来存储文件,用户可以使用FTP客户…

鸿蒙UI开发——基于组件安全区方案实现沉浸式界面

1、概 述 本文是接着上篇文章 鸿蒙UI开发——基于全屏方案实现沉浸式界面 的继续讨论。除了全屏方案实现沉浸式界面外,我们还可以使用组件安全区的方案。 当我们没有使用setWindowLayoutFullScreen()接口设置窗口为全屏布局时,默认使用的策略就是组件安…

智慧税务管理:金融企业报税效率与合规性提升

前言 在数字化浪潮席卷全球的今天,金融行业正面临前所未有的挑战与机遇。如何在复杂的税务环境中保持合规并提高效率,已成为每个金融企业的重中之重。今天小编就为大家介绍一下如何通过借助智能税务平台,实现税务管理的智能化革新&#xff0…

Docker 常用命令全解析:提升对雷池社区版的使用经验

Docker 常用命令解析 Docker 是一个开源的容器化平台,允许开发者将应用及其依赖打包到一个可移植的容器中。以下是一些常用的 Docker 命令及其解析,帮助您更好地使用 Docker。 1. Docker 基础命令 查看 Docker 版本 docker --version查看 Docker 运行…

华为OD机试 - 无向图染色(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(E卷D卷A卷B卷C卷)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加…

Python+pandas读取Excel将表头为键:对应行为值存为字典—再转json

目录 专栏导读1、库的介绍2、库的安装3、核心代码4、方法1:5、方法2总结专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该系列文章专栏:请点击——>Python办公自…

摸鱼小工具-窗口隐藏透明

摸鱼小工具-窗口隐藏透明 介绍 就很简单的一个工具,鼠标移上去显示,鼠标离开就透明。具体看图。 源码以及下载地址

vue封装信号强度

图标下载链接: https://pan.baidu.com/s/1828AidkCKU1KTkw1SvBwQg?pwd4k7n 共五格信号 信号5为绿色,信号4为绿色,信号3为黄色,信号2为黄色,信号1为红色,信号0为灰色。 子组件 /components/SignalStrength/index.vu…

使用常数指针作为函数参数

在main.cpp里输入程序如下&#xff1a; #include <iostream> //使能cin(),cout(); #include <iomanip> //使能setbase(),setfill(),setw(),setprecision(),setiosflags()和resetiosflags(); //setbase( char x )是设置输出数字的基数,如输出进制数则用setbas…

简易了解Pytorch中的@ 和 * 运算符(附Demo)

目录 1. 基本知识2. 3. * 1. 基本知识 在 PyTorch 中&#xff0c; 和 * 运算符用于不同类型的数学运算&#xff0c;具体是矩阵乘法和逐元素乘法 基本知识 运算符功能适用场景示例矩阵乘法&#xff08;或点乘&#xff09;用于执行线性代数中的矩阵乘法C A B&#xff0c;其中…

VulkanTutorial(8·Shader modules)

Shader modules 与早期的API不同&#xff0c;Vulkan中的着色器代码必须以字节码格式指定&#xff0c;而不是人类可读的语法&#xff0c;如GLSL和HLSL。这种字节码格式称为SPIR-V它是一种可用于编写图形和计算着色器的格式 使用像SPIR-V这样简单的字节码格式&#xff0c;不会面…

读数据工程之道:设计和构建健壮的数据系统23批量获取的考虑因素

1. 批量获取的考虑因素 1.1. 批量获取&#xff0c;通常是获取数据的一种便捷方式 1.1.1. 通过从源系统中抽取一个数据子集&#xff0c;根据时间间隔或累积数据的大小来获取数据 1.2. 基于时间间隔的批量获取在传统ETL的数据仓库中很普遍 1.2.1. 每天在非工作时间&#xff0…