【STM32学习】搭建一个简单的 keil5 工程

news2024/11/19 5:47:41

一、安装 pack 支持包

pack是支持包文件,当你的板子连接到电脑时,keil5 怎么知道你的板子是哪个型号的,这就需要用到 pack 文件了。Keil 官方下载pack文件的地址:download | device pack

我这里使用的是 STM324 系列

随后直接一键下载,下载完毕后双击安装,它会自动检测你电脑上的keil软件的安装目录,然后自动安装。

后面你新建工程时,就会多出一个系列的选项

二、下载外设库

没有外设库的时候,我们需要一边看开发手册一边手动配置寄存器了,现在有了外设库,外设库封装了外设寄存器的操作,不必再手动配置寄存器,极大地提升了开发效率。

ST 官方外设库下载:STM32 Standard Peripheral Libraries - Products

不过这里可能需要先注册一下,注册流程比较简单,输入姓名和邮箱,然后在邮箱验证即可。整个过程花费的时间不会很长。

下载好以后就可以看到类似于下面的压缩包了,这里不光包含了外设库函数,也给了每种外设的操作示例。

 

三、搭建工程

搭建工程的关键是将一些必要文件引入到我们的工程中,至于我们的工程具体需要哪些文件,可以参考下面的工程结构图。

1、启动文件

程序运行之前需要先初始化运行环境

  • 堆栈初始化
  • 初始化中断向量表
  • 调用复位中断服务函数
  • 调用 SyStemInit 函数进行其他初始化
  • main 函数跳转

这一切的操作都由 启动文件 startup_stm32f40xx.s 文件来完成,一般 .s 文件用汇编编写。其中 SyStemInit 函数在 system_stm32f4xx.h 文件中,对应的源文件 system_stm32f4xx.c 只能在官方提供的Example中找到。

文件名位置
startup_stm32f40xx.sLibraries—CMSIS—Device—ST—STM32F4xx—Source—Templates—arm
system_stm32f4xx.hLibraries—CMSIS—Device—ST—STM32F4xx—Include
system_stm32f4xx.cProject—STM32F4xx_StdPeriph_Examples—ADC—ADC_DMA

注意:如果是stm32f10x 系列,启动文件会带有后缀,后缀的意义如下

2、外设寄存器和外设库

stm32f4xx.h 中保存了 STM32 操作各个外设所需的寄存器地址。stm32f4xx.h 中包含的部分内容:

外设库包含了操作外设的具体函数实现。其中 misc.c 包含了一些内核操作,如修改中断向量表偏移,其余文件都是一些常见的外设操作具体实现。

为了更加方便的使用外设库,ST 在例程中给我们提供了一个文件 stm32f4xx_conf.h,该文件可以一次引入所有的外设。(如果后续要使用该头文件,需要添加宏 USE_STDPERIPH_DRIVER)

文件名位置
stm32f4xx.hLibraries—CMSIS—Device—ST—STM32F4xx—Include
外设库

源文件:Libraries—STM32F4xx_StdPeriph_Driver—src

头文件:Libraries—STM32F4xx_StdPeriph_Driver—inc

stm32f4xx_conf.hProject—STM32F4xx_StdPeriph_Examples—ADC—ADC_DMA

3、内核寄存器

core_cm4.h 主要涉及到一些内核方面的配置。core_cmFunc.h、core_cmInstr.h、core_cmSimd.h是core_cm4.h 相关联的头文件

文件名位置
core_cm4.hLibraries—CMSIS—Include

core_cmFunc.h

core_cmInstr.h

core_cmSimd.h

Libraries—CMSIS—Include

4、中断处理函数文件

stm32f4xx_it.c 文件包含了一些中断处理函数的具体实现,如SVC中断、总线错误中断。

文件名位置

头文件:stm32f4xx_it.h

源文件:stm32f4xx_it.c

Project—STM32F4xx_StdPeriph_Examples—ADC—ADC_DMA

 

四、整理

