
RIOT 中的 Arduino Leonardo 板级支持TTL 串口 Shell 与 avr109 手动复位烧录实战指南【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOT本文基于 RIOT 仓库中的板级文档 boards/arduino-leonardo/doc.md系统讲解 RIOT 对 Arduino LeonardoATmega32u4的支持细节硬件规格概览、通过 TTL 串口使用 Shell 的接线与注意事项、区别于其他 Arduino 板卡的“按复位键配合烧录”操作流程以及 macOS 用户的环境变量配置。读完本文后你可以独立完成 Leonardo 上 RIOT 固件的编译、烧录与 Shell 交互并理解 RIOT 板级目录Makefile/Kconfig/板级头文件是如何组织这些行为的。板卡概览ATmega32u4 与“会扮演键鼠”的 ArduinoArduino Leonardo 是一块基于ATmega32u4微控制器的开发板。按照板级文档的表述它与 Arduino UNO 大体相同关键区别在于Leonardo 的 USB 接口可以被电脑识别为鼠标或键盘ATmega32u4 内置 USB 控制器原生支持 USB 设备类因此常用于 HID 应用开发。硬件规格要点与文档一致20 个数字输入/输出引脚其中 7 个可作 PWM 输出、12 个可作模拟输入16 MHz 晶振Micro USB 接口、电源插座、ICSP 排针、复位按键板载所有支撑微控制器工作的必要电路通过 USB 数据线连接电脑或用 AC-DC 适配器/电池供电即可上电运行。RIOT 板级支持的代码组织方式RIOT 的板级支持遵循“具体板卡目录 公共板族目录”的分层结构Leonardo 的实现非常精简大部分能力继承自 Arduino Atmega 公共部分boards/arduino-leonardo/Makefile 仅声明MODULE board并通过DIRS $(RIOTBOARD)/common/arduino-atmega复用公共板族目录boards/arduino-leonardo/Makefile.dep 通过USEMODULE boards_common_arduino-atmega引入公共依赖boards/arduino-leonardo/Makefile.features 声明CPU atmega32u4并提供arduino_shield_uno特性即兼容 UNO 的 Arduino Shield 引脚定义再叠加公共板族的特性列表boards/arduino-leonardo/Kconfig 中BOARD_ARDUINO_LEONARDO选择BOARD_COMMON_ARDUINO_ATMEGA与CPU_MODEL_ATMEGA32U4并把公共板族的 Kconfig 通过source引入boards/arduino-leonardo/board.c 中的board_init()为空实现说明 Leonardo 无需额外的板级初始化boards/arduino-leonardo/include/board.h 只包含公共的board_common.h。从公共板族的 boards/common/arduino-atmega/Makefile.features 看Leonardo 实际获得的 RIOT 特性包括外设接口periph_adc、periph_i2c、periph_pwm、periph_spi、periph_timer、periph_uart以及 Arduino 风格抽象arduino_analog、arduino_i2c、arduino_pins、arduino_pwm、arduino_shield_isp、arduino_spi、arduino_uart。这意味着你可以直接使用 RIOT 的periph_*API 或 Arduino 兼容引脚抽象驱动板载外设。使用 Shell走 TTL 串口而非 USB CDCLeonardo 的 Shell不使用 USB CDC 通道而是使用 TTL5V串口。因此需要一个 USB-TTL 串口适配器如 FTDI 转接板按以下方式连接转接板端Leonardo 端FTDI RXPIN1TXFTDI TXPIN0RXFTDI GNDGND两条重要提示原文强调Leonardo 不会像其他 Arduino 板那样在make BOARDarduino-leonardo时自动复位进入下载模式运行/调试后需要手动按下复位按钮复位后请耐心等待板载 Bootloader 会等待几秒钟才跳转运行用户程序。波特率方面板级 boards/arduino-leonardo/Makefile.include 将BAUD默认设为9600。这与公共头文件 boards/common/arduino-atmega/include/board_common.h 中的宏STDIO_UART_BAUDRATE (9600U)保持一致——源码注释解释了原因该 CPU 速度不足以稳定处理 115200 波特率因此 RIOT 默认将标准输入/输出串口降为 9600。终端工具如picocom、minicom需按 9600 8N1 配置才能看到 Shell 输出。烧录固件必须“抢在 Bootloader 窗口内”按复位Leonardo 的烧录方式与其他 Arduino 板明显不同它无法通过 DTR/RTS 信号自动重启进入 Bootloader。你必须恰当地按下复位键让avrdude能在 Bootloader 窗口期内连接到芯片。boards/arduino-leonardo/Makefile.include 中定义了烧录参数PROG_DEV ? /dev/ttyACM0Leonardo 的 USB 设备节点Bootloader 阶段呈现为 CDC 设备ARDUINO_LEONARDO_BOOTLOADER ? avr109默认使用avr109编程器即 ATmega32u4 内置的 USB 闪存器该值可被覆盖文档注释提到若需调试则需改用 ISP 方式PORT_LINUX ? /dev/ttyUSB0Linux 下 TTL 串口默认节点。快速主机Fast Host流程编译本身不慢时用完整的flash目标即可输入make BOARDarduino-leonardo flash但先不要按回车按下 Leonardo 板上的复位按钮再按回车执行命令。若编译耗时超过了 Bootloader 等待用户程序启动的窗口烧录会失败——此时改用下面的慢速主机流程。慢速主机Slow Host流程先单独运行make BOARDarduino-leonardo完成编译输入make BOARDarduino-leonardo flash-only但不要按回车flash-only只烧录、不重新编译按下复位按钮按回车。这样把“编译”与“烧录”解耦确保avrdude发出连接请求时芯片正处于 Bootloader 窗口内。macOS 用户显式导出 PORT 与 PROG_DEV文档指出macOS 用户需要同时导出两个环境变量分别指向 TTL 适配器与 Leonardo 本体的设备文件PORTTTL 转接器的设备文件用于 Shell 串口PROG_DEVArduino Leonardo 的设备文件用于烧录。板级 Makefile.include 已为 macOS 提供了默认猜测PORT_DARWIN ? $(firstword $(sort $(wildcard /dev/tty.usbmodem*)))即自动取第一个tty.usbmodem*设备但当同时插着 TTL 适配器和 Leonardo 时仅靠默认值容易指错端口因此按文档要求显式导出两者更为稳妥。Linux 下的对应默认值是PORT_LINUX/dev/ttyUSB0与PROG_DEV/dev/ttyACM0。板级宏细节LED、时钟与定时器除文档主体外公共头文件 board_common.h 中还有一批与 Leonardo 运行直接相关的定义针对CPU_ATMEGA32U4LED 映射LED0_PIN为GPIO_PIN(2, 7)板载 BUILTIN LEDPORTC7LED1_PIN为GPIO_PIN(1, 0)RX 指示灯低电平点亮LED2_PIN为GPIO_PIN(3, 5)TX 指示灯低电平点亮。内核 panic 时通过LED_PANIC即点亮 LED0提示xtimer16 位宽度、250 kHz 基准XTIMER_HZ (250000UL)时钟分频CPU_ATMEGA_CLK_SCALE_DIV1即 16 MHz 全速ztimerCONFIG_ZTIMER_USEC_DEV绑定TIMER_DEV(0)频率同为 250 kHz提供微秒级定时能力。这些宏决定了你在 Leonardo 上使用 RIOT 定时器 API 时的精度与上限也解释了为何make后的终端输出节奏以 9600 波特率为基准。小结RIOT 对 Arduino Leonardo 的支持结构上是“薄板卡层 厚公共层”板级目录只负责 CPU 指定、特性声明、烧录参数avr109、/dev/ttyACM0、9600 波特率与 Kconfig 依赖具体外设、引脚抽象和板级宏全部继承自 boards/common/arduino-atmega。实际操作上的两个关键点务必牢记Shell 走 TTL 串口且需手动按复位烧录必须利用 Bootloader 短窗口手动复位配合——按本文给出的快速/慢速主机两种流程执行即可稳定完成make BOARDarduino-leonardo [flash]全流程。【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考