2025年单片机设计原理及应用(单片机原理及系统设计)

单片机设计原理及应用(单片机原理及系统设计)学习单片机与嵌入式系统原理与应用 可以参考以下学习方法 打好基础 在学习嵌入式开发之前 需要先掌握一些基础知识 例如 C 语言 数字电路和计算机组成原理 对于 C 语言 至少应该能够编写和调试一个 3 500 行的程序 并理解 C 语言的基本语法规则 基本语句的使用 以及指针的概念和灵活使用 学习单片机 具备了这些基础知识之后 可以开始学习单片机 单片机编程本身也属于嵌入式编程 但在这里

大家好,我是讯享网,很高兴认识大家。



学习单片机与嵌入式系统原理与应用,可以参考以下学习方法:

  1. 打好基础:在学习嵌入式开发之前,需要先掌握一些基础知识,例如C语言、数字电路和计算机组成原理。对于C语言,至少应该能够编写和调试一个3~500行的程序,并理解C语言的基本语法规则、基本语句的使用,以及指针的概念和灵活使用。
  2. 学习单片机:具备了这些基础知识之后,可以开始学习单片机。单片机编程本身也属于嵌入式编程,但在这里,我们只是把单片机开发作为嵌入式系统开发的基础,而不是将其作为真正的嵌入式系统开发。
  3. 学习嵌入式Linux应用开发:完成单片机相关知识的学习后,可以开始进行基于单片机的嵌入式系统设计。此时,需要对嵌入式Linux平台上的应用和驱动开发有深入的理解。
  4. 学习嵌入式Linux系统和驱动开发:在深入理解了嵌入式内核和驱动开发后,可以进一步学习如何开发Linux系统和驱动。
  5. 掌握硬件测试工具:学习使用示波器、万用表等基本硬件测试工具以及电烙铁焊接技术。
  6. 实践操作:学习理论知识的同时,通过具体实践操作,加深对理论知识的理解。
  7. 参加培训课程:参加专业的培训课程,跟随经验丰富的导师学习,并与其他学习者交流讨论,可以更快地掌握相关知识和技能。
  8. 参考书籍和教程:阅读相关的书籍和教程,例如《单片机与嵌入式系统原理与应用》、《嵌入式系统设计与开发教程》等,可以帮助你更系统地学习相关知识。
  9. 网络资源:利用网络资源,如在线论坛、教程网站、技术博客等,可以获取更多的学习资料和学习经验。
  10. 培养耐心和坚持:学习嵌入式系统和单片机需要时间和耐心,不要因为遇到困难而气馁,要坚持不懈地学习,并享受学习的过程。

在学习单片机的过程中,多注重从项目上学会只是,基于问题去学习知识点,在完成项目的过程中又不断复习和强化知识。多做项目,嵌入式进步飞快。但最主要的,还是要打牢c语言的功底。

推荐几个项目网站:

立创开源广场Arduino中文论坛,arduino入门最全学习项目及教程资料 DF创客社区树莓派实验室 | Raspberry Pi中文资讯站,提供丰富的树莓派使用教程和DIY资讯

希望对你有帮助!


讯享网

多动手多实践,学这个东西一定不能光看书和听课。

听不懂就自己看书,只看书也不行,得买块板子来自己写程序练习,做一些自己想做的东西,如果实在学不了就放弃吧,不是每个人都有天赋学好这个专业的。

  1. 基础知识:需要掌握一些基础的电子知识,如电路原理、数字逻辑等。这些知识是理解单片机和嵌入式系统的基础。
  2. 理论学习:学习单片机和嵌入式系统的理论知识。这包括单片机的结构、工作原理、编程方法等。
  3. 实践操作:理论知识学习的同时,需要进行大量的实践操作。可以购买一块单片机开发板,通过编写程序来控制开发板上的LED灯、按键等外设。这样可以更好地理解单片机的工作原理和编程方法。
  4. 项目实践:对单片机有了一定的了解后,可以尝试做一些小项目,如温度控制器、智能家居系统等。这些项目可以将所学的知识应用到实际中,提高动手能力和解决问题的能力。
  5. 深入学习:如果对嵌入式系统有深入的兴趣,可以学习一些高级的知识,如嵌入式操作系统、嵌入式网络通信等。这些知识可以更好地理解和设计复杂的嵌入式系统。