现在大致了解了一个基本的工程需要哪些文件,下面就需要将这些文件分开存放,全堆到一起未免太乱了。

1、Start目录

这个目录下保存一些启动所需的文件,如 startup_stm32f40xx.s、system_stm32f4xx.h。除此之外,我们将一些平时不会改动的文件也放到这里。

2、Library 目录

该目录就用于保存外设库的头文件和源文件。这里直接把原本的 inc 和 src 目录拷贝过来了

3、User 目录

该目录下就保存 main 函数以及一些可能需要使用或者修改的文件

五、新建 Keil 工程中添加宏定义

如果要使用头文件 stm32f4xx_conf.h ,需要添加宏 USE_STDPERIPH_DRIVER

如果报错,可以双击跳转,下面这个错误是需要添加当前开发板型号的宏 STM32F40_41xxx

 

参考文章:

学习使用HAL库进行STM32软件开发 | 安装keil-MDK及STM32F4支持包 | 2022.4.5/星期二/天气晴_杨肉师傅的博客-CSDN博客

下载stm32f4xx标准外设库_stm32f4支持包下载_枫中眸zc的博客-CSDN博客

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

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

相关文章

Nginx运行Vue项目:基本运行

需求 在Nginx服务器中,运行Vue项目。 说明 Vue项目打包生成的生产文件,是无法直接在浏览器打开的。需要放到Nginx服务器中,才能够访问。 本文章只介绍最基本的情况:Nginx中运行一个Vue项目。 实际生产环境,一个Ng…

Qt开发实现字幕滚动效果

1、效果展示 我们经常能够在外面看到那种滚动字幕,那么就拿qt来做一个吧。 2、实现思路 实现一个窗口部件,这个窗口部件显示了一串文本标语,它会每t毫秒向左移动一个像素。如果窗口部件比文本宽,那么文本将会被多次重复,直到能够填满整个窗口部件的宽度…

设计模式之原型模式Prototype的C++实现

1、原型模式提出 在软件功能设计中,经常面临着“某些结构复杂的对象”的创建工作,且创建的对象想拥有其他对象在某一刻的状态,则可以使用原型模型。原型模型是通过拷贝构造函数来创建对象,并且该对象拥有其他对象在某一刻的状态。…

嵌入式设备应用开发(linux应用的几个场景)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 linux内核是可以裁剪的,所以除了pc电脑可以用linux之外,小的嵌入式设备其实也可以用linux。前面我们讨论了soc的各个驱动,本质上还是要把这些外设用起来。操作系统帮助我们把这些…

go语言恶意代码检测系统--对接前端可视化与算法检测部分

Malware Detect System 1 产品介绍 恶意代码检测系统。 2 产品描述 2.1 产品功能 功能点详细描述注册账号未注册用户注册成为产品用户,从而具备享有产品各项服务的资格登录账号用户登录产品,获得产品提供的各项服务上传恶意样本用户可以将上传自己的…

虹科分享 | 使用工业无线方案的包装机械运输轨道系统将会是什么样子的?

背景 包装机械制造商正面临着大规模定制和客户动态需求的新挑战。随着包装机械设计向工业4.0迈进,灵活性、更高的吞吐量和减少停机时间成为关键要求。柔性制造系统需要具备快速更换新产品类型、重新安排操作以及根据产量和产能的重大变化进行调整的能力。因此&…

北京开发者社区简介

标题 北京城市开发者社区简介导语简介技术交流与分享创新与创业平台城市发展与科技应用线上线下活动获益和奖励 展望未来加入我们往期活动照片 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客👦🏻 《java 面试题大全》 🍩惟余…

【ARM】Day4 点亮LED灯

1. 思维导图 2. 自己编写代码实现三盏灯点亮 .text .global _start _start: /**********LED1,LED2,LED3点灯:PE10,PF10,PE8**************/ RCC_INIT:使能GPIOE组/GPIOF组控制器,通过RXCC_MP_AHB4ENSETR设置第[5:4]位写1,地址:0x50000A28[5:4]1ldr r0,0x50000A28 …

