单片机交流
直播中

王越建

7年用户 1439经验值
私信 关注
[问答]

为什么要选择Arduino IDE作为STM32单片机的编程环境呢

STM32系列单片机可选择的编程环境有哪些?
为什么要选择Arduino IDE作为STM32单片机的编程环境呢?

回帖(1)

王艳红

2021-11-2 10:10:49
  一、背景
  因为单片机学习是软硬结合的,离开软件,单片机无法工作。所以需要准备合适的编程环境。
  二、需求
  作为学习用的编程环境,我觉得应该满足:
  上手容易;不需要花很多时间学习后才能正确使用。
  环境参数设置方便,有些编程环境参数设置过于复杂,对于做实际项目是有价值的,但对于学习者而言,就是障碍了。
  无版权问题(无需花钱购买,或盗版)
  有完善、丰富的参考资料。
  三、选择及准备
  3.1 选择
  因为目前硬件基础选择的是 STM32 系列单片机,可选择的编程环境有:
  经典的IAR或MDK编程环境;很多专业人员均使用,其最大优势是支持几乎所有公司的单片机,这在单片机品种百花齐放时有价值,但目前已集中于 Cortex_M 系列内核,其优势不再那么明显。因为是针对专业人员的,且支持了很多种单片机,上手及参数设置均有一定难度,对学习者最大的障碍是:有版权,需要购买。在如今国内逐渐尊重版权的氛围下,盗版已不能再堂而皇之了。
  ST公司提供的 STM32CubeIDE;其最大的优势是:将其产品的功能发挥到极致,且能不断跟随其产品升级而升级。因为是为自家产品服务的,所以无需付费即可使用。但由于ST公司的STM32系列单片机有好几百种,它为了客户能方便、可靠使用其产品,IDE环境中几乎涉及到所有单片机的所有功能,使用起来有一定难度,对学习单片机而言并非有价值,尤其是对于只有几十学时的大学生而言,选择STM32只是载体,并非是为了学会STM32,作为日后工作的基础。单片机学习的重点是掌握单片机应用的方法,可以用其解决现实问题,未来工作中未必使用STM32,所以消耗过多时间掌握ST公司针对其产品的编程环境有点本末倒置。
  开源的Arduino IDE编程环境;Arduino IDE早期是基于Atmel公司的AVR系列单片机推出的一个针对非工科人员使用的单片机开发环境,其目的是降低使用者对基础知识的要求,能很快的使用单片机解决实际问题,初衷是实现“与硬件无关的编程”。但推出后备受推崇,因为即便是专业人员,在要求不高时,或者临时用一下的场景,并不愿花很多时间去看编程环境的使用说明,能用起来即可,所以也深受欢迎。由于是开源,有很多人分享相应的硬件驱动程序,更加简化了使用。如今,Arduino已成为一种较为流行的单片机编程模式。很多芯片厂家按其思路,将自己的芯片融入到Arduino IDE 环境中,以期降低学习者使用其芯片的门槛。ST公司就以开源方式提供了支持STM32的Arduino 环境,称之为:STM32Duino,并且整合到 ArduinoIDE中,很方便加入,使用方式和Arduino 一样。使用STM32Duino作为编程环境最大的不足是:缺少系统的技术文档!需要靠自己摸索;同时由于封装的比较好,对单片机内部的了解会有所减少。
  除了上述几种外,好像还有一些:如基于 eclipse 编程,学习软件的比较喜欢,但对应偏硬件的单片机学生而言,不一定能接受。还有一些不太流行的,我不是很了解。
  从上面三种主流的编程环境中,我觉得选择Arduino IDE 比较合适,因为:
  开源,不涉及版权问题。
  上手容易,几乎不需要学习编程环境,可以将精力全部集中于程序逻辑本身。
  有丰富的开源共享信息可以参考,便于学习者拓宽思路。
  有ST提供的相应库,基本上满足了对STM32 硬件的使用需求。
  支持 Free RTOS,有进一步学习的提升空间。
  支持C++类定义,对于编程学习可以更加深入,掌握面向对象的设计思维。
  ST提供的 STM32Duino 源程序是开源的,一些暂不支持的单片机功能可以通过参考其源程序自己编写库或修改其源程序实现。似乎可以直接使用ST的标准库函数。
  缺少系统技术文档之缺憾,只能通过读源程序化解了,但这本身就是一种学习,且对日后工作很有利,权且当成是“因祸得福”吧。
  3.2 准备
  首先,需要安装 Arduino IDE,在 https://www.arduino.cc/ 上下载最新版本的软件。
  最近登录才发现,Arduino 又有所改进。
  如前所述,有许多专业人员也在使用Arduino,他们不满足于原来过于简单的环境,参考专业的开发环境提出了很多要求,Arduino 似乎接受了,推出了软件专业人员喜欢的命令行版本,同时推出了专业版(professional)的IDE,目前还是测试板,有兴趣的可以顺带看看。
  我们此处还是使用传统版本的,因为STM32Duino好像还不支持专业版。
  关于 Arduino IDE 的使用,网上有相当丰富的信息供参考,此处就不再赘述。
  只提示一点:
  第一次使用时,在“文件(file)”下拉菜单中,选择“首选项(preference)”,设置“编辑器语言”,选择支持中文。
  这样就可以在程序中加中文注释了,也可以看到含中文注释程序中的中文内容,否则中文会显示为乱码。
  安装好 Arduino IDE 后,下一步就是安装 STM32Duino。
  STM32Duino的安装说明详见
  首先要涉及到的是:
  
  阅读Readme.md:
  
  按上述网页说明在 Arduino IDE中安装支持 STM32 系列开发板的驱动和库。
  目前的Arduino IDE 已经比较完善了,安装新的MCU支持库及新的库函数,均可以菜单中选择,程序会自动安装。
  STM32开发板的驱动安装在“工具”下,开发板管理器中。
  安装这个在网络不好时会比较费时间,因为需要从海外网站下载。
  下载安装完成后,就可以在 Arduino IDE环境中使用 STM32 系列MCU了。
  原来基于AVR系列MCU的例子均可以直接使用。
  如要使用STM32硬件所带来的增强功能,如:标准UNO只能支持2个外部IO中断,而STM32可以支持16个外部IO。此时就需要参考STM32板增加的例程,在示例程序有只有少量的参考程序,这就是前面所说的缺憾:没有系统的技术文档。(也许是我没有找到)
  要进一步深入使用,只有通过阅读STM32Duino的源文件!
  3.3 深入STM32Duino
  Arduino IDE 支持安装在三大操作系统下:Windows、Linux、Mac OS。
  我只熟悉Windows,故安装了Windows版本。
  要阅读STM32Duino的源程序,首先需要找到文件安装在哪里?
  在Win10环境下,STM32Duino安装在这个目录下:
  
  实际上,不只是STM32Duino,所有后续在Arduino IDE安装的开发板、第三方库均在此目录下,包括下载的压缩文件。
  安装所需的压缩文件存放在此目录下:
  
  从上述文件中可以看出,除了STM32,我还安装了ESP8266,这个也可以在Arduno IDE下编程开发。具体开发板安装文件在:
  
  我安装的是1.6.1版本,目前已经是1.9.0版本了。
  Arduino IDE是以开发板为对象的,所以STM32Duino也是同样,以特定的开发板为对象,而非某款芯片。但使用时基本还是基于芯片的,因为所支持的多为核心板和ST出的评估板,这类板自身通常占用很少资源,基本将所有引脚开放给用户,以便用户可以最大限度评估其芯片能力。
  如果你想在自己设计的PCB上使用,可以根据你所选芯片型号,选择一款和你芯片规格一致的开发板即可,看一下它占用的资源,自己在设计时适当避开即可。
  所支持的开发板在 IDE中通过选择开发板下拉菜单可以看到,分两级:
  第一级是板子的种类,如:Discovery、Nucleo-64等,
  第二级是此类板子中所对应的不同规格芯片,如Nucleo-64系列开发板就支持:
  Nucleo F103RB、Nucleo F303RE、Nucleo F401RE等
  小车所选的STM32F103C8核心板在IDE中为:
  第一级:Generic STM32F1 Series
  第二级:BluePill F103C8
  是 STM32Duino支持的开发板类型。
  每种开发板在Arduino环境中硬件资源声明此目录下可以找到:
  
  STM32扩展的Arduino标准库函数在此目录下:
  
  STM32的基础库函数存放在此目录下:
  
  从此目录看,在Arduino IDE下编程时,应该可以使用ST公司提供的标准库HAL和LL。我初步尝试过,对于一些 STM32Duino没有封装成Arduino库函数的功能,可以直接使用HAL或LL函数。但有些会有冲突,应该是被 STM32Duino占用了。
  在需要使用一些STM32特有硬件功能时,通过阅读上述两个目录下的相关文件(从文件名判断),即可粗略的知道该如何使用,再在程序上略加尝试,基本可以搞定。
  Linux版本的Arduino IDE我也安装过,感觉编译速度明显快于 Win10下的,不知何故,如果你开发的程序较大,且对linux比较熟悉,不妨在Linux环境上开发,效率也许会高很多。
  除STM32Duino核心功能外,随着学习深入,还可以选择安装相应的库文件,以便支持新的功能或外设硬件。
  库安装方式为:“工具”下拉菜单中选择“管理库”,即弹出所有可以安装的库,不过属于STM32Duino的库可以先在 Github 下看看,找到需要的后,再在上述“库管理器”中寻找、安装。
  
  比如说,想尝试 RTOS,就可以安装 STM32Duino Free RTOS。
  四、结语
  基于掌上实验室的目的和使用对象,选择 Arduino IDE 作为编程环境较为合适。
  基于所选的核心板 MCU,选择 STM32Duino作为基础编程环境,一方面兼顾的 Arduino IDE 的易用性,另一方面给学习者提供了空间、挑战,尤其对于主要使用对象大学生而言,为其日后能应对实际工作提供了可能。
  通过阅读STM32Duino的源程序来弥补其文档不完善的不足,本身就是一个学习的机会,因为编写STM32Duino的人应该是专业人员,这些源程序就是很好的编程范例。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分