目录

发展历程

概述

IDE介绍

开发语言

兼容板

兼容板开发注意事项

Arduino与Zephry的不同点

基本代码架构


发展历程

起始地区

命名&开源协议

创建者

创立起因

2005年-意大利北部小镇伊夫雷亚

Arduino /CC开源

Massimo Banzi && David Cuartielles

因找不到便宜而又通用合适的电路板

arduino软件架构 arduino 架构_c语言

概述

  • Arduino是一个偏向通用且开源的硬件框架,任何人都可以下载到Arduino的硬件设计图,并进行修改与发布,不需要经过Arduino团队的允许,但需要标明你的硬件框架是基于Arduino框架
  • Arduino在最初设计就为了通用,易用而生,为了让开发者节约开发成本,所以开发了一套IDE与类C的编程语言,但是比C更简单,使得我们不需要去关心指针,底层硬件模块原理

IDE介绍

Arduino考虑到易用性,为了让大家能够快速上手所以基于Processing IDE开发了一套Arduino IDE,Processing IDE是第一款GUI可视化编程语言IDE,由麻省理工大学1996年研发,一经研发便名声大振,因为它改变了当时只能用命令行来编程的环境,使得编程易用性学习性变得简单了,并且它也是首款可以开发GUI界面的程序

<Processing IDE>

arduino软件架构 arduino 架构_Arduino_02

 <Arduino IDE>

arduino软件架构 arduino 架构_Arduino_03

此外,还有许多IDE已经支持Arduino,如Visual Studio Code已经推出了Arduino一体的开发插件,支持代码下载,开发板管理等

开发语言

Arduino语言是使用wiring语言作为二次开发的语言,wiring语言是对avr-gcc库的二次封装,avr-gcc是专为单片机开发的glib c库,目的是高效,速度,且专为单片机开发的C库,它比常用的GCC速度要快许多

wiring语言里封装了许多针对硬件控制的函数,它相当于一个硬件控制库,具体可以参考树莓派的wiringPI

所以我们在开发时只需要调用里面的库函数就可以完成对硬件的控制,不需要去写复杂的指针方面的代码,甚至一些简单的硬件都不需要去看芯片手册,只需要知道这个函数怎么用就可以了

如点亮LED只需要两行代码

pinMode(pin1, OUTPUT);          //设置管脚1为输出模式
digitalWrite(pin1, HEIGHT);     //向管脚1写入高电平, 点亮LED灯亮

Arduino的解释器是使用Java编写而成,需要区分一下解释器、编译器与编程语言的区别,编译器是负责将编程语言翻译为可执行的二进制文件,主要负责检查编程语言语法错误,语义问题,代码汇编优化工作,而语言不同,语言是用来描述程序应该怎样工作,编译器的作用就是解释描述并翻译成对应的机器指令以及生成对应的可执行文件,可执行文件其实就是一大堆CPU指令集,用于告诉CPU怎么工作,而解释器就类似Makefile,根据规则去调用不同的编译器来合并编译生成对应的文件,Arduino使用Java来写编译器,然后合并调用wiring库。

兼容板

是指被Arduino支持的板子,可以通过Arduino IDE加载指定开发板,一般开发板的厂商如果想要与Arduino兼容会按照Arduino的规范编写一个类似Zephry/Linux上的dts文件,并写一个json文件用于告诉Arduino如何安装与配置这些描述文件,然后在通过Arduino IDE下载并安装这些板子的描述文件,就可以通过Arduino IDE来对对应的板子进行开发了。

如STM32官方就推出了stm32duino,其描述文件在github上开源:http://study.arduino-esp32.cn/study/STM32/package_stmicroelectronics_index.json

这里用STM32作为演示下载它的板子描述文件并加载到Arduino上

首先我们只需要将描述文件地址放入Arduino IDE的文件-首选项-附加开发板管理器网址

arduino软件架构 arduino 架构_stm32_04

 然后打开工具-开发板管理器

arduino软件架构 arduino 架构_arduino软件架构_05

 就可以看到这个描述文件中涵盖了STM32厂商的所有板型

arduino软件架构 arduino 架构_引脚_06

 在安装完成之后就可以在开发板中选中你所使用的STM32 MCU型号,然后就可以开始开发了,选中型号之后Arduino里的一些引脚地址都会根据MCU型号而变化,所以一套代码可以通用在不同的架构上,Arduino会根据选择的MCU而发生改变,所以尽量使用Arduino官方提供的宏定义或函数

arduino软件架构 arduino 架构_arduino软件架构_07

这里需要注意STM32Duino使用的是STM32CubeProgrammer作为固件下载器,所以需要在下载一个STM32CubeProgrammer,并添加到环境变量才能被Arduino识别,Arduino IDE会根据提供的描述文件来选择下载器

这里给出下载地址:STM32CubeProg - STM32CubeProgrammer software for all STM32 - STMicroelectronics

只需要根据你当前系统环境选择对应的版本,并安装好了之后将bin路径添加到系统环境变量中就可以了,Arduino会自动调用

并且我们也可以自己定义与生成lib库,可以方便在不同工程中调用

兼容板开发注意事项

需要值得注意的是引脚编号,上面说过选中对应MCU型号引脚地址会自动改变,但是编号不会,在Arduino中所有引脚以PIN为标识,而STM中由PA,PB等,所以它们之间有一个STM32引脚到Arduino的映射关系,兼容板官方都会提供的,这里给出部分STM32的引脚映射关系:

STM32 PA引脚

Arduino

Stm32

PIN0

PA0

PIN1

PA1

PIN2

PA2

PIN3

PA3

PIN4

PA4

PIN5

PA5

PIN6

PA6

PIN7

PA7

PIN8

PA8

PIN9

PA9

STM32 PB引脚

Arduino

STM32

Arduino

STM32

PIN16

PB0

PIN17

PB1

PIN18

PB2

PIN19

PB3

PIN20

PB4

Arduino与Zephry的不同点

Arduino与Zephry不同的是我们不需要去修改MCU的描述文件,其实在Arduino中我们一般也修改不了,因为Arduino对其进行了一层封装,使得我们不像Zephry那样可以随意查看dts文件,其次是我们也并不需要修改,因为Arduino兼容板提供的MCU描述文件里面已经全面描述了整个原理图中的引脚和模块,我们可以随意使用,其次是Arduino不像Zephry那样可能还需要去修改DTS文件开启驱动,这里我们是不需要的,因为Arduino没有驱动这个概念,只有wiring语言,使用这个语言里提供的一些函数库去控制硬件,等于我们自己去实现驱动,但是实现是非常简单的,因为wiring里对硬件封装的非常全面,具体可以参考树莓派的wiringPI

基本代码架构

在新建Arduino工程会看到如下基础代码

void setup() {
  // put your setup code here, to run once:
 
}
 
void loop() {
  // put your main code here, to run repeatedly:
 
}

setup

只会执行一次,在开始时执行

loop

在setup执行完成之后,会循环执行loop