c#设计模式-结构型模式 之 桥接模式

前言 桥接模式是一种设计模式,它将抽象与实现分离,使它们可以独立变化。这种模式涉及到一个接口作为桥梁,使实体类的功能独立于接口实现类。这两种类型的类可以结构化改变而互不影响。 桥接模式的主要目的是通过将实现和抽象分离,…

kafka线上问题优化

如何防止消息丢失 生产者: 使用同步发送把ack设成1或者all(非0,0可能会出现消息丢失的情况),并且设置同步的分区数>2 消费者:把自动提交改成手动提交 如何防止重复消费 在防止消息丢失的方案中&#…

软件测试人员每天的工作日常

我现在每天9点左右从家里出发,9点半左右到公司,到公司之后王豆豆首先用养生壶煮一壶好茶,工作忙碌时也要记得多喝水,然后一边听着煮茶声一边写着当天的工作计划,工作计划主要包括当天工作内容、学习计划和总结。 计划…

Mysql之 optimizer_trace 相关总结

Mysql之 optimizer_trace 相关总结 MySQL官网介绍:https://dev.mysql.com/doc/dev/mysql-server/latest/PAGE_OPT_TRACE.html 1. 简介 MySQL优化器可以生成Explain执行计划,通过执行计划查看sql是否使用了索引,使用了哪种索; 但…

饿了么大数据开发凉经

1 一个mapreduce进程会启动多少map进程多少reduce进程* 1)map数量由处理的数据分成的block数量决定default_num total_size / split_size; 2)reduce数量为job.setNumReduceTasks(x)中x 的大小。不设置的话默认为 1。 2 讲下shuffle的过程 shuffle分为…

【Python dxfgrabber+matplotlib】显示AutoCAD导出的.dxf格式文件

代码: import dxfgrabber,matplotlib import matplotlib.pyplot as plt from matplotlib.patches import Polygonmatplotlib.use(TkAgg)# 使用 dxfgrabber 库加载 DXF 文件 drawing dxfgrabber.readfile(files/Main board0.DXF)# 创建 Matplotlib 图形 fig, ax p…

【无线点对点网络时延分析和可视化】模拟无线点对点网络中的延迟以及物理层和数据链路层之间的相互作用(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Stimulsoft Reports 2023Crack

Stimulsoft Reports 2023Crack Stimulsoft Reports.BLAZOR是一个跨平台的报告工具,用于集成应用程序,使用BLAZOR框架工作。我们的组件支持Blazor的所有主要功能。通过使用WebAssembly技术,它们既可以在.NET服务器端工作,也可以在…

Linux学习之firewallD

systemctl status firewalld.service查看一下firewalld服务的状态,发现状态是inactive (dead)。 systemctl start firewalld.service启动firewalld,systemctl status firewalld.service查看一下firewalld服务的状态,发现状态是active (runni…

贪心(一)

一、区间问题 1.1区间选点 #include<iostream> #include<algorithm>using namespace std;const int N 100010;int n; struct Range {int l,r;bool operator < (const Range &w)const{return r < w.r;} }range[N];int main() {scanf("%d",&a…

JVM元空间溢出的排除思路

背景&#xff1a; java的应用我们为了防止元空间的无限扩展&#xff0c;一般都会设置MaxMetaSpace参数&#xff0c;一般来说只要这个值是512M或者1G左右就足够了&#xff0c;不过今天遇到一个meta空间溢出问题&#xff0c;简单记录下排除的思路 meta元空间溢出 最开始的现象…

【Vue3.0 ——指令学习】

v-text 期望值是string v-html 期望值&#xff1a;string 注意&#xff1a;在你的站点上动态渲染任意的HTML是非常危险的&#xff0c;因为他很容易导致XSS攻击。请只对可信内容使用HTML差值&#xff0c;绝不要将用户提供的内容作为插值 scoped将不会作用于v-html&#xff0…