一、背景

因为单片机学习是软硬结合的,离开软件,单片机无法工作。所以需要准备合适的编程环境。

二、需求

作为学习用的编程环境,我觉得应该满足:

  1. 上手容易;不需要花很多时间学习后才能正确使用。
  2. 环境参数设置方便,有些编程环境参数设置过于复杂,对于做实际项目是有价值的,但对于学习者而言,就是障碍了。
  3. 无版权问题(无需花钱购买,或盗版)
  4. 有完善、丰富的参考资料。

三、选择及准备

3.1 选择

因为目前硬件基础选择的是 STM32 系列单片机,可选择的编程环境有:

  1. 经典的IAR或MDK编程环境;很多专业人员均使用,其最大优势是支持几乎所有公司的单片机,这在单片机品种百花齐放时有价值,但目前已集中于 Cortex_M 系列内核,其优势不再那么明显。因为是针对专业人员的,且支持了很多种单片机,上手及参数设置均有一定难度,对学习者最大的障碍是:有版权,需要购买。在如今国内逐渐尊重版权的氛围下,盗版已不能再堂而皇之了。
  2. ST公司提供的 STM32CubeIDE;其最大的优势是:将其产品的功能发挥到极致,且能不断跟随其产品升级而升级。因为是为自家产品服务的,所以无需付费即可使用。但由于ST公司的STM32系列单片机有好几百种,它为了客户能方便、可靠使用其产品,IDE环境中几乎涉及到所有单片机的所有功能,使用起来有一定难度,对学习单片机而言并非有价值,尤其是对于只有几十学时的大学生而言,选择STM32只是载体,并非是为了学会STM32,作为日后工作的基础。单片机学习的重点是掌握单片机应用的方法,可以用其解决现实问题,未来工作中未必使用STM32,所以消耗过多时间掌握ST公司针对其产品的编程环境有点本末倒置。
  3. 开源的Arduino IDE编程环境;Arduino IDE早期是基于Atmel公司的AVR系列单片机推出的一个针对非工科人员使用的单片机开发环境,其目的是降低使用者对基础知识的要求,能很快的使用单片机解决实际问题,初衷是实现“与硬件无关的编程”。但推出后备受推崇,因为即便是专业人员,在要求不高时,或者临时用一下的场景,并不愿花很多时间去看编程环境的使用说明,能用起来即可,所以也深受欢迎。由于是开源,有很多人分享相应的硬件驱动程序,更加简化了使用。如今,Arduino已成为一种较为流行的单片机编程模式。很多芯片厂家按其思路,将自己的芯片融入到Arduino IDE 环境中,以期降低学习者使用其芯片的门槛。ST公司就以开源方式提供了支持STM32的Arduino 环境,称之为:STM32Duino,并且整合到 ArduinoIDE中,很方便加入,使用方式和Arduino 一样。使用STM32Duino作为编程环境最大的不足是:缺少系统的技术文档!需要靠自己摸索;同时由于封装的比较好,对单片机内部的了解会有所减少。

除了上述几种外,好像还有一些:如基于 eclipse 编程,学习软件的比较喜欢,但对应偏硬件的单片机学生而言,不一定能接受。还有一些不太流行的,我不是很了解。

从上面三种主流的编程环境中,我觉得选择Arduino IDE 比较合适,因为:

  1. 开源,不涉及版权问题。
  2. 上手容易,几乎不需要学习编程环境,可以将精力全部集中于程序逻辑本身。
  3. 有丰富的开源共享信息可以参考,便于学习者拓宽思路。
  4. 有ST提供的相应库,基本上满足了对STM32 硬件的使用需求。
  5. 支持 Free RTOS,有进一步学习的提升空间。
  6. 支持C++类定义,对于编程学习可以更加深入,掌握面向对象的设计思维。
  7. 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的安装说明详见:

https://github.com/stm32duino

首先要涉及到的是:

点击进入:https://github.com/stm32duino/Arduino_Core_STM32

