STM32学习记录(1)创建工程
仅供个人学习,记录学习STM32中的要点,加深对知识的巩固
前言
首先我们编程的目的是操作硬件,而硬件在我们的处理器上都是以地址的方式存在。当我们访问某个硬件时,实际上就是访问这个硬件在我们CPU空间上的锁挂在的地址。而地址又被寄存器所记录。也就是说,在STM32中,每个外设和寄存器都有一个唯一的地址,可以使用该地址来读取或写入该外设或寄存器的值。
学好一个处理器的本质就是对寄存器的操作。如何用寄存器完成对代码的编写,可以加深如何操作一个CPU的理解。
第一个学习新的工程创建。
创建工程
- 启动Keil4软件,在菜单栏中选择“Project”->“New Project”。
- 在“Create New Project”对话框中,选择储存新项目的文件夹路径和文件名。
- 选择适合您的STM32微控制器类型。从“Device”中选择您的MCU型号,例如“STMicroelectronics->STM32F103RB”。
- 点击“OK”后,Keil4会自动为您创建一个新的项目。
- 在“Project”窗格中,您可以看到“Source Group”和“Header Group”。您可以在这些组中添加您的代码和头文件。
- 在“Source Group”中添加.c文件和.h文件。您可以右键单击“Source Group”并选择“Add New Item to Group”,然后选择您要添加的文件。
- 在“Options for Target”窗格中,您可以配置您的项目设置。例如,您可以选择编译器和链接器选项,以及编译选项和目标文件名等。
- 在“Project”菜单中,选择“Rebuild all target files”来构建和编译您的项目。如果没有错误,您可以在“Build”窗格中看到编译输出。
- 在构建和编译成功后,您可以通过“Flash”按钮将程序下载到您的MCU中。要进行此操作,请确保正确配置了下载选项和连接器。
配置文件与选项
文件配置
startup.stm32f10x_md.s
startup.stm32f10x_md.s是STM32F10x系列微控制器的启动文件。这个文件包含了一些基本的初始化代码,例如设置堆栈指针、设置中断向量表、配置时钟和外设等。在程序运行之前,处理器会先执行这个启动文件中的代码,以确保处理器和外设正确初始化并且准备好运行应用程序。
startup.stm32f10x_md.s文件是一个汇编代码文件,它包含了处理器启动和初始化的一些关键代码。这些代码主要负责:
-
设置堆栈指针。堆栈是程序运行时的一个关键数据结构,用于存储函数调用时的临时变量和返回地址。启动文件中的代码会设置堆栈指针,以确保程序能够正确地使用堆栈。
-
设置中断向量表。中断向量表是一张表格,存储了处理器中所有中断向量的地址。启动文件中的代码会设置中断向量表的地址,以确保程序可以正确地响应中断。
-
配置时钟和外设。处理器的时钟和外设是处理器能够正常工作的重要组成部分。启动文件中的代码会配置时钟和外设,以确保它们能够正常工作并与处理器正确通信。
startup.stm32f10x_md.s文件是STM32F10x系列微控制器的启动文件,它包含了处理器启动和初始化的一些关键代码,用于确保处理器和外设能够正确初始化并准备好运行应用程序。
system_stm32f10x.c
system_stm32f10x.c文件是一个C语言代码文件,它包含了处理器系统初始化的一些关键代码。这些代码主要负责:
-
初始化系统时钟。系统时钟是处理器运行的基础,启动文件中的代码会配置系统时钟,以确保处理器可以正确地运行。
-
初始化外设时钟和时钟分频器。外设时钟是处理器中的各种外设运行所需的时钟信号。启动文件中的代码会初始化外设时钟和时钟分频器,以确保外设可以正确工作。
-
初始化外设模块和寄存器。STM32F10x系列微控制器中有很多不同的外设模块和寄存器,它们需要初始化以使它们可以正确地工作。启动文件中的代码会初始化外设模块和寄存器,以确保外设可以正常工作。
选项配置
再进行选项卡的设置,比如宏的预处理:
-
STM32F10X_MD是STMicroelectronics推出的一款基于ARM Cortex-M3内核的32位微控制器系列,主要用于工业控制、汽车电子、医疗设备、安防监控等领域。其中,MD表示这个系列的器件具有中等密度的Flash存储器
-
USE_STDPERIPH_DRIVER是STMicroelectronics提供的一个HAL库的宏定义,用于指定使用标准外设驱动库(Standard Peripheral Library)。
相关路径的配置:
选择STLink的连接方式:
设备的选项情况:
当配置好上述文件后,创建main函数。
此时进行编译。注意这里并没有写任何代码,只是对创建一个新的工程进行编译。到这里,一个新的工程算是创建好了。