百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

单片机STM32开发,自学第一天

csdh11 2025-05-27 13:33 7 浏览

小白斗胆发文总结自己的学习过程,有错误之处还希望有大佬指正。俗话说吃不了学习的苦,就得吃体力劳动的苦,从今天开始记录我的学习全过程,希望我能每天坚持下来。

一、开门见山,一开始就是搭建开发环境。

1、MDK5 安装

MDK5 的安装分为两步:1,安装 MDK5;2,安装器件支持包。MDK 软件下载地址:
https://www.keil.com/download/product
,器件支持包下载地址:
https://www.keil.com/dd2/pack
;我学习的是STM32F1系列的,所以我安装的是MDK5.36 和 2.3.0。

2、仿真器驱动安装

STM32 可以通过 DAP、ST LINK、JLINK 等仿真调试器进行程序下载和仿真,推荐使用:DAP 仿真器(CMSIS-DAP Debugger),DAP 仿真器在 MDK 下是免驱动的(无需安装驱动),即插即用,非常方便。我当初不太了解,所以买的时候买了STLINK 仿真器,所以我自己用的是STLINK 仿真器,DAP 仿真器的具有免驱、速度快、价格便宜等特点。

3、CH340 USB 虚拟串口驱动安装

开发板使用的 USB 虚拟串口芯片是 CH340C,需要安装 CH340 USB 虚拟串口驱动,以便我们使用电脑通过 USB 和 STM32 进行串口通信。

二、MDK5 的开发体验

我主要是根据 “HAL库 版本” 教程实例学习的,当然很多大佬都能自己根据芯片寄存器自己写库文件,听起来就非常牛13,我自愧不如,当然是仰望!

1、认识HAL 库

从ARM 官方提供的 CMSIS 规范架构标准分级明显,从用户程序到内核底层实现做了分层。按照这个分级,HAL 库属于 CMSIS-Pack 中的“Peripheral HAL”层。CMSIS 规定的最主要的 3 部分为:核内外设访问层(由 ARM 负责实现)、片上外设访问层和外设访问函数(后面两个由芯片厂商负责实现)。ARM 整合并提供了大量的模版,各厂商根据自己的芯片差异修改模版,这其中包括汇编文件 startup_device.s、system_.h 和 system_.c 这些与初始化和系统相关的函数。

HAL 是 Hardware Abstraction Layer 的缩写,即硬件抽象层。是 ST 为可以更好的确保跨STM32 产品的最大可移植性而推出的 MCU 操作库。这种程序设计由于抽离应用程序和硬件底层的操作,更加符合跨平台和多人协作开发的需要。HAL 库是基于一个非限制性的 BSD 许可协议(Berkeley Software Distribution)而发布的开源代码。

2、HAL库驱动包的获取

从 ST 官方网站上直接获取固件库,网页登陆:www.st.com,在打开的页面中依次选择:“Tools & Software”->“Ecosystem”->“STM32Cube”->新页面->选择“Prodcut selector”,如图:

在展开的页面中选择我们需要和固件,这展开“STM32CubeF1”即可看到我们需要的 F1 的安装包,按下图操作,在新的窗口中拉到底部,选择适合自己的下载方式,注册帐号即可获取相应的驱动包。

3、Driver 文件夹

Drivers 文件夹包含 BSP,CMSIS 和 STM32F1xx_HAL_Driver 三个子文件夹。

  • BSP文件夹,板载硬件资源等驱动;
  • CMSIS 文件夹,CMSIS 标准的软件抽象层组件相关文件,主要包括 DSP 库(DSP_LIB 文件夹),Cortex-M 内核及其设备文件(Include 文件夹),微控制器专用头文件/启动代码/专用系统文件等(Device 文件夹)。
  • STM32F1xx_HAL_Driver 文件夹,包含了所有的 STM32F1xx 系列 HAL 库头文件和源文件。它的作用是屏蔽了复杂的硬件寄存器操作,统一了外设的接口函数。该文件夹包含 Src 和 Inc 两个子文件夹,其中 Src 子文件夹存放的是.c 源文件,Inc 子文件夹存放的是与之对应的.h 头文件。每个.c 源文件对应一个.h 头文件。

4、Middlewares 文件夹

该文件夹下面有 ST 和 Third_Party 2 个子文件夹。ST 文件夹下面存放的是 STM32 相关的一些文件,包括 STemWin 和 USB 库等。Third_Party 文件夹是第三方中间件,这些中间件都是非常成熟的开源解决方案。这里就不具述了。

5、Projects 文件夹

该文件夹存放的是 ST官方的开发板的适配例程,每个文件夹对应一个ST 官方的Demo 板,根据型号的不同提供 MDK 和 IAR 等类型的例程。

6、Utilities 文件夹

该文件夹是一些公用组件,也是主要为 ST 官方的 DEMO 板提供的,在我们的例程中使用得不多。

7、其他文件夹