学嵌入式一定要在实际MCU上动手实操,买块便宜的STM32开发板,最好懂C,或者Python,把开发板SDK中的例子都跑一遍,就会对芯片外设,SPI/I2C/UART等协议如何使用有直观的感受了,如果再花个几百块买个8/16通道便携式逻辑分析仪抓波形学习效果会更

想象自己重生来到了魔法世界, 电子信息产业与基因工程为多环世界的两种顶级魔法.

微控制器与(多任务)操作系统是魔法学院的准入教程.

学成后并完成课程实习, 你就初步拥有了通过数控技术, 操纵魔法并改变世界的能力.

并获得魔法学徒的结业证明(微控原理与嵌入系统的课程成绩).

或者这是你打怪升级成为首席的第一步.

听不懂就买个单片机开发板,自己练练例程,再做些小创意作品,就懂了,实践出真知

多去实验室,跟着学长参加电子设计大赛,通过解决实际项目的一个个问题,锻炼分析问题,查找资料,快速解决问题的能力。实践是最好的老师

你好,

大学单片机和嵌入式系统相关课程,有些先修课程,主要是C语言和计算机组成原理和接口技术,前面的先修课程学好了,后面的课程学起来才会轻松些,因为使用到的大多数都是计算机的原理和接口相关的知识,还有就是计算机语言,操作系统相关的知识

谈到嵌入式开发,当然离不开STM32;谈到STM32开发当然离不开Keil MDK,目前几乎所有的STM32教程的项目就是基于Keil这个开发工具,尽管Keil非常稳定、使用率也非常高,但是不可否认的是作为一款老牌嵌入式开发IDE,Keil已经太老了。

如果说古老的UI界面只是难以操作,可以让人勉强接受,那以GB 2313为编码方式实现中文显示,完完全全体现出这个IDE是上个时代的产物了。

为了尝试使用更优雅的解决方案,我找到了PlatformIO,一个作为vscode插件的嵌入式开发解决方案,接下来就记录一下用PlatformIO实现编译、烧写、串口通讯、STLink调试、变量查找的过程。

vscode相信大部分编程爱好者电脑上都有,在浏览器内核的帮助下使得vscode启动非常迅速,再加上各种插件实现代码提示、代码补全、编译等各种功能,使其变成一个非常棒的编辑器。(而且还免费)

在嵌入式开发的时候,我们可以安装C/C++的插件,实现代码提示、代码补全等功能以配合开发需求。

安装PlatformIO不需要想Keil一样安装一个软件(可能还需要付费),只需要在插件中搜索并安装即可。

跟普通的嵌入式开发一样,如果你的设备与电脑连接需要驱动,那同样需要将驱动安装上,PlatformIO支持许多嵌入式芯片包括但不限于STM32、Arduino等,这一步需要安装你的芯片可能所需的驱动。

本文以STM32为例,我就需要安装CH340作为串口驱动。

在安装完PlatformIO并启用后,在vscode的侧边栏可以看到一只小蚂蚁,那个就是PlatformIO的插件,点击就进入了控制界面,如果没有界面就点击左下栏的PIO Home-Open即可。

新建一个PlatformIO项目可以点击Quick Access里面的New Project。

并为新项目命名,在Board中选择你的嵌入式芯片对应的型号,以及需要开发对应的Framework。

PlatformIO支持许多嵌入式芯片,但是如果没有你的的话可以上官网找找,或者找个同类型的先新建,因为在项目中可以调用自己的头文件。

安装成功后项目目录格式应该会是这样,以下是各个目录的含义和作用:

至此,新建项目成功。

以STM32学习出发,大部分STM32学习代码都是以Keil项目为单位,而我们想要在PlatformIO上尝试运行这些项目,就需要将项目迁移过来,本文以以下这个STM32项目为例。

