目录
一 、开发方法
1.直接使用程序来配置寄存器
2.基于库函数的方式
3.基于HAL库的方式
二 、常规的工程文件分类
STM32芯片型号分类以及缩写
三 步骤总结
四 工程架构
五 调用外设基本通用步骤
一 、开发方法
1.直接使用程序来配置寄存器
底层,直接,效率高,但是较为复杂。
在计算机体系结构中,寄存器是用于存储和处理数据的小型高速存储器。直接使用程序来配置寄存器通常是通过汇编语言或内嵌汇编(inline assembly)实现的。以下是一个简单的示例,展示了如何使用x86汇编语言直接设置寄存器的值:
section .data
; 定义一个常量,表示要设置的寄存器编号
register_num = 0x1234
section .text
global _start
_start:
; 将寄存器编号转换为对应的立即数
immediate_value = register_num
; 使用内嵌汇编设置寄存器的值
mov [register_address + immediate_value], al
; 退出程序
mov eax, 1
xor ebx, ebx
int 0x80
在这个例子中,我们首先定义了一个名为register_num的常量,表示要设置的寄存器编号。然后,在_start标签下,我们将寄存器编号转换为对应的立即数(immediate_value),并使用内嵌汇编(mov指令)将该值写入到指定的内存地址(register_address)。最后,我们使用xor和int指令退出程序。
请注意,这个示例仅适用于x86架构的计算机。对于其他架构(如ARM、MIPS等),代码将有所不同。此外,直接操作寄存器通常需要对底层硬件有较深入的了解,因此请谨慎操作。
2.基于库函数的方式
使用ST官方封装好的函数库,通过调用函数间接调用寄存器。
3.基于HAL库的方式
基于图形化界面快速配置。
二 、常规的工程文件分类
- Inc文件夹:用于存放头文件,包括库文件的头文件和自己编写的头文件。
- Src文件夹:用于存放源文件,包括库文件的源文件和自己编写的源文件。
- Lib文件夹:用于存放第三方库文件,如CMSIS、HAL库等。
- Doc文件夹:用于存放文档,包括工程说明、接口文档、用户手册等。
- Test文件夹:用于存放测试代码,包括单元测试、集成测试等。
- Build文件夹:用于存放编译生成的中间文件和可执行文件。
- Config文件夹:用于存放配置文件,包括编译选项、链接选项、调试选项等。
- Tools文件夹:用于存放工具脚本,如自动化构建脚本、自动化测试脚本等。
- 文件夹命名要简洁明了,尽量使用英文单词或缩写。
- 文件夹层次要清晰,避免过深嵌套。
- 文件夹内文件要分类存放,避免混乱。
- 保持统一性,不同工程的文件夹设置应该尽量保持一致。
STM32芯片型号分类以及缩写
缩写
|
释义
|
Flash容量
|
型号
|
LD_VL
|
小容量产品超值系列
|
16~32K
|
STM32F100
|
MD_VL
|
中容量产品超值系列
|
64~128K
|
STM32F100
|
HD_VL
|
大容量产品超值系列
|
256~512K
|
STM32F100
|
LD
|
小容量产品
|
16~32K
|
STM32F101/102/103
|
MD
|
中容量产品
|
64~128K
|
STM32F101/102/103
|
HD
|
大容量产品
|
256~512K
|
STM32F101/102/103
|
XL
|
加大容量产品
|
大于512K
|
STM32F101/102/103
|
CL
|
互联型产品
|
-
|
STM32F105/107
|
三 步骤总结
•建立工程文件夹,Keil中新建工程,选择芯片型号
- •工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹
- •工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里,点击魔术棒按钮添加路径,一定要将所需文件放到工程文件夹,不然一旦文件挪动文件将会丢失。.h文件一般是不参与编译的,但是加入.h文件后方便查阅。
- •工程选项->C/C++->Include Paths内声明所有包含头文件的文件夹
- •工程选项->C/C++->Define内定义USE_STDPERIPH_DRIVER,使用函数必须定义,(使用标准外设驱动)
- •工程选项->Debug->下拉列表选择对应调试器->Settings->Flash Download里勾选Reset and Run
- 在此解决中文乱码的问题:Configeration->Editor->Encoding->~~UTF-8~~~

- 配置调试模式,修改成ST-LinkDebugger
四 工程架构
startup_xx.s是启动文件,是程序执行最基本的文件,其中定义了中断向量表,中断服务等函数,
复位中断是程序入口,stm32在上电复位或者按键复位后就会出发复位中断,进而执行调SystemInit,调用main函数,SystemInit函数定义在system_xx.c/.h中。
以上就是主动执行的部分,此外还有被动执行的部分,库函数文件帮助我们实现对寄存器的封装,省去了大部分操作,库函数配置函数用来配置头文件包含关系,
五 调用外设基本通用步骤
- 配置外设的时钟:首先,需要配置外设所需的时钟源和时钟频率。这可以通过RCC(Reset and Clock Control)函数来完成。具体的步骤包括选择合适的时钟源和设置时钟分频器。
- 初始化外设的引脚:外设通常需要与微控制器的引脚进行连接。因此,需要配置相应的引脚功能和模式,以使其与外设进行通信。这可以通过GPIO(General Purpose Input/Output)函数来完成。
- 配置外设的参数:根据外设的要求,需要配置一些参数,例如数据传输模式、数据位宽、时钟极性和相位等。这可以通过外设的寄存器进行配置。
- 初始化外设:在配置完参数后,需要初始化外设。这可以通过外设的初始化函数来完成,该函数将设置外设的寄存器以使其处于预定的工作状态。
- 使用外设:一旦外设初始化完成,就可以使用外设进行数据传输或执行其他操作。这可以通过外设的读写寄存器、调用相应的函数或使用中断来实现。