零死角玩转stm32初级篇1-从零创建STM32工程模板

文章详细介绍了如何获取STM32的标准库源码,新建并配置MDK工程,包括下载资源、新建工程、MDK配置、硬件调试配置等步骤,以及源码下载信息。用户需访问ST官网下载相应资料,然后使用KeiluVision5创建工程,添加库文件和用户代码,最后调整MDK的编译输出和搜索路径,并进行硬件调试配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.获取 ST 库源码

进入官网(https://www.st.com/en/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus.html),下载相应的资源,比如DataSheet,编程手册,以及本篇构建项目需要的标准库。

  • 下载DataSheet

在这里插入图片描述

在这里插入图片描述

  • 下载编程手册

在这里插入图片描述

  • 下载标准库

进行下载的官网https://www.st.com/en/embedded-software/stm32-standard-peripheral-libraries.html,选择对应板子的型号。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

邮箱就会收到ST发来的短信,点击进行下载

在这里插入图片描述
在这里插入图片描述

  • 标准库文件介绍

对标准库文件进行解压,会得到如下几个文件,对应相关文件的解释来源于这篇博文,https://blog.csdn.net/cbkdgq/article/details/88076843

在这里插入图片描述

在这里插入图片描述

二. 开始新建工程

点击桌面 Keil uVision5图标,启动软件。如果是第一次使用的话会打开一个自带的工程文件,我们可以通过工具栏 Project->Close Project 选项把它关掉。关于Keil uVision5的安装,你可以参照这篇博文,https://blog.csdn.net/dengjin20104042056/article/details/108057907

  • 在工具栏 Project->New μVision Project… 新建我们的工程文件

在这里插入图片描述

  • 选择保存项目的路径和项目名

在这里插入图片描述

  • 选择芯片型号

在这里插入图片描述

  • 创建完毕

在这里插入图片描述

在这里插入图片描述

  • 如果创建的时候出现如下对话框,点击否即可,如果点击是的话就不需要自己手动添加相应的启动文件,后面我们会进行手动添加。

在这里插入图片描述

  • 在 Demo1 文件夹下(项目工程文件夹下),我们新建四个文件夹,分别为USET、 FWlib、CMSIS、Uotput

USER 用来存放工程文件和用户代码,包括主函数main.c 。 FWlib 用来存放 STM32 库里面的 inc 和 src 这两个文件,这两个文件包含了芯片上的所有驱动。 CMSIS 用来存放库为我们自带的启动文件和一些 M3系列通用的文件。 CMSIS 里面存放的文件适合任何 M3 内核的单片机。 CMSIS 的缩写为: Cortex Microcontroller Software Interface Standard ,是 ARM Cortex 微控制器软件接口标准,是 ARM 公司为芯片厂商提供的一套通用的且独立于芯片厂商的处理器软件接口。 Uotput 用来保存软件编译后输出的文件, Listing 用来存放一些编译过程中产生的文件,具体可不用了解。

在这里插入图片描述

  • 将下载的标准库文件STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\STM32F10x_StdPeriph_Driver下的inc 跟 src 这两个文件夹拷贝到 STM32-Template\FWlib 文件夹中

在这里插入图片描述

拷贝后的projects\Demo1\FWlib的内容如下:

在这里插入图片描述

  • 将STM32F10x_StdPeriph_Lib_V3.6.0\Project\STM32F10x_StdPeriph_Template 下的 main.c、stm32f10x_conf.h、stm32f10x_it.h、 stm32f10x_it.c 、system_stm32f10x.c 拷贝到 Demo1\USER目录下。

stm32f10x_it.h 、和stm32f10x_it.c 这两个文件里面是中断函数,里面为空,并没有写任何的中断服务程序。 stm32f10x_conf.h 是用户需要配置的头文件,当我们需要用到芯片中的某部分外设的驱动时,我们只需要在该文件下将该驱动的头文件包含进来即可,片上外设的驱动在 src 文件夹中, inc 文件夹里面是它们的头文件。这三个文件是用户在编程时需要修改的文件,其他库文件一般不需要修改。system_stm32f10x.c 是 ARM 公司提供的符合 CMSIS 标准的库文件。

在这里插入图片描述

在这里插入图片描述

  • 并将Demo1目录下的helloWolrd.uvoptx,helloWolrd.uvprojx移到USER目录下

在这里插入图片描述

  • 点击helloWolrd.uvprojx重新启动项目,并将 Demo1目录下的DebugConfig文件删除

在这里插入图片描述

  • 将下载资源\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm目录下的所有文件拷贝到Demo1\CMSIS\startup(需先在 CMSIS 新建好 startup 文件夹)文件夹下。

在这里插入图片描述
在这里插入图片描述

  • 将 下载资源\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\CoreSupport目录下的core_cm3.c和core_cm3.h拷贝到Demo1\CMSIS目录下

在这里插入图片描述

  • 将 下载资源\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x目录下的 stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h拷贝到 Demo1\CMSIS目录下

在这里插入图片描述

  • 此时我们新建的工程目录如下所示

在这里插入图片描述

  • 回到我们刚刚新建的 MDK 工程中,将 Target 改为 STM32-DEMO (不改也行),鼠标移动到文件夹上按F2进行修改。

在这里插入图片描述

  • 在 STM32-DEMO 上右键选中 Add Group… 选项,新建四个组,分别命名为STARTCODE、USER、FWlib、CMSIS,并将Source Group 1删除。

STARTCODE 从名字就可以看得出我们是用它来放我们的启动代码的, USER 用来存放用户自定义的应用程序, FWlib 用来存放库文件, CMSIS 用来存放 M3 系列单片机通用的文件。

在这里插入图片描述
在这里插入图片描述

  • 接下来我们往我们这些新建的组中添加文件,双击哪个组就可以往哪个组里面添加文件。我们在 STARTCOKE 里面添加 startup_stm32f10x_ld.s ,在USER 组里面添加 main.c 和 stm32f10x_it.c 这两个文件,在 FWlib 组里面添加 src 里面的全部驱动文件,当然, src 里面的驱动文件也可以需要哪个就添加哪个。这里将它们全部添加进去是为了后续开发的方便,况且我们可以通过配置stm32f10x_conf.h 这个头文件来选择性添加,只有在stm32f10x_conf.h 文件中配置的文件才会被编译。在 CMSIS 里面添加core_cm3.c 和 system_stm32f10x.c 文件。注意,这些组里面添加的都是汇编文件跟 C 文件,头文件是不需要添加的。

在这里插入图片描述

  • 备注:startup_stm32f10x_ld.s是根据自己的芯片来进行选择的,比如我使用的是STM32F103C8t6所以选择小容量的。

你可以通过这篇博文( https://blog.csdn.net/u013165704/article/details/78328736 )进行了解,下面我接了相关芯片的选择,你可以做参考。

在这里插入图片描述

三. MDK 的配置

至此,我们的工程已经基本建好,下面来配置一下 MDK 的配置选项,点击在这里插入图片描述工具栏中的魔术棒按钮 ,在弹出来的窗口中选中在这里插入图片描述

在这里插入图片描述

  • 点击 Select Folder for Objects… 设置编译后输出文件保存的位置。同时把 Create HEX File 和 Browse information 这两个选项框也选上。

在这里插入图片描述

  • 同样在 Listing 这个选项卡中,我们也点击 Select Folder listings…定位到模板中的 Listing 文件夹(前面我创建的是Listings文件,选择Listings文件即可)。

在这里插入图片描述

  • 选中在这里插入图片描述选项卡,在 Define 里面输入添加 USE_STDPERIPH_DRIVER,STM32F10X_LD 。

在<<零死角玩转stm32>> 这本书中使用的高容量芯片所以选择的是HD,这里我使用的是小容量的芯片所以这里我选择的是LD,如果你不知道你的芯片是高容量还是小容量的就选择HD即可,具体原因看下面的截图。

在这里插入图片描述

在 Include Paths 栏点击 在这里插入图片描述,在这里添加库文件的搜索路径,这样就可以屏蔽掉默认的搜索路径。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 修改 main.c 文件

由于拷贝过来的main函数太过复杂,这里我们全部删除,只留下如下内容,这样一个干净的工程模板就建成了。

在这里插入图片描述

  • 添加工具栏的 在这里插入图片描述进行编译,出现如下问题,这是因为导入的startup_stm32f10x_ld格式为 Image file格式,,需要修改为Assembly language file,并且其他C文件也为Image file格式,需要修改为C源文件。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

修改完毕后如下:

在这里插入图片描述

重新编写后:

在这里插入图片描述

四.硬件调试配置

这个工程默认的是软件仿真,如果开发板要用 J-LINK 调试的话,还需要在开发环境中做如下修改。实际上,我们开发程序的时候 80%都是在硬件上调试的。

  • 具体配置如下图所示:点击 在这里插入图片描述,在 Debug 选项里

在这里插入图片描述
在这里插入图片描述

  • 在选项卡 Debug\Setting\Flash download 中,由于我使用的是STM32F103C8T6所以设置如下:

在这里插入图片描述

五.源码下载

微信公众号,回复 工程模板 既可以获取本篇博文的源代码,如果有什么问题,后台留言我看见会第一时间回复你的喔。

在这里插入图片描述

这个错误是由于无法连接到本地主机的10248端口导致的。这个端口通常是kubelet进程监听的端口,用于健康检查。出现这个错误可能是由于kubelet进程没有正确启动或者配置错误导致的。 解决这个问题的方法是检查kubelet进程的状态和配置。你可以按照以下步骤进行操作: 1. 检查kubelet进程是否正在运行。你可以使用以下命令检查kubelet进程的状态: ```shell systemctl status kubelet ``` 如果kubelet进程没有运行,你可以使用以下命令启动它: ```shell systemctl start kubelet ``` 2. 检查kubelet的配置文件。你可以使用以下命令查看kubelet的配置文件路径: ```shell kubelet --kubeconfig /etc/kubernetes/kubelet.conf --config /var/lib/kubelet/config.yaml --bootstrap-kubeconfig /etc/kubernetes/bootstrap-kubelet.conf config view ``` 确保配置文件中的端口号和地址正确,并且与你的环境相匹配。 3. 检查网络连接。你可以使用以下命令检查是否可以连接到localhost10248端口: ```shell curl -sSL http://localhost:10248/healthz ``` 如果无法连接,请确保端口没有被防火墙或其他网络配置阻止。 4. 检查docker的配置。有时候,kubelet进程依赖于docker进程。你可以按照以下步骤检查docker的配置: - 创建/etc/docker目录: ```shell sudo mkdir /etc/docker ``` - 编辑/etc/docker/daemon.json文件,并添加以下内容: ```json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ], "registry-mirrors": ["https://tdhp06eh.mirror.aliyuncs.com"] } ``` - 重启docker进程: ```shell systemctl restart docker ``` 请注意,以上步骤是一种常见的解决方法,但具体解决方法可能因环境而异。如果以上步骤无法解决问题,请提供更多的错误信息和环境配置,以便我们能够更好地帮助你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘟嘟的程序员铲屎官

你的鼓励将是我最大的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值