【STM32】从新建一个工程开始:STM32 新建工程的详细步骤

STM32 开发通常使用 Keil MDKSTM32CubeMXIAR 等工具来创建和管理工程。此处是 使用 Keil MDK5 + STM32CubeMX 创建 STM32 工程的详细步骤。

新建的标准库工程文件已上传至资源中,下载后即可直接使用。

标准库新建 STM32 工程的基本目录结构:STD_STM32F103RC_Demo

1. 新建 STM32 工程的基本目录结构

在 STM32 工程中,通常会有以下几个文件夹:
工程构架
新建工程

外设库(FWLib):存放 STM32 官方提供的驱动库,例如 HAL 库或标准外设库(StdPeriph Lib
用户文件(USER):存放用户编写的代码,如 main.c
工程文件(MDK-ARM):存放 Keil 相关的 *.uvprojx 工程文件
核心文件(COER):CMSIS 核心支持库
编译中间文件(OBJ):存放编译过程中生成的 .o 文件
系统文件(SYSTEM):存放 STM32 系统初始化相关的 system_stm32f10x.c

2. 使用 STM32CubeMX 生成工程

⭐ 2.1 安装必要的软件
Keil MDK-ARM(用于编写和编译代码)
STM32CubeMX(用于生成初始化代码)
ST-Link 驱动 和 FlyMcu(用于调试和烧录)

⭐ 2.2 创建 STM32CubeMX 工程

  1. 打开 STM32CubeMX,点击 “New Project
  2. 选择目标 STM32 芯片(例如 STM32F103C8T6)
  3. 配置文件:时钟(RCC)、串口(USART)、GPIO、定时器(TIM)等外设
  4. 选择代码生成方式
    • 库类型:HAL 库(推荐)或 LL 库
    • IDE 选择:Keil MDK-ARM
  5. 点击“Generate Code” 生成工程
    流程一
    流程二
    流程三
标准库移植 STM32F10x_StdPeriph_Lib_V3.5.0:

标准库目录:
在这里插入图片描述
移植第一 步在 COER 文件夹下:

G:\(stm32)\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport
文件夹下的文件:

在这里插入图片描述
文件夹:

G:\(stm32)\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm
添加文件:startup_stm32f10x_hd.s   和    startup_stm32f10x_md.s

在这里插入图片描述
移植第二步在 USER 文件夹下:
进入标准库的文件夹中:

G:\(stm32)\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x

在这里插入图片描述
在标准库的文件夹中:

G:\(stm32)\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template

在这里插入图片描述

移植第三步在 FWLib 文件夹下:

G:\(stm32)\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver
将 文件夹 inc 和 src 复制到工程目录的 FWLib 下

在这里插入图片描述
第四步 在 Keil uVision5 中新建的工程目录中,将标准库的 .c.h 文件分别加入在工程中:
在这里插入图片描述
在这里插入图片描述

以上。便添加完成了标准库中的所有 .c 文件,之后点击魔法棒,开始添加 .h 文件。

第一步:改为V5版本:
在这里插入图片描述
第二步:进入C/C++目录下新增目录:

\COER
\FWLib\inc
\USER

在这里插入图片描述
在这里插入图片描述
然后在 Define 中添加宏:

STM32F10X_HD,USE_STDPERIPH_DRIVER

点击 OK 结束。以上,便完成了标准库的前置配置。接下来我们测试一下代码是否能够调试与运行↓:

在这里插入图片描述
配置一下,将生成文件的目录放在OBJ文件夹下:
在这里插入图片描述

LED 亮灭:写一段点亮 LED 灯的代码:

main.c 中编写代码:

int	 main(void)
{GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStruct);GPIO_WriteBit(GPIOC, GPIO_Pin_7, Bit_RESET);}
编译工程
  • 点击“Build”按钮(F7)编译代码
  • 若无报错,生成 *.hex 文件

然后点击编译:此时会将代码生成至OBJ文件夹下:
打开 FlyMcu.exe
在这里插入图片描述
在这里插入图片描述
这里按一下开发板上的复位键(记得此时开发板的按钮开关模式为 ISR)

