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

news2024/11/15 6:47:44

目录

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.coloradmin.cn/o/1666539.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sscanf字符串解析

ATCIPSNTPTIME? //发生的指令 CIPSNTPTIME:Tue Oct 19 15:17:56 2021 //回复的数据 //接受数据缓存 char* recvStrBuf "CIPSNTPTIME:Tue Oct 19 15:17:56 2021"; char* weekStr; char* monthStr; int day,hour,minute,second,year; sscanf(recvStrBuf,""…

Emacs之取消sh-mode模式下:快捷键C-c C-c(一百三十七)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

第十三篇:智慧之网:深度探索关系型数据库的数学奥秘与实战技艺

智慧之网:深度探索关系型数据库的数学奥秘与实战技艺 1. 引言 1.1 数据时代的基石 在数字化的浪潮中,数据已成为新时代的石油,而关系型数据库则是这座数据矿藏的精炼厂。自E.F. Codd在1970年提出关系模型以来,关系型数据库以其坚…

VScode通过ssh远程连接服务器被拒绝:permission denied, please try again

使用场景: 使用windows系统下的vscode远程连接服务器的linux系统,终端提示permission denied, please try again,但是使用cmd是可以远程登录的。 解决办法: 前提条件windows端的vscode安装了ssh远程连接的相关插件Remote - SSH,…

C++ vs Rust vs Go 性能比较

本文对C、Rust和Go三种编程语言编写的gunzip程序进行了性能比较,通过基准测试试图尽可能公平的比较它们的性能。原文: Performance — C vs Rust vs Go 本文将通过一些基准测试,比较 C 和 Rust 以及 Go 编写的相同程序的性能。我们将尽最大努力将语言差异…

Vivado功耗之散热模型详解

目录 一、前言 二、热模型 三、结温计算 四、散热器计算 五、参考资料 一、前言 ​在功耗评估中,Vivado中report power流程以及XPE中都有关于environment的配置,该界面配置涉及到多个晦涩的概念,之前的文章中也对相关概念进行过翻译&…

ctfshow web274

web274 thinkphp框架序列化漏洞 EXP <?php namespace think; abstract class Model{protected $append[];private $data[];function __construct(){$this->append["lin">["ctf","show"]];$this->data["lin">new Req…

前置知识

操作系统概述 硬件和软件 计算机是由硬件和软件组成的 硬件&#xff1a;计算机系统中由电子&#xff0c;机械和光电元件等组成的各种物理装置的总称。包括鼠标&#xff0c;键盘&#xff0c;cpu等。 软件&#xff1a;是用户和计算机硬件之间的接口和桥梁&#xff0c;用户通过…

学浪app的课程怎么导出来

在这个知识如星辰般璀璨的时代&#xff0c;学浪app汇聚了无数智慧的火花&#xff0c;点亮了求知者的前行之路。你是否曾在学浪的海洋中遨游&#xff0c;汲取知识的甘露&#xff0c;却渴望将那些珍贵的课程内容&#xff0c;如同宝藏一般&#xff0c;从数字的海洋中提取出来&…

linux 安装 mangodb 并设置服务开机自启

1、下载 wget http://mosquitto.org/files/source/mosquitto-1.6.8.tar.gz 2、解压 tar -zxvf mosquitto-1.6.8.tar.gz 3、编译安装cd mosquitto-1.6.8 make sudo make install4、在当前目录。进入mosquitto服务文件存放的文件夹 cd service/systemd可以看到3个文件 点击read…

单链表经典算法LeetCode--203.移除链表元素(两种方法解)

1.链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09;【点击即可跳转】 分析此题提供两种思路&#xff1a; 1.遍历原链表&#xff0c;将值为val的节点释放掉&#xff08;双指针法&#xff09; 定义一个pcur指针指向头节点&#xff0c;定义一个prev指针指向NULL 需要注…

Apache Flume事务

Apache Flume 中的事务处理是指 Flume Agent 在处理事件流时的一种机制&#xff0c;用于确保数据的可靠传输和处理。 1. 事务概述&#xff1a; Flume 中的事务是指一组事件的传输和处理&#xff0c;这些事件在传输过程中要么全部成功完成&#xff0c;要么全部失败&#xff0…

耦合协调分析模型

耦合协调分析模型&#xff08;Coupling Coordination Analysis Model&#xff09;是一种用于评估两个或多个系统之间相互作用和协调性的数学模型。广泛应用于多个领域&#xff0c;包括但不限于社会科学、经济学、环境科学和工程学。耦合协调分析模型的核心在于量化系统间的耦合…

关键点检测——面部情绪数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

紫光计算机项目卓越中心负责人孙宇受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 紫光计算机科技有限公司信息技术中心项目总监&卓越中心负责人孙宇先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“PMO卓越中心核心能力拆解与落地-用创新绘制新蓝图”。大会将于6月29-30日在北京举办&#xff0c…

c++:刷题必备 容器map的使用

文章目录 map的概念map的使用构造![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/30e9a697b50d47a591af6e9ae2bbb7d7.png)insert迭代器遍历 findoperator[]举例 map的概念 map是一个关联容器,里面的每一个位置pair,会存储两个值,一个是key,另一个是value. 我们可以…

使用docker安装seafile

使用docker安装seafile 1 介绍seafile Seafile 是一款开源的企业云盘&#xff0c;支持全平台&#xff08;浏览器、Windows、Mac、Linux、Android、IPhone等&#xff09;客户端。Seafile 内置协同文档 SeaDoc &#xff0c;让协作撰写、管理和发布文档更便捷。最重要的这是国产…

一件事做了十年

目录 一、背景二、过程1.贫困山区的心理悲哀2.基础差的客观转变3.对于教育的思考4.持续做这件事在路上5.同行人有很早就完成的&#xff0c;有逐渐放弃的&#xff0c;你应该怎么办&#xff1f;6.回头看&#xff0c;什么才是最终留下的东西? 三、总结 一、背景 在哪里出生我们无…

关于一致性,你该知道的事儿(下)

关于一致性&#xff0c;你该知道的事儿&#xff08;下&#xff09; 前言一、并发修改单个对象1.1 原子写操作1.2 显示加锁1.3 原子的TestAndSet1.4 版本号机制 二、 多个相关对象的一致性2.1 最大努力实现2.2 2PC && TCCC2.3.基于可靠消息的一致性方案2.4.Saga事务 三、…

docker搭建redis6.0(docker rundocker compose演示)

文章讲了&#xff1a;docker下搭建redis6.0.20遇到一些问题&#xff0c;以及解决后的最佳实践方案 文章实现了&#xff1a; docker run搭建redisdocker compose搭建redis 搭建一个redis’的过程中遇到很多问题&#xff0c;先简单说一下搭建的顺序 找一个redis.conf文件&…