【STM32 |新建一个工程】基于标准库(库函数)新建工程

server/2024/12/2 6:45:45/

目录

STM32开发方式

库函数文件夹 

建工程步骤 

库函数工程建立 

建立工程总结


STM32开发方式

  • 目前stm32的开发方式主要有基于寄存器的方式、基于标准库的方式(库函数的方式)、基于HAL库的方式
  • 基于库函数的方式是使用ST官方提供的封装好的函数,通过调用这些函数来间接地配置寄存器
  • 基于HAL库的方式可以用图形化界面快速配置STM32,但这种方式隐藏了底层逻辑

库函数文件夹 

使用库函数的方式,需要准备一个STM32库函数的文件夹

库函数文件夹里的内容解释如下:

  • Libraries里面就是库函数的文件,之后建工程会用到
  • project里是官方提供的工程示例和模版,使用库函数可以参考一下
  • Utilities是stm32官方评估板的相关例程,这个评估板是官方用STM32做的一个小电路板用来测评stm32的,这个文件夹存的就是这个小电路板的测评程序
  • 最后面两个文件,一个是库函数的发布文档一个是使用手册

建工程步骤 

先新建一个文件夹来系统管理我们的文件

再给工程起一个通用的名字,文件夹的名称是方便改的,工程名称不太方便改

 接下来选择器件型号,选择的是stm32f103c8t6工程还不能用,需要添加一点工程的必要文件

打开固件库的文件夹

启动文件的文件路径:Libraries-CMSIS-CM3-DeviceSupport-ST-STM32F10x-startup-arm-

如下就是STM32的启动文件,STM32的程序就是从启动文件开始执行的。

将全部启动文件全部复制下来,然后回到工程文件夹里

工程文件夹如下,里面是新建工程自动生成的文件

 工程文件夹里,新建文件夹(start)用来存放复制过来的启动文件

接着回到固件库的STM32F10x文件,可以看到stm32f10x.h和两个system开头的文件system_stm32f10x.c和system_stm32f10x.h文件,将这三个文件复制下来,也粘贴到Start文件夹下。

  • stm32f10x.h是STM32的外设寄存器描述文件,作用和51单片机的头文件REGX52.H一样,是用来描述stm32有哪些寄存器和它对应的地址的
  • 两个system文件是用来配置时钟的,stm32主频72MHz,就是system文件里的函数配置的

接下来,因为stm32是内核和内核外围的设备组成的,而且这个内核的寄存器描述文件和外围设备的描述文件不在一起,所以还需要添加一个内核寄存器的描述文件。打开固件库文件夹下的 CM3-CoreSupport- 文件夹,这两个cm3(Cortex-M3)文件就是内核的寄存器描述,当然还有一些内核的配置函数,所以多了个.c文件。将两个cm3文件复制粘贴到工程文件夹的Start文件夹下。

到此为止,工程的必要文件就复制完成了。

然后回到keil软件,将刚才复制的文件(start)添加到工程里。

点击选中Source Group 1,然后再点击一下,把这个组改一下名字,也叫Start

接着右键,选择添加已经存在的文件到组里

打开start文件节,把下面这个文件过滤器,选择ALL files,这样就可以看到文件节里的所有文件了,启动文件有很多分类,我们只能添加其中一个,我们所用型号需要选择这个后缀为md.s得启动文件,然后剩下的.c和.h文件都要添加进来,然后Close,这样我们的Start文件夹里面的文件就添加好了

 

这里的文件都是stm32里最基本的文件,是不需要我们修改的,我们添加进来就可以。文件图标上的小钥匙,意思是文件是只读文件,不可修改。

 打开工程文件夹,新建一个文件夹(user),在keil中,在Target点击右键,点击添加组,命名为User

然后在user右键,点击添加新文件,选择c文件,名字为main。路径需要注意为User文件夹,要不然默认是放在文件夹外面的,这样我们就有了main.c文件了 

 在main.c里,右键,插入头文件,选择stm32f10x.h

点击扳手,选择utf-8,避免中文乱摸,tab缩进为4比较舒服

在keil中配置一下调试器,点击魔术棒,选择debug,调试器默认是ULINK,更换为stlink调试器,然后再点击右边的设置按钮,在flash下载这一项,把reset and run 勾上(勾上后,我们下载程序后会立马复位并执行,否则每次下载后,还需要按一下板子上的复位按键才能执行程序),配置好调试器后,点击确定,ok


库函数工程建立 

打开工程文件夹,新建一个文件夹叫library,用来存放库函数,接着打开固件库的文件夹,打开librarys-stm32标准外设驱动-src-这些就是库函数的源文件,misc(混杂的意思)是内核的库函数,其它的就是内核外的外设库函数,全选这些库函数文件粘贴到工程文件夹的library下。然后再打开固件库的inc文件夹,这些是库函数的头文件,全部复制粘贴到工程文件夹library下。

 接着回到keil软件,同样在Target处右键,然后添加组,然后改名为library,再右键,添加已经存在的文件,打开library,全选,添加,这样就把所有的库函数文件都添加进来了,但是对于这个库函数来说,现在还不能直接使用,需要再添加一个文件

