当前位置: 首页 > article >正文

[STM32]新建工程||一个工程文件应该有哪些基本内容?

目录

一 、开发方法

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库的方式

基于图形化界面快速配置。

二 、常规的工程文件分类

在嵌入式开发中,为了方便管理和维护工程代码,可以按照以下规范设置工程内的文件夹:
  1. Inc文件夹:用于存放头文件,包括库文件的头文件和自己编写的头文件。
  2. Src文件夹:用于存放源文件,包括库文件的源文件和自己编写的源文件。
  3. Lib文件夹:用于存放第三方库文件,如CMSIS、HAL库等。
  4. Doc文件夹:用于存放文档,包括工程说明、接口文档、用户手册等。
  5. Test文件夹:用于存放测试代码,包括单元测试、集成测试等。
  6. Build文件夹:用于存放编译生成的中间文件和可执行文件。
  7. Config文件夹:用于存放配置文件,包括编译选项、链接选项、调试选项等。
  8. Tools文件夹:用于存放工具脚本,如自动化构建脚本、自动化测试脚本等。
以上是一种比较常见的文件夹设置规范,可以根据实际情况进行调整和扩展。在设置文件夹时,还需要注意以下几点:
  1. 文件夹命名要简洁明了,尽量使用英文单词或缩写。
  2. 文件夹层次要清晰,避免过深嵌套。
  3. 文件夹内文件要分类存放,避免混乱。
  4. 保持统一性,不同工程的文件夹设置应该尽量保持一致。
总之,规范的文件夹设置可以提高工程代码的可读性和可维护性,减少错误和重复工作,提高开发效率。

STM32芯片型号分类以及缩写

根据下面的表格,选择对应型号和Flash容量的启动凡是
缩写
释义
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中新建工程,选择芯片型号

  1. 工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹
  1. 工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里点击魔术棒按钮添加路径,一定要将所需文件放到工程文件夹,不然一旦文件挪动文件将会丢失。.h文件一般是不参与编译的,但是加入.h文件后方便查阅。
  1. 工程选项->C/C++->Include Paths内声明所有包含头文件的文件夹
  1. 工程选项->C/C++->Define内定义USE_STDPERIPH_DRIVER,使用函数必须定义,(使用标准外设驱动)
  1. 工程选项->Debug->下拉列表选择对应调试器->Settings->Flash Download里勾选Reset and Run
  1. 在此解决中文乱码的问题:Configeration->Editor->Encoding->~~UTF-8~~~

 

  • 配置调试模式,修改成ST-LinkDebugger

四 工程架构

startup_xx.s是启动文件,是程序执行最基本的文件,其中定义了中断向量表,中断服务等函数,

复位中断是程序入口,stm32在上电复位或者按键复位后就会出发复位中断,进而执行调SystemInit,调用main函数,SystemInit函数定义在system_xx.c/.h中。

以上就是主动执行的部分,此外还有被动执行的部分,库函数文件帮助我们实现对寄存器的封装,省去了大部分操作,库函数配置函数用来配置头文件包含关系,

五 调用外设基本通用步骤

基于标准库调用STM32的外设一般需要以下步骤:
  1. 配置外设的时钟:首先,需要配置外设所需的时钟源和时钟频率。这可以通过RCC(Reset and Clock Control)函数来完成。具体的步骤包括选择合适的时钟源设置时钟分频器
  2. 初始化外设的引脚:外设通常需要与微控制器的引脚进行连接。因此,需要配置相应的引脚功能和模式,以使其与外设进行通信。这可以通过GPIO(General Purpose Input/Output)函数来完成。
  3. 配置外设的参数:根据外设的要求,需要配置一些参数,例如数据传输模式、数据位宽、时钟极性和相位等。这可以通过外设的寄存器进行配置。
  4. 初始化外设:在配置完参数后,需要初始化外设。这可以通过外设的初始化函数来完成,该函数将设置外设的寄存器以使其处于预定的工作状态。
  5. 使用外设:一旦外设初始化完成,就可以使用外设进行数据传输或执行其他操作。这可以通过外设的读写寄存器、调用相应的函数或使用中断来实现。
需要注意的是,具体的步骤可能会根据不同的外设和使用的库而有所差异。因此,在使用特定的外设之前,建议查阅相关的文档和参考资料,以了解正确的配置和使用方法。

http://www.kler.cn/a/590308.html

相关文章:

  • zico2: 1靶场渗透测试
  • 深度学习知识:softlabel策略
  • 亚远景-汽车软件质量提升利器:ASPICE咨询深度解读
  • go语言的控制语句
  • 错误,程序包xxx不存在,Androidstudio报错解析
  • maven核心包:maven-model
  • AI学习第二天--监督学习 半监督学习 无监督学习
  • Maven的继承和聚合
  • 解决 Jupyter Notebook 中本地模块修改不生效的问题
  • 西门子PLC 博图(TIA Portal)与安川机器人进行Modbus TCP通信
  • QuickAPI:如何轻松实现数据库快速导入
  • Python----计算机视觉处理(Opencv:图像颜色替换)
  • Git下载安装(保姆教程)
  • 青少年编程与数学 02-011 MySQL数据库应用 02课题、MySQL数据库安装
  • C++高频(二)
  • uniapp实现页面左滑右滑切换内容
  • 【万字总结】构建现代Web应用的全方位性能优化体系学习指南(二)
  • UART转AHB总线接口参考设计介绍
  • CSS3学习教程,从入门到精通,CSS3 属性语法知识点及案例代码(4)
  • 学生选课管理系统数据库设计报告