一份标准的STM32工程模板都需要哪些文件?(B站江科大自化协)

Posted 一杯烟火

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一份标准的STM32工程模板都需要哪些文件?(B站江科大自化协)相关的知识,希望对你有一定的参考价值。

大家好,我是烟火。目前BMS软件工程师在职,利用自由时间,输出一些基础知识合集,一方面巩固,另一方面写博客作为成长记录。

人间清醒:
明明有能力可以变成更优秀的人 遇见更好的人 过更喜欢的生活 如果因为懒惰放弃了这种机会就太可惜了

一个完整的STM32工程到底由哪些文件组成?

应该是标准库文件+应用层代码。

接下来就以STM32入门教程的工程模板为例子进行梳理。

keil界面工程树。
我们看到整个项目只有一个Target1 也就是这个项目只有一个工程

(Keil一个项目可以包含多个工程的)

如下图所示整个项目包含了5个工程文件,可以通过设置选择特定的工程去运行。

本地磁盘中的项目


.uvprojx:工程文件(Keil V5)
User ,Start,Library文件夹是我们自己提前在项目中创建的,用来存放应用程序,和标准库文件。

而DebugConfig和Listings,Objects是我们在创建工程时自动生成的,用来存放一些调试文件。
Listing Files链接类型文件;
Object and HEX Files目标和Hex类型文件;
Debugger Files调试类型文件;

作为一个标准项目工程必须包含以下文件

汇编启动文件


就是startup_stm32f10x_md.s
该文件包含了STM32F10x微控制器的启动代码。它初始化设备并设置中断向量表。

启动代码执行以下任务:

  • 将堆栈指针设置为堆栈顶部。
  • 调用 SystemInit() 函数初始化系统。
  • 调用 main() 函数。

中断向量表在文件开头被定义。它包含每个中断的中断服务例程(ISR)的地址。ISR必须在应用程序代码中定义。

该文件应该被包含在项目中并与应用程序代码链接。

整个项目在上电的第一时间是运行的这个文件。

stm32f10xx.h

这是针对基于ARM Cortex-M3的STM32F10x微控制器系列的头文件。它包含了微控制器所支持的所有寄存器和外设的定义。该文件还包括用于配置和控制这些外设的宏和函数。

1 定义了HSE时钟频率的值

2 定义了启动HSE时钟的超时时间,HSI时钟频率的值

3 根据不同的芯片定义中断向量表结构体

4 包含一些头文件


这三个头文件的作用非常重要。下文进行讲解。

5 对一些数据类型进行重命名

6 为每个外设声明一个结构体类型,结构体中是外设的所有寄存器

7 内存地址分布

8 对每一个外设的基地址进行相应的结构体类型指针的强制类型转化,然后进行宏定义,这样就可以很轻松的对外设的寄存器进行操作。

9 对外设寄存器的位进行定义定义一些宏函数来方便开发人员对寄存器进行操作

10 定义USE_STDPERIPH_DRIVER


定义USE_STDPERIPH_DRIVER,包含了conf.h头文件。这一步非常重要。

core_cm3.h

CMSIS是Cortex微控制器软件接口标准(CortexMicroController Software Interface Standard)的缩写,这个是ARM定制的一个用于Cortex-M系列的一个标准,主要是为了提供通用api接口来访问内核和一些片上外设,提高代码的可移植性。

CMSIS有三个层:核内外设访问层CorePeripheral Access Layer(CPAL),中间件访问层Middleware Access Layer(MWAL),设备访问层(DevicePeripheral Access Layer)。

CPAL用于访问内核的寄存器和组件,如NVIC,调试系统等。该层是由ARM实现的。

MWAL用于对中间件的访问,现在该层还未实现。(也不知道所谓的中间件是什么东西)。

DPAL用于定义一些硬件寄存器的地址和一些外设访问函数,由芯片制造商实现。

CPAL层的实现就是Core_cm3.c文件,DPAL层的实现就是system_stm32f10x.c文件。

Core_cm3.c里有一些汇编关键字的宏定义,支持不同的编译器,还提供了访问内核寄存器的函数。在CMSIS升级到2.0版本时CMSIS的软件结构做了一些调整,去掉了core_cm3.c。ST的固件库也相应做了修改。在新的版本里只需要包含core_cm3.h,core_cmFunc.h,core_cmInstr.h,不需要core_cm3.c文件了。

提供了使用 NVIC的一些函数

外设基地址

stm32f1xx_conf.h

包含ST库的外设文件

此处定义

宏定义

system_stm32f1xx.h文件说明

system_stm32f1xx.h就是对一些时钟相关的函数进行声明,具体的函数实现在system_stm32f1xx.c中。

系统时钟设置

时钟函数

外设头文件

在STM32的开发中,外设头文件是非常重要的一种文件类型。它们是一组在C语言中定义的预编译指令,用于向编译器提供关于特定外设的信息。外设头文件的作用如下:

  1. 定义常量

外设头文件中定义了很多常量,这些常量可以用来设置外设的配置参数。比如,可以使用TIM2外设头文件中定义的常量来配置TIM2定时器的时钟分频系数。

  1. 定义数据类型

外设头文件中定义了很多数据类型,这些数据类型可以用来设置外设的寄存器。比如,可以使用GPIO外设头文件中定义的数据类型来设置GPIO的输入输出状态。

  1. 定义函数

外设头文件中定义了很多函数,这些函数可以用来操作外设。比如,可以使用DMA外设头文件中定义的函数来配置DMA通道的传输方式。

以上是关于一份标准的STM32工程模板都需要哪些文件?(B站江科大自化协)的主要内容,如果未能解决你的问题,请参考以下文章

STM32 学习6 CMSIS库函数标准及库函数工程模板

使用keil建立标准STM32工程模版

MDK524a新建STM32工程--标准外设库V3.5

新建工程—库函数版

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板