打开固件库文件夹–打开project–打开–stm32template文件夹里,有两个it结尾的文件和一个conf.h的文件。conf(configuration)文件是用来配置库函数头文件的包含关系的,以及里面还有个用来参数检查的函数定义,这是所有库函数都需要的。两个it(interrupt)文件是用来存放中断函数的。将这三个文件复制粘贴到工程的user目录下,接着回到keil软件,在user组里,将刚才的三个文件添加进来。

 

最后还需要一个宏文件,可以在这个 #include “stm32f10x.h” 文件右键,打开文件,划到最下面

 看到这个语句,这是一个条件编译,意思是,如果你定义了USE_STDPERIPH_DRIVER (使用标准外设驱动)这个字符串,下面这个 #include "stm32f10x_conf.h"语句才有效,所以,我们还需要复制一下这个USE_STDPERIPH_DRIVER 字符串,然后打开工程选项(魔术棒),在c/c++的Define栏目粘贴这个字符串,这样才能包含标准外设库(库函数 )

 头文件目录,把user和library和Start的路径也都添加上

 点ok,这样,我们基于库函数的的工程就建好了。
可以看到Library里面的库函数也带了钥匙,不需要我们进行更改,我们唯一需要更改的是user组的文件。
点一下三个箱子的按钮,将这个Library往上挪一下,将不用改的放到最上面,看着舒服。

建立工程总结

  • 建立工程文件夹,Keil中新建工程,选择型号
  • 工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹
  • 工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里
  • 工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹(因为像Start等文件夹是自己建的,keil并不知道,所以必须声明一下路径,最好就是自己新建文件就声明一下,这样就不会出现.h文件找不到的问题)
  • 工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER(使用库函数就必须定义这个)
  • 工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download里勾选Reset and Run

    希望对你有帮助


http://www.ppmy.cn/server/41830.html

相关文章

QT---day5,通信

1、思维导图 2、TCp 服务器 #ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> #include <QTcpServer> #include <QList> #include <QTcpSocket> #include <QMessageBox> #include <QDebug> #include <QTcpServer> QT_B…

学习MySQL(二):库表的操作

库的增删改查 增 -- 创建库 create database 库名 charset 字符编码; 删 -- 删除库 drop database 库名; 改 -- 修改字符编码 alter database 库名 charset 字符编码; # 注&#xff1a;一般只改字符编码&#xff0c;数据库名称是不能改的 查 -- 查询当前账户下所有的库…

AppBuilder低代码体验:构建雅思大作文组件

AppBuilder低代码体验&#xff1a;构建雅思大作文组件 ​ 在4月14日&#xff0c;AppBuilder赢来了一次大更新&#xff0c;具体更新内容见&#xff1a;AppBuilder 2024.04.14发版上线公告 。本次更新最大的亮点就是**新增了工作流&#xff0c;低代码制作组件。**具体包括&#x…

正点原子FreeRTOS学习笔记——列表与列表项

目录 一、什么是列表和列表项 1、概念 2、FreeRTOS代码 &#xff08;1&#xff09;列表 &#xff08;2&#xff09;列表项 &#xff08;3&#xff09;迷你列表项 二、列表与列表项初始化 1、列表初始化 2、列表项初始化 三、列表插入与删除列表项 1、原理解释 2、…

AD域服务器巡检指南

Active Directory (AD) 域服务器的巡检对于确保企业网络的安全性和高效运行至关重要。以下是针对AD域服务器巡检的关键活动和其重要性的优化描述&#xff1a; 保证系统安全&#xff1a; AD域服务器储存大量敏感数据&#xff0c;包括用户账户信息、策略和访问权限数据。定期巡检…

构建NFS远程共享存储

nfs-server:10.1.59.237 nfs-web:10..159.218 centos7,服务端和客户端都关闭防火墙和selinux内核防火墙&#xff0c;如果公司要求开启防火墙&#xff0c;那需要放行几个端口 firewall-cmd --add-port2049/tcp --permanent firewall-cmd --add-port111/tcp --permanent firew…

知识付费系统怎么操作的,培训机构怎么用老带新招生呢?

随着暑假竞争的日益剧烈&#xff0c;各类教育培训机构早已准备着各种招生活动&#xff0c;打算进一步进步学校的招生数量。但是也有很多招生问题在搅扰着学校的招生教师&#xff0c;其实一切的招生活动&#xff0c;都必需效劳于重生报名和老生续报!培训机构如何做好老带新招生?…

7集成学习评分卡

集成学习评分卡 学习目标 知道LightGBM基本原理掌握使用lightGBM进行特征筛选的方法1 Gradient Boosting算法回顾 Gradient Boosting 基本原理 训练一个模型m1,产生错误e1针对e1训练一个模型m2,产生错误e2针对e2训练第三个模型m3,产生错误e3 …最终预测结果是:m1+m2+m3+…GB…