开发板的 ISR(Interrupt Service Routine)和 RUN(运行模式)ISR(中断服务程序) 是 当外部或内部事件发生时,CPU 自动执行的特定函数,用于响应和处理中断事件。
📌 1.1 ISR 主要用于:外部中断(按键、传感器触发)定时器中断(周期性任务、PWM 计时)串行通信中断(USART、I2C、SPI 数据接收)DMA 传输完成中断异常处理(如硬件故障)✅ 1.2 ISR 的运行流程1.中断发生(如 GPIO 触发、定时器超时)。2.CPU 停止当前任务,保存上下文(寄存器、堆栈)。3.跳转到 ISR 处理程序,执行中断任务。4.ISR 结束,恢复原任务,继续运行。在嵌入式系统中,RUN 模式指的是 MCU 正常运行的状态。
📌 MCU 可能有多种运行模式,如:RUN 模式(正常运行)SLEEP 模式(低功耗模式,CPU 暂停但外设运行)STOP 模式(更低功耗,RAM 保持但 CPU 停止)STANDBY 模式(最低功耗,RAM 断电)

流程四
以上。代码便烧录成功了。然后将按钮切换至 RUN 运行模式,
请添加图片描述
测试成功。以上,是标准库新建工程的流程。

以上。仅供学习与分享交流,请勿用于商业用途!转载需提前说明。

我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
感谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/73373.shtml

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

相关文章

探索 Trossen AI:从 Aloha到智能机器人平台的进化之路

在人工智能与机器人技术快速发展的当下,科研硬件的性能与成本成为影响行业创新的重要因素。Trossen Robotic为在机器人领域二十余年的知名企业,近日推出的 Trossen AI 系列产品,为科研机构与开发者提供了高性能、高性价比的解决方案。 Trosse…

C语言:5.20程序练习题

打印一个菱形图案。程序分为两部分&#xff1a;上半部分和下半部分。上半部分打印一个逐渐增大的星号图案&#xff0c;下半部分打印一个逐渐缩小的星号图案。 #include<stdio.h> int main() {int row 5;//定义行数int t 2;for (int i row; 0 < i; i--){for (int k…

一些docker命令

一、基础命令 查看 Docker 版本 docker --version 或 docker version&#xff1a;显示 Docker 客户端和服务器的版本信息。 查看 Docker 系统信息 docker info&#xff1a;显示 Docker 系统的详细信息&#xff0c;包括镜像、容器数量、存储驱动类型等。 Docker 服务管理 s…

C语言内容

C语言是一门经典且广泛应用的编程语言&#xff0c;具有以下基础要点&#xff1a; 基本数据类型 包括整型&#xff08;如 int &#xff09;、字符型&#xff08; char &#xff09;、浮点型&#xff08; float 和 double &#xff09;等&#xff0c;用于定义不同类型的变量来…

Python----数据可视化(Pyecharts一:介绍安装,全局配置,系列配置)

一、PyEcharts介绍 1.1、概况 Echarts 是一个由百度开源的数据可视化&#xff0c;凭借着良好的交互性&#xff0c;精巧的图表设计&#xff0c;得到了众多开发者的认可。而 Python 是一门富有表达力的语言&#xff0c;很适合用于数据处理。当数据分析遇上数据可视化时&#xff…

dockerfile 编写入门

Dockerfile编写指南 Dockerfile是一个文本文件&#xff0c;其中包含了一系列的指令和参数&#xff0c;用于定义如何构建Docker镜像。一个良好编写的Dockerfile不仅可以确保镜像的构建过程高效、可靠&#xff0c;还可以使得镜像更加安全和易于维护。 1. Dockerfile基本结构和语…

Git 本地常见快捷操作

Git 本地常见快捷操作 &#x1f4cc; 1. 基本操作 操作命令初始化 Git 仓库git init查看 Git 状态git status添加所有文件到暂存区git add .添加指定文件git add <file>提交更改git commit -m "提交信息"修改最后一次提交信息git commit --amend -m "新…

如何处理PHP中的文件上传错误

如何处理PHP中的文件上传错误 在Web开发中&#xff0c;文件上传是一个常见的功能需求。然而&#xff0c;文件上传过程中可能会遇到各种错误&#xff0c;如文件大小超出限制、文件类型不被允许、上传过程中断等。为了确保用户能够顺利上传文件&#xff0c;并且开发者能够有效地…

Linux--普通文件的管理

目录 1、创建根目录结构中的所有的普通文件 2、列出所有账号的账号名 3、将/etc/passwd中内容按照冒号隔开的第三个字符从大到小排序后输出所有内容 4、列出/etc/passwd中的第20行-25行内容 head命令 tail命令 5、切割出你的ip地址和mac地址 ip地址 MAC地址 6、切割…

