成都中小企业申请网站,西安政务服务网,宝安中心图片,网站推广软件哪个最好目录 前言与导论
碎碎念
所以#xff0c;我到底需要知道哪些东西呢
从一些基础的概念入手
常见的工具和说法
ST公司
MDK5 (Keil5)
CubeMX
如何使用MDK5的一些常用功能
MDK5的一些常见的设置 前言与导论
非常感谢2301_77816627-CSDN博客的提问#xff0c;他非常好奇…目录 前言与导论
碎碎念
所以我到底需要知道哪些东西呢
从一些基础的概念入手
常见的工具和说法
ST公司
MDK5 (Keil5)
CubeMX
如何使用MDK5的一些常用功能
MDK5的一些常见的设置 前言与导论
非常感谢2301_77816627-CSDN博客的提问他非常好奇如何在起步的阶段学习STM32。笔者自己也是没学多久的STM32当然下面的说法会有一些漏洞。但是我仍然想分享一下自己对学习STM32的看法。中间肯定会有不少的疏漏烦请各位看官大佬见笑了如果有任何错误可以直接犀利的在评论区指出或者给我任何建议我会第一时间同您交流
碎碎念
大部分人可能是从51单片机开始学习笔者自己也是大一的时候学习过非常粗浅的51单片机在后来需要项目应用的时候才去学习STM32我相信不少人更多的是从应用层开始接触我们的STM32的。
一个非常经典的疑问就是——我手头有一块非常巨大的开发板比如说笔者现在敲电脑的旁边就是一块STM32G431RBT6开发板和正点原子家的STM32F103ZET6精英开发板或者是一块非常迷你的核心板最小系统板比如我的左手边就是若干的STM32F103C8T6核心板。当然这些概念可能会一下把萌新吓跑在你慌张的准备退出这个标签的时候不妨留步烦请听我慢慢道来。
嵌入式单片机领域如果没有上过前置的课程那可能会显得相当困难。
比如说微机原理这里属于单片机开发体系当中的架构层次也就是说我们眼中的STM32单片机是一个叫做ARM架构派生的一个产品您不妨理解为根据这个arm架构的模板开发出来的在这个层次上我们正在讨论的会是非常具体的对于架构具体对萌新而言是灾难行为——比如说我如何操作寄存器来控制一个GPIO口的高低电平呢我如何通过向一个地址写东西来控制实际映射到的外设呢
比如说数电和模电——这样的电路怎么样就实现了我们GPIO的开漏推挽输出呢如何实现了IIC协议的硬件层次通信呢如何就让我们的USART就可以进行一定的串行通信了又如何进行一定的收发呢SPI硬件电如何保证了我们描述是否接受到信号发出信号的呢
比如说C语言甚至是ARM架构汇编编程语言是我们操纵手头的小单片机焕发巨大魔力的有利的直接的工具他是我们应用层代码——何为应用层就是直接看得到摸的着的现象。比如说当我们讨论 喂把PA3上外接的LED灯点亮 好嘞我这边手头刚处理好使用硬件IIC完成OLED的通信业务逻辑 的时候我们就是在完成应用层也就是最后直接跟用户对接的部分。
还有其他非常多的甚至包括不少人不屑一谈但是实际上劝退大把人的代码移植隶属于编译技术报错处理笔者甚至遇到大把完全不懂编译器链接器的软件工程完全不知道如何组织自己项目的等等单片机的学习在这里就可以提现出来了——非常的杂软件硬件都有所交叉甚至还要延伸到最底层的计算机架构可以不懂嘛可以不懂但代价就是出现问题了你只能两手一摆拿着示波器逻辑分析仪一顿瞎分析还没有所以然写一个代码完全没办法移植修修改改对面的哥们更改两行代码就完成了整个工程的移植
所以笔者在这里需要尝试整理一下学习单片机哪些领域哪些层级是你需要注意的 1 会用的层级你不需要关心你的板子到底做了什么你只需要知道常见的单片机自身的概念常用外设的概念常见协议的概念。你知道如何配置Cubemx完成你的目的你知道如何操作Keil来烧录上传你的板子你知道如何使用STLink或者是DAP完成你对你手头板子的调试工作。你知道如何使用常见的排查手段——硬件上是示波器万用表逻辑分析仪软件上是打串口日志对非时序敏感的器件做调试操作等等。你不知道也会葫芦吞枣的去根据别人的博客猜测可能的步骤。 2 理解的层级慢慢的会开始关注拿到新器件的手册新开发板的手册知道如何去根据自己的目的查询对应的关键词查询你的问题你会去熟悉常见的你需要看的配置和资源有哪些IO口使用的协议和对应的状态你会去查询常见协议的设计的思路和实现的原理甚至去扒电路图看看特定的你感兴趣的部分的电路实现。 3 更高的层次现在可能会去查询arm的手册看看你手头的芯片到底是怎么一回事。他是如何被设计的因此可以用在哪些场景。你会设计一个庞大的嵌入式系统完成一个特定的任务而且知道出现在眼前的问题如何使用更加准确的手段排查。笔者完全没到这个地步但是认识的佬不少远超于这个水平实在让人难以追赶哈哈 所以我到底需要知道哪些东西呢 首先如果完全没有接触过C语言电路分析和派生的数电模电课程笔者真心的建议你好好学学不着急立马开始玩单片机否则你也不过是照搬别人的东西自己什么也学不会别人一问三不知。 你需要学习如何使用常见的工具对于初学者你会使用MDK5(Keil)完成单片机的开发当然可以是CubeIDE或者使用CubeMX快速的生成对ST家的芯片的配置模板。你要理解编辑器编译器链接器的存在和他们到底在干什么的作用笔者之前潜伏在正点原子的群里就发现大量的人完全混淆这些概念导致MDK的抛错完全看不懂这是嵌入式教学中的一个巨大的失误——不对你使用的工具进行详细的介绍和说明他们到底在做什么的讲解导致不少新人完全不知道发生了什么代码怎么就跑起来了。当然笔者比较温和实际上现在不知道问题也不大多接触一些慢慢会有所感觉。这里不过是抛出这些概念罢了 你需要理解常见的概念。当我们讨论——GPIO口上拉下拉外设等等的概念的时候你可以对应的查询相关的概念。递归式的学习每一个出现的新名词直到达到自己学习的极限。对于单片机我们会说GPIO口如何跟外围的设备进行交互时钟树和晶振速度你的单片机工作的速度多快定时器字面含义等等的概念具体的你购买开发板的时候肯定会附送资料跟着学 你需要学习如何阅读手册教程可以算作你的手册购买外设商家附送的网盘资料可以是你的手册一些datasheet网站上收录的手册也可以是你的参考资料学习根据手册进行编程是一个嵌入式人的标准素养 你需要学会使用单片机提供的能力操作你的外设事实上这个是最先的。大部分的人首先会完成点亮一个LED的小实验请记住拿到一个板子当你学会点亮一个LED的时候你就正式的入门这个板子的使用了。随后你还会驱动比如说其他更加复杂的外设。对摁键的检测对OLED的控制对电机舵机的把控等等。从这里开始你就进入了应用层的学习逐步走上正轨了。
最基本的步骤就是如此。
从一些基础的概念入手
常见的工具和说法
ST公司
当你打开这篇文章的时候你肯定已经拥有了一块ST家的单片机比如说STM32F103ZET6但是不知道如何进行学习。ST是一个搞单片机的公司你可以认为手中的这个芯片就是他们家的东西。
MDK5 (Keil5)
还记得你写C语言嘛在大学里笔者的老师要求我们使用老毕等VC6.0编辑器编辑我们的代码我自己是VSCode/QtCreator写C/C算法竞赛党喜欢使用Code Block或者是Dev C 完成开发他们都属于一个叫做IDE的产物。IDE,也就是集成开发环境为你包揽万象你不需要关心如何完全的配置你的编译器链接器编辑器调试器设置他们通通被IDE接管了。你只需要在IDE中点点瞧瞧点这个摁扭点那个按钮事情就结束了。
在嵌入式中一个最为经典的方案就是拿MDK5作为IDE开发单片机。 Keil MDK5安装详细步骤-CSDN博客 笔者随手搜了一下就搜到了安装的办法。学会使用搜索引擎是你学习嵌入式的一个重要的保障
CubeMX
CubeMX是ST家为了让他们的芯片更加容易的被开发使用Java开发的一个好用的快速配置软件它可以快速的生成一个已经完成了初始化代码的工程模板比如说正点原子的教程幸苦的写了2个小时的代码CubeMX点几下然后生成工程进去把LED电平差拉起来LED就点亮了前后不超过3分钟。对于初学者这个软件能够快速的方便的生成一部分代码但是对自己更长远的发展和学习不利笔者建议是——写业务速速用学习的时候还是先理解每一个文件在做什么比较好。
STM32CubeMX - STM32Cube initialization code generator - STMicroelectronics
具体的介绍请参考官方网站注意的是——学习英文也是嵌入式中不可或缺的一部分因为大部分的文档都是英文的笑。
如何使用MDK5的一些常用功能
MDK5的一些常见的设置
笔者写了两年的单片机大大小小的项目过来发现常见的需要改动的配置这里我会说明一下。笔者随手打开了一个STM32F407ZGT6的正点原子的工程。
打开界面在你的左手侧的栏内这是一个讲述的点 这就是一个典型的目录工程结构。当然如何分类是自由的笔者就不喜欢分成这样喜欢分成include和source后根据是哪个外设的控制进行单独的分类你喜欢分成如何需要自己在开发当中慢慢体会慢慢就会知道每一种分发的优缺点何在。这不是讲博客就能说的彻底。笔者决定将这个问题留给即将启程学习STM单片机的你。 笔者使用的VSCode下自己开发的图形显示框架目录结构
你当然可以添加你自己的C语言文件和头文件甚至后面可以是汇编文件取决于你的开发的场景还有你的水平笑 Keil工程添加源文件和头文件.c和.h的方法_keil添加头文件.h-CSDN博客 另一个我们打交道的是这个地方。前四个图标设计到的概念是构建。
翻开你的C语言教程自己默念五次自己写的程序如何从C语言文件到汇编文件再到二进制可执行文件。一般而言我们会生成.hex文件关于hex文件的生成规则和到底如何使用这不属于萌新范畴的知识感兴趣的朋友自行查阅对于完全无基础的朋友我打赌你会灰溜溜的回来继续看我写的内容的也就是说我们的IDE会收集我上面显示工程内的所有的C语言源文件。注意是所有的所以小心重复的添加C语言源文件否则它会被编译两次在链接的时候就会触发符号重定义的错误。
我们先到魔术棒也就是LED下拉框的右侧点一下他就会跳出来这个界面常见的一般我们会接触到这些设置 arm编译器的版本——这是设计到编译器的特征的时候会考虑的一般而言萌新不需要考虑这个直到就好 是否使用微库——微库是编译器自身实现的一些常见的C语言的工具函数一般的除非明确启用一般我们都是自己实现。 来到Output选项卡如果你是使用一个完全空白的工程一般而言不会生成可以进行烧录的hex我们就是在这里进行更改勾选Create HEX File生成可以被烧录的二进制文件。 旁边的C/C编译器设置则是更加高级的一些C/C设置。一般而言找不到头文件/目标代码没被参与编译/更改编译的选项等的议题都是在这里进行解决的。如果不清楚具体改什么笔者建议自己到搜索引擎上查明白。
这里重点介绍Define和IncludePath两个选项 define则是说明预定义的宏不懂什么是宏的去查#define这是C语言的知识的范畴 includePath说明了头文件的检索路径当你发现你的头文件找不到的时候需要设置头文件的检索路径你需要点击includePath后面的三个...进行添加一般而言添加哪个文件夹他只会扫描当前文件夹的所有文件如果你的头文件在这个路径之下的一个子文件夹中他是不会递归搜索的 当只有include ./Core
-Core
|-----a.h // #include a.h可以找到
|-----b.h // #include b.h可以找到
|-----c|---d.h // #include d.h找不到但是#includec/d.h可找到|---e.h // #include e.h找不到但是#includec/e.h可找到 下面的内容跟调试精密相关了
笔者使用的是STLink和DAP比较多你需要做的是在笔者框处的地方做设置 设置下拉框为你使用的调试器。STLink V2那就是STLink-DebuggerDAP那就是如图所示的JLink那就是JLink Debugger. 点击Settings在这里你可以看到调试器现在的工作状态正常的说当你选择好调试器之后给板子和调试器上电就会看到ID号举个例子
笔者连接好了DAP和STM32F407ZGT6后就会出现这样的界面到这里基本上板子就可与被烧录了 记住你还需要到这个地方也就是讲选项卡从Debug切换到Flash Download去勾选Reset And Run这是因为调试器上传结束程序后默认的行为是等待我们手动RESET后才会重新执行比如嗯下开发板上的reset摁扭这里我们勾选后就不用设置了。 感谢HNHKHNH-CSDN博客的补充笔者需要提到的是——你需要关心一下这里的Device Typed的片上的Flash(On-chip Flash)一般而言一些芯片这里是空的需要你进行配置和选择 一般的你需要选择的是On-Chip Flash中 容量Size最大的选项在这里也就是片上的中密度闪存第一个选项如果你吃不准到底是啥具体看手册和其他人的博客
回到这里下面框处的摁扭就是在完成上述的工作后点击就会进行你编译结束的程序的上传注意每一次上传之前必须编译不然会烧老的代码就会发现你写的代码没有实现效果的更改。 关于调试实在太多请看大佬的博客
Keil5软件使用-进阶调试篇_keil调试教程-CSDN博客
还有其他的部分如果有疑问或者建议欢迎补充