License.md:用于声明软件版权信息的文件。package.xml:描述固件包版本信息的文件。Release_Notes.html:超文本文件,用浏览器打开可知它是对固件包的补充描述和固件版本更新的记录说明。

3、HAL 版本 MDK 工程

1. 新建工程文件夹

首先我们要在电脑某个路径下新建一个文件作为工程的根目录文件,后续的工程文件都将在这个文件夹里建立,我们把这个文件夹重命名。工程的根目录文件夹下建立以下几个文件夹,文件夹名称及其作用如表:

2. 拷贝工程相关文件

BSP 文件夹,用于存放正点原子提供的板级支持包驱动代码(原 HARDWARE 文件夹下),如:LED、蜂鸣器、按键等。

CMSIS 文件夹,用于存放 CMSIS 底层代码(ARM 和 ST 提供),如:启动文件(.s 文件)、stm32f1xx.h 等各种头文件。

Source 文件夹下的 Templates 文件夹留下如图:

arm 文件夹存放的是启动文件,我们只需要 startup_stm32f103xe.s,其他全部删除。

最后就是 CMSIS 文件夹下的 Include 文件夹,里面都是内核的头文件,我们只需要如图:

4、新建工程

打开 Keil uVision5,点击菜单 Project ->New Uvision Project:

然后弹出工程命名和保存的操作窗口,工程文件保存路径为:STM32_len_Projects,STM32_len_Projects\Projects\MDK-ARM,工程名字我们取:HAL_LED_Project,最后点击保存即可。

接下来会弹出一个选择 Device 的界面,就是选择我们的芯片设备型号,大家根据自己使用的芯片型号依次选择即可。STM32F103 战舰开发板的芯片型号是:STM32F103ZET6,所以我选择:STMicroelectronics→STM32F1 Series→STM32F103→STM32F103ZE(如果使用的是其他芯片,选择相应的型号就可以了)。

特别注意:一定要安装对应的器件支持包(即 pack 包)才会显示这些内容哦,如果没得选择,请关闭 MDK,然后安装器件支持包后重试。

点击 OK 后,弹出 Manage Run-Time Environment 对话框:

在这个界面,我们可以添加自己需要的组件,从而方便构建开发环境,不过这里我们不需要。我们直接点击 Cancel 即可,这样就得到了我们的初步工程。

这只是一个工程的框架,我们还需要把自己需要用到的文件添加到工程里面。虽然前面,我们在工程文件夹里放了很多文件,但是它们并没有关联到工程里面。

5、关联工程

1.添加文件

将分 3 个步骤:1,设置工程名和分组;2,添加启动文件;3,添加 User 源码;4,添加 SYSTEM 源码;5,添加 STM32F1xx_HAL_Driver 源码。

1. 设置工程名和分组名

在 Project→Target 上右键,选择 Manage Project Items…(方法一)或在菜单栏点击品字形红绿白图标(方法二)进入工程管理界面:

在工程管理界面,我们可以自行设置工程名字(Project Targets)、分组名字(Groups)以及添加每个分组的文件(Files)等操作。我们设置工程名字为:Template,并设置五个分组:Startup(存放启动文件)、User(存放 main.c 等用户代码)、Drivers/SYSTEM(存放系统级驱动代码)、
Drivers/STM32F1xx_HAL_Driver(存放 ST 提供的 HAL 库驱动代码)、Readme(存放工程说明文件),如图:

设置好之后,我们点击 OK,回到 MDK 主界面,可以看到我们设置的工程名和分组名如图:

这里我们只是新建了一个简单的工程,并没有添加 BSP、Middlewares 等分组,后面随着工程复杂程度的增加,我们需要一步步添加对应的分组。

2.添加启动文件

上图中,我们也可以点击 Add 按钮进行文件添加。添加完后,点击 Close,完成启动文件添加,得到工程分组如图:

3. 添加 User 源码

4. 添加 SYSTEM 源码

5. 添加 STM32F1xx_HAL_Driver 源码

6、工程(魔术棒)设置

1. 设置 Target 选项卡

2. 设置 Output 选项卡

3. 设置 Listing 选项卡

4. 设置 C/C++选项卡

5. 设置 Debug 选项卡

6. 设置 Utilities 选项卡

7、添加 main.c,并编写代码

在 MDK 主界面,点击:“NEW” ,新建一个 main.c 文件,并保存在 User 文件夹下。然后双击

User 分组,弹出添加文件的对话框,将 User 文件夹下的 main.c 文件添加到 User 分组下。

至此,我们就可以开始编写我们自己的代码了。我在 main.c 文件里面输入如下代码:

编写完 main.c 以后,我们点击:(Rebuild)按钮,编译整个工程,发现 0 错误 0 警告。

编译结果提示:代码总大小(Porgram Size)为:FLASH 占用 5780 字节(Code + RO + RW),SRAM 占用 1928 字节(RW + ZI);并成功创建了 Hex 文件(可执行文件,放在 Output 目录下)。至此,新建寄存器版本 MDK 工程完成。

