单片机开发总结

发布时间:2026/7/28 16:42:40
单片机开发总结 马上秋招了复习一下单片机。文章目录序言概述调研芯片的应用领域收集相关资料确认芯片内核架构了解芯片系统架构购买开发板与仿真器组织工程文件选择并配置编译环境总结序言大二的时候玩过单片机马上秋招了linux只是会用不会移植看不懂内核看不懂ubootC也没精通QT也是半吊子python也不是我的职业方向只能把简单的单片机拿过来复习一下希望在招聘的时候底气能够足一点。找工作是一个原因除此之外我还想认真地学一下UCOS毕竟一个搞嵌入式的连一个RTOS都没接触过说出去岂不是让人笑话。本篇文章并不会有什么细节如果有那也只是为了辅助介绍思想更多的是一种单片机开发流程的总结与感悟。具有很强的通用性。所以完全可以当作一篇茶余饭后的小文章来看看。概述假如有一天你的老板给你一块你从来没用过的单片机让你基于这款单片机开发出某某产品我们该怎么办呢。这种情况我相信在这个技术更新如此之快的时代是时常发生的情况作为技术人我们必须有一套应对这种情况的方法这篇文章就是介绍一下我个人对这种情况的处理办法不成熟是肯定的有错误也是肯定的毕竟我才大三。我大概总结了一下有如下几个步骤调研芯片的应用领域、收集相关资料、确认芯片内核架构、了解芯片系统结构、购买开发板与仿真器、组织工程文件、选择并配置开发环境、编写应用程序、测试应用程序、根据用户反馈维护并优化应用程序。我们下面将会挨个介绍上面的每一个步骤。注1编写应用程序、测试应用程序、根据用户反馈维护并优化应用程序三点将不会在本篇文章中涉及后面我会有一个系列的文章来记录我的UCOSIII学习历程在那里将会有大量的应用示例注2下面的步骤介绍是以STM32F103RBT6为例进行的调研芯片的应用领域这个步骤主要是为了了解一种芯片的优点与缺点它之所以适用于某个领域一定是在这些领域有某些独特的优势之所以不适合其它领域也一定是在这些领域有一些劣势。那么如何调研呢本人作为学生没有系统地学习有哪些调研方法只能简单地根据浅薄的经验来介绍一下几种常用的方法。百度最简单粗暴的方法基本上得不到什么有用的信息去各种相关的电子论坛这些论坛里面更多的是具体的技术细节的探讨以及某些技术的行业应用你可以通过这些行业应用去大概了解芯片的应用领域去询问大佬这其实是最高效的方法如果你的身边有相关领域的大牛直接去向他们咨询这将会帮你节省很多时间同时友情提醒不要轻信同水平人的言论。去看大佬的博客这其实和上一点效果差不多由于大牛不常有所以才需要这种方法。总之尽可能地去获取更多的高质量的信息保证你在研究这块芯片之前已经对它有了足够的市场认知。收集相关资料如果我们确定了某类芯片适合我们的项目那么我们下一步就需要去研究它了古语有言巧妇难为无米之炊。我们在学习之前要先收集许多许多的资料这些资料可以以视频、电子书、纸质书、代码、论坛、论文等多种形式而存在下面我以我在复习STM32的过程中资料的收集情况来进行简要介绍。手册型的主要包括M3权威指南中英文、标准库参考手册中英文、芯片数据手册、应用参考手册等。教材型的我这里主要使用了两方面的教材一个是老师的PPT一个是一些开发板公司的PDF教材如下所示当然如果有钱也可以去买一些纸质版的教材。视频型的我最近看视频不多了感觉速度太慢而且信息不够一般只有入门某个领域的时候才会看视频我当时入门单片机的视频是郭天祥的《十天精通单片机》。代码型的其实对于单片机来说不需要去看太多的代码因为单片机的代码逻辑非常简单没有CS专业或者嵌入式的各种算法各种数据结构各种框架各种设计模式。所以在单片机层次只要把标准库弄熟练了多找点实际项目练练基本都没什么问题。论坛型的这一点非常重要我们要多去逛逛各大论坛比如什么摩尔吧、电路城、电子工程世界、一些芯片厂家的社区、一些开发板厂家的社区等等在里面多学习多交流多找几个项目自己做一做遇到问题可以去那里找一找。论文型的关于论文在单片机方面其实我没有怎么见到过因为单片机实在是没有什么论文可以发不过我们可以去看一些应用单片机来进行科学研究的论文其实不要局限思维多去看一些大佬写的科研论文看看人家是怎么组织文章结构的看看人家是如何进行研究探索的这对提高自己的科研素养还是很有帮助的。Tips如果有能力尽量不要去看知网上的文章因为含金量实在是太低了确认芯片内核架构这一步看似是一个很简单的步骤实际上它的确是很简单的步骤芯片的内核型号从它的手册中一翻就出来了但是简单并不意味着不重要相反它非常重要从名字上我们就可以看出它是整个芯片的内部核心也就是说内核的类型直接关系到芯片的下限与上限比如M3的内核没有MMU这就注定它无法跑linux所以想上linux的朋友最好选一些高端的内核如果想跑android等带文件系统的操作系统最好选择带MMU且主频高一点的内核比如Cortex A系列。我目前用的M3就只能跑一跑像UCOS这样的RTOS。总之选择芯片前一定要清楚自己的内核需求选择合适的芯片。下面是《Cortex-M3权威指南(中文)》的目录我们可以看到很多术语要想准确地选择自己需要的内核就需要对内核的一些常用术语有一定的认识目前里面还有很多术语我都不太熟悉以期将来工作有机会再加深对这些术语概念的理解。了解芯片系统架构ARM公司开发出内核之后很多厂商就在其内核之上进行芯片设计本质上就是加了许多外设如I2CSPIADC/DAC等等。不同的厂商这些外设的差别是很大的。我们需要针对某个芯片去仔细地了解它的芯片系统架构。芯片里面有哪些外设这些外设之间以及与内核是如何连接的数据信息、地址信息、控制信息都是如何传递的地址空间是如何分配的有哪些存储器这些存储器的特点与大小是怎样的有哪些下载与调试接口有没有一些没见过但是好像很有用的外设。下面是STM32F10xx的系统架构我们可以从中获取很多信息比如有哪些外设信息是如何传递的手册里会有对这个架构的简单介绍有哪些存储器这些部件之间是如何组织的哪些是主动单元哪些是被动单元我们都可以知道。购买开发板与仿真器这一步个性化就更强了如果你会画板子的话最好自己画一个这样学习更深刻。如果不会也没关系我们去淘宝上一搜就一大堆根据自己的需要选一个就可以了选板子的时候尽可能选择功能多一点的虽然可能贵一点单片机学习板贵上天能有多贵呢但是学习嘛何必在意这点小钱呢。看看调试接口是怎样的然后附带购买仿真器仿真器可能贵一点如果有钱就买好一点的没钱就买便宜的其实无所谓。我没有买过仿真器都是在实验室蹭的?没办法出身贫寒只能这样子维持一下生活了我旁边这个还是找我以前的队友借的。组织工程文件可以说这一步是简单的又是困难的简单在大部分的代码都是别人写好的困难在你需要去对着芯片架构理解这些代码下面是正点原子的STM32F103代码结构Tips其实这种代码结构只是给人看的编译器根本不在乎你是怎么组织的它能看见的就是一堆C文件和汇编文件以及链接脚本。这个工程文件大部分单片机都可以这样分类主要分为如下几个部分Libraries芯片库文件主要包含内核接口库和外设驱动库两部分listing这里面有一个.lst文件里面包含了丰富的信息Output这里面是输出文件包含各种中间文件Project工程文件类似于Makefile一样的存在Doc工程文件的说明文档Board板级驱动也就是针对你的开发板特定的驱动在别的板子上不行User基于驱动程序的应用程序这是我们电脑上文件的实际存放形式但是在keil中还有一个工程组织结构如下图我们看到的不叫文件夹在keil里面叫做group它也只是给人看的一种组织形式。我们可以向里面添加我们需要的文件选择并配置编译环境这一步不同的开发方式不同的开发软件都有着不同的配置方法但是基本思想都是一样的我们以keil为例进行介绍在keil中有一个叫做魔术棒的东西他就是用来配置编译环境的如下所示点开我们会看到如下界面我们将逐个介绍里面每一个选项卡的含义Options for Target1. Device选项卡如下图在这一步中我们选择相应的目标芯片这样keil就会根据这个芯片选择特定的编译器我们可以通过这个选项卡知道芯片的一些信息。2. Target选项卡如下图1、指定用晶振频率可以用于模拟调试仅反应外部震荡频率2、可以选择keil自带的操作系统一般不用3、系统可视文件一般不用4、片外只读存储器设置5、片内只读存储器设置6、编译器选择7、交叉模块优化8、使用MicroLIB9、片外RAM设置10、片内RAM设置3. Output选项卡如下图1、输出路径输出路径就是在工程编译的过程中输出这些文件的保存路径2、输出可执行文件名3、输出可执行文件4、输出库输出的是静态库而不是动态库4. Listing选项卡1、输出路径、宽高选择列表文件输出的文件夹。可设置文件页面的宽度、长度。2、输出汇编列表勾选上会输出汇编列表信息如果工程中没有汇编文件则什么也不输出3、C编译列表C编译程序列表选项勾选上可生成.txt.i文件4、链接列表可选择生成或者禁止生成.map文件5. User选项卡1、编译运行之前运行用户程序2、编译之前运行用户程序3、编译之后运行用户程序4、编译之后执行条件执行条件编译完发出声音启动调试程序6. C/C选项卡1、预处理定义这里主要就是预定义功能相当于程序中的#define xxx2、语言代码生成可以理解为编译链接到最后生成代码这部分对代码优化尤其重要3、包含路径就是让keil知道可以去哪里寻找头文件4、多功能控件5、编译器控制字符串针对编译器执行的命令用来控制编译器的行为的7. Asm选项卡这个选项卡和上一个C/C差不多只不过针对的是汇编语言不再赘述。8. Linker选项卡用来控制链接器的行为的1、使用来自目标对话框的内存布局这一步的意思就是使用我们指定的内存布局来编排代码中不同部件的位置2、分散文件可以加载、查看和编辑分散文件9. Debug选项卡这个选项十分重要它是用来调试软件仿真、硬件在线 使用的。软件仿真和硬件在线调试配置基本一致所以只讲硬件在线调试1、选择硬件在线调试2、选择硬件在线调试Load Application at Startup启动时加载应用程序。Run to main()程序执行到main()函数。Initialization File加载编辑初始化文件。3、复位初始化会话设置如果勾选上点击一下“复位”就会恢复到之前的状态。包括断点Breakpoints、窗口Watch Windows、性能分析器Performance Analyzer、内存窗口Memory Window、工具箱Toolbox、系统查阅器System Viewer等。4、DLL文件这里不要动5、管理组件描述文件这里一般不用去管理。10. Utilities选项卡这个部分属于公共选项。1、为Flash编程使用一个目标驱动也就是一个flashloader这里是二选一一般我们使用上面的“Update Target Driver for Flash Programming”。Use Debug Driver使用调试驱动。Update Target Before Debugging调试之前更新目标Setting设置很多人下载程序后需要复位一下程序才可以运行原因在于没有勾选“Reset and Run”如下图2、配置图像文件的处理这个我们不常用暂时不去了解11. 总结来总结一下这10个选项卡中最核心的是Target、C/C、以及Linker。其中的Target和Linker共同用来配置链接器Target和C/C共同用来配置编译器。注其实Device的选择对后面的选项卡都有影响但我们要知道这种影响是机器帮我们做的为的是帮我们屏蔽芯片细节但是出于学习的目的我们在这里要忽略Device这个选项卡自己去了解芯片架构内存映射自己配置选项卡。除此之外后面的Debug和Utilities也是很重要的。总结凡事都是要遵守流程讲究规范注意总结这对于技术的积淀和效率的提高十分重要感谢你的阅读如果有错误或者不成熟的地方请一定要提出来谢谢。