阅读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 下看看,找到需要的后,再在上述“库管理器”中寻找、安装:(https://www.arduinolibraries.info/architectures/stm32 )

比如说,想尝试 RTOS,就可以安装 STM32Duino Free RTOS。

四、结语

基于掌上实验室的目的和使用对象,选择 Arduino IDE 作为编程环境较为合适。

基于所选的核心板 MCU,选择 STM32Duino作为基础编程环境,一方面兼顾的 Arduino IDE 的易用性,另一方面给学习者提供了空间、挑战,尤其对于主要使用对象大学生而言,为其日后能应对实际工作提供了可能。

通过阅读STM32Duino的源程序来弥补其文档不完善的不足,本身就是一个学习的机会,因为编写STM32Duino的人应该是专业人员,这些源程序就是很好的编程范例。

——————————

掌上单片机实验室 — 编程环境(3)相关推荐

  1. 掌上单片机实验室 - 编程环境(续)(6)

    最近在帮朋友做个项目时,再次使用 STM32Duino,发现ST公司对STM32Duino做了较大的改进,前文我所抱怨的没有详细技术文档之事如今也增加了,为此,赶紧续文一篇,将此好消息与大家分享. 第 ...

  2. 掌上单片机实验室 - 实现运动功能(10)

    一.背景 前面已完成了硬件激活.编程环境选择.软件框架构建,并且基于软件框架尝试了基于 RTOS 编程,为在此软硬件环境下学习单片机编程做了充分的准备. 从本篇开始,开始以其为载体,一步步完善其功能. ...

  3. 掌上单片机实验室 – 检验自整定适应性(12A)

    一.背景 前面经过努力,将Arduino 的共享资源 PID AutoTune 自整定库用起来了,并进行了验证性测试,效果不错. 但那个验证是在我琢磨自整定库的平台上(掌上实验室小车)进行的,做完后回 ...

  4. 掌上单片机实验室 – 构想(1)

    一.背景 突如其来的疫情,打乱了大学生的正常学习氛围,传统的校园学习模式无法实施,虽说网上教学做了相应的弥补,但对于多数工科课程,只靠线上教学很难完成,单片机课程就是其中之一. 单片机这类工科课程有较 ...

  5. 掌上单片机实验室 – 实现PID自整定(11)

    一.背景 上一篇实现了小车运动控制,在程序框架下,基于FreeRTOS编写了驱动任务,包含电机控制.测速.PID调速.行走距离控制等和运动相关的功能.但 PID 调速只是完成了算法,并未真正实现调速, ...

  6. python win10还是linux_在win10的Linux子系统(WSL)上搭载python编程环境

    为什么使用WSL进行python编程 WSL,全称Windows Subsystem for Linux.简言之,win10提供了一个子Linux系统,可以解决虚拟机和双系统的系统之间阻隔的问题而不影 ...

  7. 在SAP云平台ABAP编程环境上编写第一段ABAP程序

    距2017年秋季的SAP TechEd大会上一位大佬Björn Goerke,SAP's Chief Technology Officer宣布了SAP Cloud Platform即将支持ABAP至今 ...

  8. CENTO OS上的网络安全工具(十八)ClickHouse及编程环境部署

    这篇其实去年就写好了,孰知就在12月31日那一天打进决赛圈,一躺,二过年,三休假,四加班,居然到了三个月以后,才有机会将它发出来-- 一年也就四个季度不是,实在是光阴荏苒,岁月蹉跎. 本来也打算给这个 ...

  9. 如何在 SAP BTP 平台 ABAP 编程环境里消费基于 SOAP 的 Web Service

    这是 Jerry 2021 年的第 47 篇文章,也是汪子熙公众号总共第 324 篇原创文章. Jerry 2014 年时,曾经在 SAP 社区上写过一篇英文博客,介绍了如何在 ABAP On-Pre ...

最新文章

  1. [转]理解“Future”
  2. 教育培训行业如何在抖音快速获客、变现?
  3. 使用Entity Framework code first, migration
  4. [leetcode] Bulb Switcher
  5. 算法 排序 python 实现--快速排序
  6. matlab求系统根轨迹代码_根轨迹法、PID参数整定和matlab指令计算
  7. linux c 获取网关ip,linux sh 如何根据出口网关来获取本机出口ip
  8. HTML5触摸事件演化tap事件
  9. Python:Python全球生态主站,pip安装方法、集成安装方法、文件安装方法、第三方库自动安装脚本
  10. 虚拟机中PXE-MOF:Exiting intel PXE ROM.Operating system not found解决方法
  11. u盘数据恢复的原理_电脑磁盘文件数据误删恢复原理、方法总结
  12. sudo su 和sudo -s的区别
  13. stm32f103+znfat+ch375+vs1003实现简单mp3播放器功能
  14. eclipse配置--代码提示、xml提示
  15. 软考题目快速学习法(个人笔记)
  16. Alpha阶段敏捷冲刺④
  17. 英文文献翻译的APP
  18. separator path php,php常量 DIRECTORY_SEPARATOR 和 PATH_SEPARATOR
  19. 随机优化中的样本均值近似方法
  20. 如何在Mac上刻录DVD以获取可播放的视频?解答来了

热门文章

  1. Web前端学习第五周
  2. Altium designer除了GND以外的Nets自动布线
  3. CATIA 数控编程加工实例精解视频教程
  4. 关于SQLyog创建函数
  5. SQLyog中断查询语句
  6. lol韩服游戏内设置_lol韩服设置中文对照
  7. 社交电商的社交消费特点及电商形态分析
  8. 机器学习做自动聊天机器人_您不应该使用聊天机器人的3个原因
  9. 2015史上最全android手机root刷机工具排行榜
  10. 「 右键管家」使用指南