【SpringMVC】常用注解:@RequestBody

1.作用 用于获取请求实体内容&#xff0c;直接使用得到的是keyvalue&keyvalue的数据。获取请求实体内容不适用get请求。 2.属性 required 描述是否有请求体&#xff0c;默认值为true。当取值为true时&#xff0c;get 请求方式会报错。如果取值为false&#xff0c;get请…

RK3588 远程 SSH时出现WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 翻译过来就是 警告&#xff1a;远程主机标识已更改&#xff01; 此报错是由于远程的主机的公钥发生了变化导致的。 ssh服务是通过公钥和私钥来进行连接的&#xff0c;它会把每个曾经访问过计算机或服务器的公钥&#xff…

Go红队开发—web网络编程

文章目录 web网络编程Req快速请求 调试DevModeDebugLogTraceInfo瓶颈分析 控制请求与响应控制请求的字段内容控制调试打印的内容分开dump请求与响应部分请求体设置 作用范围级别设置参数查询URL 路径参数表单请求设置请求头设置 判断响应状态码解析数据SetSuccessResultgjson响…

PawSQL for TDSQL:腾讯云TDSQL数据库性能优化全攻略

TDSQL 作为腾讯云推出的分布式数据库&#xff0c;凭借其高扩展性、高可用性和高性能等优势&#xff0c;广泛应用于金融、互联网、政务等领域。随着业务的不断增长和数据量的爆炸式增长&#xff0c;如何优化 TDSQL 数据库的性能&#xff0c;成为众多企业和开发者面临的挑战。本文…

67.Harmonyos NEXT 图片预览组件之性能优化策略

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; Harmonyos NEXT 图片预览组件之性能优化策略 文章目录 Harmonyos NEXT 图片预览组件之性能优化策略效果预览一、性能优化概述1. 性能优化的关键指标…

C语言中的字符串与数组的关系

在C语言中,字符串和数组之间有着紧密的关系。理解它们的区别和联系对于编写高效且可靠的代码至关重要。在本篇博文中,我们将详细分析字符串和数组在C语言中的概念、它们的关系以及如何在编程中应用它们。 一、字符串与数组的基础知识 1.1 数组概念 在C语言中,数组是一组相…

56.HarmonyOS NEXT 登录模块开发教程(十):总结与展望

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; HarmonyOS NEXT 登录模块开发教程&#xff08;十&#xff09;&#xff1a;总结与展望 文章目录 HarmonyOS NEXT 登录模块开发教程&#xff08;十&a…

添加 ChatGPT/Grok/Gemini 到浏览器搜索引擎

添加 ChatGPT/Grok/Gemini 到浏览器搜索引擎 添加 ChatGPT/Grok/Gemini 到浏览器搜索引擎如何添加步骤 1: 打开浏览器设置步骤 2: 添加新搜索引擎步骤 3: 保存设置 注意事项 添加 ChatGPT/Grok/Gemini 到浏览器搜索引擎 在使用 ChatGPT/Grok/Gemini 进行对话时&#xff0c;每次…

【数据分享】2000—2024年我国省市县三级逐月归一化植被指数(NDVI)数据(Shp/Excel格式)

之前我们分享过2000—2024年逐月归一化植被指数&#xff08;NDVI&#xff09;栅格数据&#xff08;可查看之前的文章获悉详情&#xff09;&#xff0c;该数据来源于NASA定期发布的MOD13A3数据集&#xff01;很多小伙伴拿到数据后反馈栅格数据不太方便使用&#xff0c;问我们能不…

oracle中OS BLOCK的含义

在Oracle数据库中&#xff0c;OS BLOCK&#xff08;操作系统数据块&#xff09;是指操作系统层面上的数据块&#xff0c;它与Oracle数据库内部的逻辑存储单元BLOCK&#xff08;数据块&#xff09;有所区别但密切相关。以下是对OS BLOCK的详细解释&#xff1a; 定义与概念 OS BL…

深入理解Linux网络随笔(七):容器网络虚拟化--Veth设备对

深入理解Linux网络随笔&#xff08;七&#xff09;&#xff1a;容器网络虚拟化 微服务架构中服务被拆分成多个独立的容器&#xff0c;docker网络虚拟化的核心技术为&#xff1a;Veth设备对、Network Namespace、Bridg。 Veth设备对 veth设备是一种 成对 出现的虚拟网络接口&…