在迁移项目时,我们需要把项目所需的文件以PlatformIO的项目目录格式进行分类。

  • 头文件
  • 源文件
  • 单独的库

以本项目为例,APP文件夹中的led文件夹就是一个库文件,包含独立的头文件和源头文件;User文件里的.h文件就为头文件,.c文件就为源文件;Libraries里的STM32F10x_StdPeriph_Driver文件夹里也是有一大堆头文件和源文件。

将对应的文件按照PlatformIO的项目目录格式放置在对应的目录下,并在platformio.ini文件里配置头文件的路径,以及项目所需的部分配置。

主要以main.c文件出发,找所需的文件,并将所需的文件放在对应的目录,确保能被搜索到。

在所有依赖文件都安放好后,点击项目里的Build或者下方栏的“打勾符号”进行编译。

注意!:如果所有文件都安装好了所需的依赖都有了,但是还是无法编译成功,出现类似如下报错:报错内容有出现multiple definition重复定义报错的问题。

那应该就是我们自己添加的文件和我们在新建项目时选择的Framwork里PlatformIO为我们提供的文件出现的重叠,如果是重复定义,我们可以删掉这些重复定义的文件,或者可以的话删掉这整个文件。这个问题困扰了我好几天!

在编译后输出绿色的SUCCESS后,我们就可以在.pio/build/<你的嵌入式芯片型号>/目录下找到firmware文件,这就是编译后的文件。

至此,项目迁移并编译成功。

以STM32芯片程序烧写为例,最基础的方法是通过串口烧写,目前大部分烧写工具都是通过串口连接后使用.hex文件烧写,由于PlatformIO编译默认生成的是.bin和.elf文件,如果我们需要用hex文件通过其他烧写工具烧写的话需要使用一个python脚本将.elf文件转换为.hex文件。

当然PlatformIO本身也支持串口烧写,所以我们一个一个来讲。

我们在项目的根目录下(和platformio.ini文件同级)新建一个export_hex.py,内容如下:

Import("env") # # Custom HEX from ELF env.AddPostAction( "$BUILD_DIR/${PROGNAME}.elf", env.VerboseAction(" ".join([ "$OBJCOPY", "-O", "ihex", "-R", ".eeprom", '"$BUILD_DIR/${PROGNAME}.elf"', '"$BUILD_DIR/${PROGNAME}.hex"' # 加个单引号 ]), "Building $BUILD_DIR/${PROGNAME}.hex") )

讯享网

然后在platformio.ini文件里添加一行extra_scripts = export_hex.py,使其在每次编译后运行一遍这个脚本,如图所示。

至此,重新编译后,就会在.pio/build/<你的嵌入式芯片型号>/目录下多生成一个firmware.hex程序,然后打开其他烧写程序工具,选择这个程序就可以成功烧写了。

platformIO在有串口接入的情况下默认使用的是串口烧写程序,但是出于严谨和方便维护的情况下,严格的配置方式是在platformio.ini文件中配置烧写方式为串口(upload_protocol = serial)。

点击编译按钮隔壁的”Upload”按钮,platformIO就会开始自动寻找对应的COM口,并自动烧写。

以STM32为例,platformIO使用的是它下载下来的stm32flash工具烧写的,如果需要自定义的话,可以将upload_protocol设为custom,并自定义烧写命令,如上图注释代码所示。

至此,实现串口烧写程序。

PlatformIO支持大部分主流的仿真器,以STLink为例,在嵌入式芯片按照要求连接好STLink仿真器并接入到电脑后,查看硬件管理器里有没有找到STLink设备,如果能找到就成功连接好仿真器了。

platformio.ini文件中将debug_tool设置为stlink,由于stlink也支持程序烧写,所以其实把upload_protocol写为stlink也是没问题的,也方便,如图所示。

在硬件连接成功,配置文件也配置好之后,就可以在vscode侧边栏的调试里,找到对应项目名的PIO Debug项目的调试方法。

