STM32入门教程-2023版【2-2】总结新建工程顺序及工程架构

2023-12-20 13:55:35

关注?+ 点赞?不错过精彩内容

图片

大家好,我是硬核王同学,最近在做免费的嵌入式知识分享,帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作!?

八、总结新建工程的顺序

1. 建立工程文件夹, Keil 中新建工程,选择型号

2. 工程文件夹里建立 Start 、 Library 、 User 等文件夹,复制固件库里面的文件到工程文件夹

一定要将需要的文件加入到工程文件夹里面来,不要添加工程文件夹外面的文件,否则文件一旦挪位置,工程就找不到文件了,保持工程的独立性

3. 工程里对应建立 Start 、 Library 、 User 等同名称的分组,然后将文件夹内的文件添加到工程分组里

这一步是为了方便管理keil的文件,因为keil里面无法直接添加文件夹

.h文件不参与编译,但主动添加进来为了方便查看

4. 工程选项, C/C++ , Include Paths 内声明所有包含头文件的文件夹

start、library等文件夹是自己建的,keil软件并不知道,所以要用自己文件夹里面的.h文件,就必须声明一下路径,最好是把所有自己建的文件夹都声明,这样就不会出现.h文件找不到的问题了

5. 工程选项, C/C++ , Define 内定义 USE_STDPERIPH_DRIVER

这是使用库函数的条件编译,使用库函数就必须定义这个

6. 工程选项, Debug ,下拉列表选择对应调试器, Settings , Flash Download 里勾选 Reset and Run

选择调试器下载的选项,选择STLINK那一项即可

九、工程架构

这部分建议看视频学习!

1.启动文件

图片

首先?startup_xx.s?启动文件,这个是程序执行最基本的文件,也就是程序启动的第一个文件

keil中启动文件是用汇编写的,启动文件内部定义了中断向量表、中断服务函数等,中断服务函数中有一个复位中断,这是整个程序的入口

当STM32上电复位或者按下复位键时,程序就会进入复位中断函数的执行,复位中断函数主要做两件事情:一个是调用SystemInit函数,第二个是调用main函数,这部分代码对应启动文件这里:

图片

程序到ENDP就结束了,事实上单片机由于while的循环程序永远不会结束,在启动文件中,首先跳转到SystemInit的函数就是定义在这个system_xx.c/.h文件里的

图片

可以在keil中看到这个函数的定义,brief简介中写了函数的作用,是设置微控制处理器的启动,初始化嵌入式闪存接口、锁相环、更新系统内核的时钟变量,note部分写得是这个函数仅在复位后需要调用

图片

在这个函数下面这些代码就是用来配置这些东西的,不需要修改,只需要知道在main函数之前,单片机已经执行了一堆东西了,帮把这个闪存接口、时钟等一系列杂碎的东西都配置好了

图片

2.中断部分的执行逻辑

另外在启动文件中还定义了STM32所有的其他中断,这些中断达到条件后会自动执行

图片

图片

在启动文件下面这部,就是STM32其他的中断调用了 ,这个中断函数定义就是在stm32fx_it里面

打开stm32fx_it可以看到中断函数的定义

图片

ST还建议我们将中断写在这个位置,当然我们还是习惯在哪里用就写在哪里

图片

这些就是中断部分的执行逻辑了,另外可以自己定义一些用户文件,来封装一些模块来供主函数和模块中断调用,这有利于我们程序结构模块化,不然所有结构都堆在主函数里面,主函数会非常长

3.被动执行资源

以上是工程主动执行部分内容,剩下的是被动执行的东西了,相当于STM32的资源

在主函数或者中断函数里面就可以调用这些资源

图片

右上角是stm32f10x.h和core_cm3.c / .h分别是外设寄存器描述 ?内核寄存器描述

打开文件stm32f10x.h和core_cm3.c / .h可以看到,代码中寄存器和寄存器每一位的名字和对应的地址信息,直接调用寄存器来使用STM32(有些麻烦),这就是寄存器的开发方式,这种方式有些弊端还比较麻烦

图片

所以ST公司提供了库函数文件misc.c / .h、stm32f10x_adc.c / .h库函数

图片

打开库文件可以看到,这每个外设都提供了一大堆的函数,这些函数封装了寄存器的操作,给我们提供更加人性化的函数调用方式,只要学会了操作套路,那配置一个外设就是很简单的,连手册都不需要看一眼

图片

这个conf的文件就是用来配置头文件的包含关系的

图片

打开stm32f10x_conf.h文件可以看到,conf文件include所有库函数的头文件

图片

同时我们打开在stm32fx.h的最后,又包含了stm32f10x_conf.h,所以在使用这些库函数时只需要包括stm32f10x.h这一个头文件即可,就相当于包含了所有库函数的头文件,这样我们就可以任意调用库函数了

图片

作?者?:硬核王同学

-------?END------

关注公众号回复“加群”按规则加入技术交流群 ?回复“1024”查看更多内容

图片

文章来源:https://blog.csdn.net/qq_56921854/article/details/135103649
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。