大家好,今天小编来为大家解答以下的问题,关于STM32单片机开发入门,第一日学习体验分享,这个很多人还不知道,现在让我们一起来看看吧!
一、开门见山,一开始就是搭建开发环境。
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 这些与初始化和系统相关的函数。
网图:CMSIS规范架构
HAL 是 Hardware Abstraction Layer 的缩写,即硬件抽象层。是 ST 为可以更好的确保跨STM32 产品的最大可移植性而推出的 MCU 操作库。这种程序设计由于抽离应用程序和硬件底层的操作,更加符合跨平台和多人协作开发的需要。HAL 库是基于一个非限制性的 BSD 许可协议(Berkeley Software Distribution)而发布的开源代码。
2、HAL库驱动包的获取
从 ST 官方网站上直接获取固件库,网页登陆:www.st.com,在打开的页面中依次选择:“Tools & Software”->“Ecosystem”->“STM32Cube”->新页面->选择“Prodcut selector”,如图:
获取HAL库1,2,3
获取HAL库4,5
在展开的页面中选择我们需要和固件,这展开“STM32CubeF1”即可看到我们需要的 F1 的安装包,按下图操作,在新的窗口中拉到底部,选择适合自己的下载方式,注册帐号即可获取相应的驱动包。
下载STM32CubeF1固件包
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、其他文件夹
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单片机,感觉就像走进了一个全新的编程世界。
有18位网友表示赞同!
学了两天STM32,在线教程有些难以理解,不过实战练习后我渐渐上手了。
有17位网友表示赞同!
自学STM32的过程挺孤独的,但收获知识的喜悦让我坚持了下来。
有15位网友表示赞同!
对于初学者来说,STM32资料太多了,不知道从哪里开始是一个大挑战。
有5位网友表示赞同!
感觉自己像是一个小工程师,在探索各种电子原理和编程细节的过程中变得成熟。
有20位网友表示赞同!
使用STM32开发板的第一天,我被电路连接的复杂性和编码逻辑搞得头疼不已。
有17位网友表示赞同!
STM32让我对硬件有了一种全新的理解,亲手改变电路的行为真的很酷。
有6位网友表示赞同!
刚开始学习STM32时,我完全不知道如何将编程语言与物理世界联系起来,但现在我已经能独立调试小项目了。
有10位网友表示赞同!
自学STM32需要极大的耐心和毅力,但成果出来后的成就感无可比拟。
有5位网友表示赞同!
在寻找STM32资源时,我发现了很多在线社区和论坛,非常有助于解答困惑。
有7位网友表示赞同!
(苦笑) 第一天学习STM32的时候,我差点放弃,太难了,要学的东西太多。
有17位网友表示赞同!
对于硬件工程师新手,STM32的官方文档简直是座大山,幸好网上有帮助很多的教程视频。
有12位网友表示赞同!
尝试模拟代码在真机上的行为时有点挫败感,但每次解决一个小bug都特别兴奋。
有7位网友表示赞同!
我花了一整天时间看STM32的定时器功能,现在可以独立编写相关应用了!
有12位网友表示赞同!
STM32的学习曲线确实陡峭,但我已经习惯了在学习过程中不断地试错和调整。
有9位网友表示赞同!
(欣喜) 第一天学STM32时遇到的所有困难都值得,因为我看到了自己的进步。
有7位网友表示赞同!
感觉使用STM32开发板像是进入了一个全新的游戏世界,充满了挑战和惊喜。
有16位网友表示赞同!
自学STM32的路虽然艰辛,但是每当解决一个问题,心中那份满足感无法用语言表达。
有7位网友表示赞同!
(微笑) 尽管学习STM32的第一天让我觉得世界好大又未知,但我的兴趣和热情一直在燃烧。
有14位网友表示赞同!
尝试在STM32上实现第一段代码时,我几乎要崩溃,现在回过头想想真是不可思议的进步。
有16位网友表示赞同!