在点击运行和调试后,程序会自动烧写并上传,然后静置一会。。。就会开始vscode的调试啦,由于身边暂时没有开发板,没有办法嵌入式芯片的调试照片,大概长这样子:

可以在需要调试那行设置断点,程序运行到那行的时候可以知道,而且侧边栏可以查看当前所有变量的值,基本拥有所有调试所需的功能。

至此,PlatformIO的STLink仿真器设置完成。

当然PlatformIO也支持其他仿真器,如cmsis-dap等,也支持设定为custom进行自定义debug,使用cmsis-dap时是使用自带的openocd工具进行自动运行调试器等,具体就没有再细究了。

platformIO也支持串口通讯,在platformio.ini配置文件中配置如下。

具体的每行的含义应该很明显了,在配置完成后,在确保串口连接成功,可以找到串口文件的情况下就可以点击”Upload”隔壁的”Monitor”启动串口通讯了,哦对了,如果不指定monitor_port的话,platformIO会自己找合适的设备,如果只有一个的话基本上就不会错。

在这个情况下就成功实现串口通讯了,直接打字回车发送就行啦。

在使用过STM32学习资料的朋友都知道,每个程序就是以一个Keil项目储存的,由于一个嵌入式芯片所需的文件基本都类似,所以在platformIO中可以使用不同的虚拟环境以支持不同的文件和不同的同芯片开发板。

以我个人开发场景为例,我手上有两个STM32F103ZE芯片的开发板,但是一个是以小车为目标设计的,一个是学习板,由于两个开发板的芯片相同,所以我可以在一个platformIO项目中同时实现对两个开发板的分别烧写、调试等。

具体实施如下。

我的platformio.ini配置如下:

讯享网[env] platform = ststm32 board = genericSTM32F103ZE framework = cmsis build_flags = -I include/STM32F10x_StdPeriph_Driver/inc -I include -D USE_STDPERIPH_DRIVER -D STM32F10X_MD monitor_speed =  monitor_echo = yes monitor_rts = 0 monitor_dtr = 0 extra_scripts = export_hex.py [env:car] upload_protocol = stlink debug_tool = stlink [env:board] upload_protocol = serial

其中第一个[env]的内容为公共的,两块开发板这里的配置都是一样的,然后不同的地方就分别分为[env:car][env:board],其中[env:car]是专门为STM32小车的配置,由于STM32小车配有STLink仿真器,所以对于小车的开发我采用stlink烧写并调试,而对于[env:board]学习板的开发,我只采用串口烧写。

在完成如此配置后,我的运行界面如下,我可以选择在Default中选择同时为两个项目同时进行操作,我也可以单独为两个项目做对应的操作。

由于一个项目还是只能有一个main.c,所以我的方案是,在根目录下为两个项目分别建立文件夹,存储对应的程序,在需要的时候复制到main.c中并使用对应的编译烧写方案,实现同一个项目快速开发多块开发板,而且不需要像Keil一样为了烧写其他程序还要打开一个新的项目,再编译,再打开烧写工具烧写。

至此,所有的关于platformIO的使用技巧就说完啦。

大家可以在官方文档里,对PlatformIO有更深的了解。

Keil就像一个可能不是那么讨人喜欢但是永远陪在你身边,在你不得已的时候永远可以站出来稳定帮助你的老工具,而platformIO更像一个年轻人,为你提供一切便利的方法,可能它没有那么靠谱,有时候报的错误让你摸不着头脑,网上的资料也不是那么丰富,那么全面,也不能让你放下心把大型的项目交给它,但是我们的科技就是在这样一个又一个年轻人站出来,尝试去创造出更好、更适合的世界,才能变得更好。

我对PlatformIO的了解也非常有限,我没有尝试过使用起来那个test文件夹,我对cmsis-dap仿真器的使用也失败了,我还有很多要学习的地方,希望这篇文章可以帮助像几个星期前的我一样的朋友,如果有其他人有更好的想法或者解决方案也很希望可以一起沟通。

本文由博客一文多发平台 OpenWrite 发布!

小讯
上一篇 2025-05-24 18:35
下一篇 2025-04-21 22:11

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/137398.html