8、下载验证

有两种方法可以给 STM32F103 芯片下载代码:1,使用串口下载;2,使用仿真器下载。这两种下载方法:在 MDK 主界面,点击: (下载按钮,也可以按键盘快捷键:F8),就可以将代码下载到开发板,

上图提示:Application running…,则表示代码下载成功,且开始运行。可以看到 LED0 和LED1 交叉闪烁。

以上是小白对第一天学习的了内容做了大概的总结,由于篇幅受限,很多地方有缩略,欢迎小伙伴们在评论区提问,相互交流。今天的内容到此结束,打工仔只能不定期更新,再见!#STM32##30天学会STM32#

相关推荐

USB转TTL(CH340)模块测试

一.简介USB转TTL串口模块是一个非常实用的工具,可以测试模块的UART串口通信和通过单片机的UART接口给单片机等下载程序。能够在电脑上的串口助手软件非常直观的显示出串口设备返回的数据以及发送相...

微软更新基于Win11的Validation OS 2504:增强 .NET与WPF

IT之家5月1日消息,科技媒体NeoWin今天(5月1日)发布博文,报道称微软公司更新基于Windows11的ValidationOS,增强支持.NET和WPF,并优...

STM32串口通信基本原理

设备之间通信的方式...

0基础自学PLC且顺利入门,这8章知识点104页PPT非你莫属

零基础如何自学PLC并顺利入门呢?之前小编教了大家很多学习方法,这次要说的将是直接命中PLC知识点的具体内容,将分为八章内容分别讲述,一起来看看!第一章、PLC周边常用器件介绍及简单应用包含了按钮开关...

单片机STM32开发,自学第一天

小白斗胆发文总结自己的学习过程,有错误之处还希望有大佬指正。俗话说吃不了学习的苦,就得吃体力劳动的苦,从今天开始记录我的学习全过程,希望我能每天坚持下来。一、开门见山,一开始就是搭建开发环境。...

Android收银机如何直接驱动钱箱?我们来详细分析硬件RJ11接口

  钱箱的英文是CashDrawer,就是通常放在收银机下用来放现金的箱子。虽然现在很多支付采用网络支付,但是零售业很多时候要保留一个钱箱来保存收到现金  传统流程是通过小票打印机的RJ11接口来驱...

WinForm 中玩转串口通信:从基础到实战

...

Windows外置设备驱动开发

在Windows上开发外置设备(如USB、蓝牙、PCIe等)的驱动程序需要遵循微软的驱动开发框架和工具链。以下是详细的步骤和关键点:1.开发环境准备工具安装:OVisualStudio:用于代码...

串口屏十大高频问题:花屏、通信失败、触控漂移全解决

在工业控制、智能设备等领域,串口屏以其便捷的交互性、简单的通信方式,成为了信息展示与操作的重要窗口。然而,在实际使用过程中,串口屏也常出现一些问题,影响设备的正常运行与用户体验。下面将针对花屏、通信失...

随身如意宝 瑞工MLP80A便携标签机试用

【中关村在线办公打印频道原创】瑞工科技专业提供针对行业用户的打印方案,这次我们拿到了它最新的RG-MLP80A便携标签打印机,面向物流仓储、移动执法、医疗设备等行业的标签打印应用。开箱之初它是由一个带...

ANS-DB003M蓝牙音频串口开发板,音乐数据传输全能选手

在物联网与智能硬件爆发的时代,开发者急需一款能同时攻克音频处理与数据通信痛点的全能工具。ANS-DB003M的出现,或许正是答案。今天,我们就来深度测评一款备受瞩目的产品—ANS-DB003M蓝牙音频...

Spartan-6开发案例使用手册——嵌入式AD模块/接口基础测试(上)

前言本指导文档适用的开发环境为Windows764bit和Windows1064bit。本文档主要提供开发板FPGA端案例测试方法,所有工程均位于产品资料Demo1目录下。进行本文档操作前,...

Arduino 实例(三十九)启动esp32-cam视频监控及遇到的坑

1esp32-cam使用中,是迄今为止,遇到的最多坑的一次,我将这些记录下来,以期对后来初次使用这个模块的朋友有所启发和借鉴a)我购买这个模块时,除了买esp32-cam模块,还买了母版,但没...

「正点原子Linux连载」第四章开发环境搭建(2)

1)实验平台:正点原子Linux开发板2)摘自《正点原子I.MX6U嵌入式Linux驱动开发指南》关注官方微信号公众号,获取更多资料:正点原子...

网络机顶盒电视盒子TTL连接方法可用于刷机备份救砖安装软件

过期网络机顶盒变废为宝的方法有很多种,有的用优盘卡刷,有的用双头USB线刷,还有的就需要借助TTL刷机板来操作刷机升级了,今天分享一下TTL刷机板连接电脑的方法1、我用的是CH340G的刷机板还是土...