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

news2025/3/18 20:08:12

目录

一 、开发方法

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.coloradmin.cn/o/2317399.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python编写的一个打砖块小游戏

游戏介绍 打砖块是一款经典的街机游戏,玩家控制底部的挡板,使球反弹以击碎上方的砖块。当球击中砖块时,砖块消失,球反弹;若球碰到挡板,则改变方向继续运动;若球掉出屏幕底部,玩家失…

【菜鸟飞】通过vsCode用python访问公网deepseek-r1等模型(Tocken模式)

目标 通过vsCode用python访问deepseek。 环境准备 没有环境的,vscode环境准备请参考之前的文章,另外需安装ollama: 【菜鸟飞】用vsCode搭建python运行环境-CSDN博客 AI入门1:AI模型管家婆ollama的安装和使用-CSDN博客 选读文章…

Figma介绍(基于云的协作式界面设计工具,主要用于UI/UX设计、原型制作和团队协作)

文章目录 注册和登录简单操作说明Figma介绍**核心特点**1. **云端协作与实时同步**2. **跨平台兼容**3. **高效设计工具**4. **原型交互与动效**5. **开发对接友好**6. **插件生态**7. **版本控制与历史记录** **适用场景**- **团队协作**:远程团队共同设计、评审、…

Text-to-SQL将自然语言转换为数据库查询语句

有关Text-To-SQL方法,可以查阅我的另一篇文章,Text-to-SQL方法研究 直接与数据库对话-text2sql Text2sql就是把文本转换为sql语言,这段时间公司有这方面的需求,调研了一下市面上text2sql的方法,比如阿里的Chat2DB,麻…

XSS漏洞靶场---(复现)

XSS漏洞靶场—(复现) 反射型 XSS 的特点是攻击者诱导用户点击包含恶意脚本的 URL,服务器接收到请求后将恶意脚本反射回响应页面,浏览器执行该脚本从而造成攻击,恶意脚本不会在服务器端存储。 Level 1(反射型XSS) 此漏…

基于ssm的电子病历系统(全套)

一、系统架构 前端:jsp | bootstrap | jquery 后端:spring | springmvc | mybatis 环境:jdk1.8 | mysql | maven | tomcat | idea 二、代码及数据库 三、功能介绍 01. 登录 02. 主页 03. 管理员-个人中心-修改密码…

Linux-数据结构-线性表-单链表

一.链表的概念 【1】线性表的链式存储 解决顺序存储的缺点,插入和删除,动态存储问题。 【2】特点: 线性表链式存储结构的特点是一组任意的存储单位存储线性表的数据元素,存储单元可以是连续的,也可以不连续。可以被存…

基于SpringBoot的Mybatis和纯MyBatis项目搭建的区别

【由于之前学习MyBatis的时候是跟着视频敲的纯MyBatis项目,以至于在突然看到别人在SpringBoot项目里搭建MyBatis方式的时候很懵比…特此文字形式记录一下区别(应该还有好多种其他方式是我不知道的,主要应该就是要知道关键的流程步骤&#xff…

大数据学习(68)- Flink和Spark Streaming

🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…

Fastdata极数:中国民宿行业发展趋势报告2025

2024年,中国游客出行次数大幅上涨,旅游相关支出也复苏强劲。2025年中国旅游业还将持续稳健的复苏及增长。同时,中国旅游业将见证一场深刻的变革,这场变革的推动力是消费者对旅游期望的转变,经济因素和年轻人全新价值观…

图论——广度优先搜索实现

99. 岛屿数量 题目描述 给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。 输入描述 第一行包含两个整数 N, M,表示矩阵的行数和列数。 后续 N 行,每行…

鸿蒙路由 HMrouter 配置及使用一

1、学习链接 HMRouter地址 https://gitee.com/hadss/hmrouter/blob/dev/HMRouterLibrary/README.md 2、工程配置 下载安装 ohpm install hadss/hmrouter 添加编译插件配置 在工程目录下的build-profile.json5中,配置useNormalizedOHMUrl属性为true (我这项目创…

各省水资源平台 水资源遥测终端机都用什么协议

各个省水资源平台 水资源遥测终端机 的建设大部分从2012年开始启动,经过多年建设,基本都已经形成了稳定的通讯要求;河北瑾航科技 遥测终端机,兼容了大部分省市的通讯协议,如果需要,可以咨询和互相学习&…

需求分析、定义、验证、变更、跟踪(高软47)

系列文章目录 需求分析、定义、验证、变更、跟踪 文章目录 系列文章目录前言一、需求分析二、需求定义三、需求验证四、需求变更五、需求跟踪六、真题总结 前言 本节讲明需求分析、定义、验证、变更、跟踪相关知识。 一、需求分析 二、需求定义 三、需求验证 四、需求变更 五、…

从零开始 | C语言基础刷题DAY3

❤个人主页&#xff1a;折枝寄北的博客 目录 1.打印3的倍数的数2.从大到小输出3. 打印素数4.打印闰年5.最大公约数 1.打印3的倍数的数 题目&#xff1a; 写一个代码打印1-100之间所有3的倍数的数字 代码&#xff1a; int main(){int i 0;for (i 1; i < 100; i){if (i % …

docker入门篇

使用docker可以很快部署相同的环境,这也是最快的环境构建,接下来就主要对docker中的基础内容进行讲解.Docker 是一个用于开发、交付和运行应用程序的开源平台&#xff0c;它可以让开发者将应用程序及其依赖打包到一个容器中&#xff0c;然后在任何环境中运行这个容器&#xff0…

Unity Shader - UI Sprite Shader之简单抠图效果

Sprite抠图效果&#xff1a; 前言 在PhotoShop中我们经常会用到抠图操作&#xff0c;现在就用Shader实现一个简单的抠图效果。 实现原理&#xff1a; 使用当前像素颜色与需要抠掉的颜色相减作比较&#xff0c;然后与一个指定的阈值比较以决定是否将其显示出来&#xff1b; U…

vllm-openai多服务器集群部署AI模型

服务器配置是两台ubantu系统电脑,每台电脑安装两张4090-48G显存的显卡,共计192G显存。 服务器1 服务器2 准备工作: 1.两台电脑都已经安装了docker 2.两台电脑都已经安装了nvidia驱动 参考vllm官方资料 https://docs.vllm.ai/en/latest/serving/distributed_serving.html…

在Spring Boot项目中接入DeepSeek深度求索,感觉笨笨的呢

文章目录 引言1. 什么是DeepSeek&#xff1f;2. 准备工作2.1 注册DeepSeek账号 3.实战演示3.1 application增加DS配置3.2 编写service3.3 编写controller3.4 编写前端界面chat.html3.5 测试 总结 引言 在当今快速发展的数据驱动时代&#xff0c;企业越来越重视数据的价值。为了…

STM32---FreeRTOS事件标志组

一、简介 事件标志位&#xff1a;用一个位&#xff0c;来表示事件是否发生 事件标志组&#xff1a;一组事件标志位的集合&#xff0c;可以简单的理解时间标志组&#xff0c;就是一个整体。 事件标志租的特点&#xff1a; 它的每一个位表示一个时间&#xff08;高8位不算&…