Arduino是最受欢迎的单片机之一,特别适合初学者。它的编程环境友好,社区支持强大。
void setup() {
pinMode(LED_BUILTIN, OUTPUT); // 将内置LED设置为输出模式
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // 打开LED
delay(1000); // 等待1秒(1000毫秒)
digitalWrite(LED_BUILTIN, LOW); // 关闭LED
delay(1000); // 再等待1秒
}
这段代码会使Arduino板上的内置LED每隔一秒闪烁一次。
Raspberry Pi Pico是一款性价比极高的单片机,基于Raspberry Pi自家的RP2040微控制器。
from machine import Pin
import utime
led = Pin(25, Pin.OUT) # Raspberry Pi Pico板上的内置LED连接到GPIO 25
while True:
led.toggle() # 切换LED的状态
utime.sleep(1) # 等待1秒
这段代码将会使Pico上的内置LED每隔一秒切换一次状态。
STM32 Nucleo系列是STMicroelectronics推出的一系列开发板,支持多种STM32微控制器。
#include "stm32f4xx_hal.h"
int main(void) {
HAL_Init(); // 初始化HAL库
__HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA时钟
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_5; // 假设内置LED连接到GPIOA的第5脚
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIO
while (1) {
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); // 切换GPIOA第5脚的状态
HAL_Delay(1000); // 等待1秒
}
}
这段代码会使STM32 Nucleo板上的内置LED每隔一秒闪烁一次。
ESP32是Espressif Systems推出的一款具有Wi-Fi和蓝牙功能的单片机。
#define LED_BUILTIN 2 // ESP32的内置LED通常连接到GPIO2
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
这段代码会使ESP32板上的内置LED每隔一秒闪烁一次。
下面是根据代码行数(包括空行和注释)对上述提供的代码示例进行排名的表格。请注意,代码长度并不直接反映编程难度或单片机的性能,它仅仅是代码字符数量的一个度量。
单片机平台 | 代码长度 | 代码行数 |
---|---|---|
Arduino Uno | 短 | 11 |
Raspberry Pi Pico (MicroPython) | 中等 | 8 |
ESP32 (Arduino IDE) | 短 | 11 |
STM32 Nucleo | 长 | 19 |
这里的“代码长度”是基于行数的简单描述。STM32 Nucleo的代码示例最长,因为它包括了HAL库的初始化和配置代码。而Raspberry Pi Pico的代码示例较短,因为MicroPython提供了简洁的语法和高级的库函数。Arduino Uno和ESP32使用了Arduino IDE,所以代码长度相似,都是简洁的。
Arduino Uno和ESP32的代码之所以被描述为“短”,是因为它们都使用了Arduino IDE进行编程,这个集成开发环境提供了许多内置的函数和简化的编程方式,使得代码编写更为简洁直观。在Arduino IDE中,许多底层的硬件细节都被抽象化了,开发者可以直接调用高级函数,而不需要像在某些其他平台那样编写复杂的配置代码。
例如,在Arduino和ESP32的代码示例中,我们看到了以下几点简化:
pinMode()
和 digitalWrite()
函数:这些函数提供了简单的接口来设置GPIO引脚的模式(输入或输出)和状态(高电平或低电平)。这些函数隐藏了配置GPIO寄存器的复杂性。
LED_BUILTIN
宏:Arduino和ESP32都定义了这个宏,它提供了板上内置LED连接的GPIO引脚号。这意味着用户不需要查找具体的引脚号,可以直接使用这个宏。
delay()
函数:这个函数提供了一个简单的方法来实现延时,无需编写定时器代码或其他复杂的等待机制。
相比之下,像STM32这样的平台可能需要更多的初始化代码,包括配置时钟系统、初始化GPIO端口等,这些都会使得代码更长、更复杂。而在Arduino IDE中,这些都是自动处理的,开发者可以专注于实现具体的功能逻辑。因此,即使Arduino Uno和ESP32在硬件上有所不同,它们的基本闪烁LED的代码示例在长度上是相似的。