MIT License

技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

深度解析 FASTSHIFT/Arduino-For-Keil

项目背景与痛点

在嵌入式开发领域,Keil 软件是众多开发者耳熟能详的开发环境。但大多数 Keil 项目架构相对复杂且冗余,与 Arduino 项目的简洁轻量有着显著的差异。这导致不少开发人员在使用 Keil 进行项目开发时,不得不面对大量的库文件、多余的工具,以及繁杂的配置问题。

FASTSHIFT 团队敏锐地捕捉到这一痛点,推出了名为 “Arduino-For-Keil” 的轻量级框架,旨在简化 Keil 项目配置,提供更加简洁易用的开发体验,同时也保持了 Arduino 的优点。这个项目不仅简化开发流程,还提高了项目的可维护性和可移植性。

核心技术揭秘

“Arduino-For-Keil” 的设计架构巧妙地植入了几个关键技术栈和设计模式,使得开发者能够更加方便地在 Keil 中进行 Arduino 风格的开发。

核心架构可以分为以下几部分:

  1. 硬件抽象层:为不同硬件平台提供统一的接口,让上层应用保持一层不变的情况下,能够复用代码。
  2. 功能模块:涵盖基础硬件操作、外部设备通信、数据管理等常见操作方法。
  3. 开发工具接口:提供与 Keil 环境相匹配的导入、导出和调试功能,降低项目迁移成本。
graph TD subgraph "Keil IDE" A[项目配置] B[硬件抽象层] C[功能模块] D{"开发工具接口"} end A --> B B --> C C --> D D -->|"导入/导出" | E[Keil 运行] D -->|"调试" | F[Keil 调试器]

架构设计中最为关键的是硬件抽象层,它利用了典型的桥接设计模式,将硬件特定的操作封装起来,提供了统一的访问接口。这就使得上层功能模块可以忽略底层硬件细节,大大提升了框架的通用性和可扩展性。而对于 Keil 本身提供的功能,框架则通过插入式接口技术,无缝整合到多用途方案中,丰富开发功能的同时提升了项目的灵活性。

功能亮点与差异

相比同类竞品,“Arduino-For-Keil” 拥有多项独特设计:

  • 高度整合性:不同于市面上一些分隔明确的套件,“Arduino-For-Keil” 能够完美与 Keil 内置的功能工具协调工作,减少了繁重的设置过程。
  • 轻量适度:针对 Keil 项目多文件与配置的复杂度,框架设计较为精炼,几乎只保留了项目开发所必需的功能。
  • 跨平台能力:利用硬件抽象层的桥接模式,使得框架具备较强跨平台能力,能够较快适应多种硬件平台。

应用场景与落地建议

在生产环境中使用 “Arduino-For-Keil” 时,有几个需要注意的点:

  • 硬件资源管理:需仔细评估具体项目所需硬件资源及兼容性,避免某些过时硬件对框架的初步支持问题。
  • 编译开销:轻量化设计虽能解决部分冗余问题,但对于大型项目来说,依然需要合理安排文件和函数的组织方式,确保编译性能。
  • 测试与调试:建议采用多层次的测试与调试机制,尤其重要的是结合 Keil 内置调试器的支持,确保代码逻辑及连接正确无误。

框架适合的业务场景包括:

  1. 嵌入式控制开发:快速原型开发与实际系统整合。
  2. IoT 应用开发:需要高效可靠框架进行快速开发或搭建 IoT 系统。
  3. 多平台项目:涉及不同硬件平台的多项目开发,特别是当项目模块需要频繁迁移时。

综合评价

“Arduino-For-Keil” 框架以简洁轻量、易用高效的设计理念,解决了嵌入式开发中常见的难题。它在保持 Arduino 项目开发的简洁性的同时,充分发挥 Keil IDE 的资源优势,非常适合在项目构建早期进行快速原型开发以及后期维护。然而,对于极大规模项目或有特殊要求的开发任务,开发者需要额外进行适配与优化,这是框架一个潜在的不足之处。

总的来说,“Arduino-For-Keil” 是一个值得一试的轻量级开发框架,尤其适用于注重开发效率和可扩展性的中小型项目。

关于

GitHub 原始描述(英文)

A lightweight Arduino framework for Keil projects.

描述取自 GitHub 官方 API,保持仓库作者书写的原文。

简要分析

热度分
674
价值分
273
活跃状态
活跃

语言占比

Assembly
Batchfile
C
C++
HTML

贡献者

README

Arduino for Keil

Ask DeepWiki

English | 中文

概述

Arduino for Keil 是 Arduino 框架的一个轻量级实现,使 AT32 / STM32 系列单片机能够支持 Arduino 语法,并在 Keil MDK 环境中进行编译与调试。

为什么选择 Arduino for Keil?

  • 共享 Arduino 生态 — 直接复用数以千计的 Arduino 库(Adafruit、Arduboy、SdFat 等),大幅降低开发成本。
  • 优化的硬件操控 — 采用 寄存器 + 宏 优化策略,减少函数调用开销,接近裸机性能。
  • 精简的框架设计 — 相较于 stm32duino 和 HAL,代码体积更小,编译速度更快。
  • 灵活的开发模式 — 在同一项目中自由混合使用 Arduino API、标准外设库函数和寄存器直接操作。

支持平台

厂商 MCU 系列 平台目录
ST STM32F0xx Platform/STM32F0xx
ST STM32F10x Platform/STM32F10x
ST STM32F4xx Platform/STM32F4xx
雅特力 AT32F4xx Platform/AT32F4xx
雅特力 AT32F421 Platform/AT32F421
雅特力 AT32F43x Platform/AT32F43x

系统架构

graph TB APP["<b>Application</b><br/>User Code · Third-Party Libraries<br/><sub>setup() / loop() · Adafruit · Arduboy · SdFat ...</sub>"] API["<b>Arduino API</b><br/>pinMode · digitalWrite · analogRead · Serial · SPI · Wire · Servo · Tone · String"] CORE["<b>Core HAL</b><br/>GPIO · PWM · ADC · DMA · Timer · EXTI · USART · Delay · WDG · RTC"] HW["<b>Hardware</b>"] APP --> API --> CORE --> HW CORE -. "Register + Macro" .-> HW CORE -. "StdPeriph API" .-> HW HW --- STM32["STM32<br/><sub>F0xx · F10x · F4xx</sub>"] HW --- AT32["AT32<br/><sub>F4xx · F421 · F43x</sub>"] classDef app fill:#f0f0f0,stroke:#aaa,color:#333 classDef api fill:#dce9f5,stroke:#7a9cc6,color:#333 classDef core fill:#d5ecd4,stroke:#7ab87a,color:#333 classDef hw fill:#e0d4ee,stroke:#9a82b5,color:#333 class APP app class API api class CORE core class HW,STM32,AT32 hw

快速开始

  1. 安装对应平台的固件包(详见 Packs)。

    ⚠️ 如果已安装更高版本的固件包,请先使用 Keil 自带的包管理工具进行卸载(Remove)。

  2. 打开 Keilduino/Platform,选择对应 MCU 型号的目录。

  3. 打开 MDK-ARM 文件夹内的 Keil 工程文件(.uvprojx)。

  4. 在 main.cpp 中使用 setup() 和 loop() 编写代码:

#include <Arduino.h>

static void setup()
{
    Serial.begin(115200);
    pinMode(PA0, OUTPUT);
}

static void loop()
{
    digitalWrite(PA0, HIGH);
    delay(1000);
    digitalWrite(PA0, LOW);
    delay(1000);
}

混合开发模式

支持 Arduino API、标准外设库函数和寄存器直接操作混合使用:

void setup()
{
    pinMode(PA0, OUTPUT);               // Arduino API
}

void loop()
{
    GPIOA->BSRR = GPIO_Pin_0;          // 寄存器直接操作
    delay(1000);
    GPIO_ResetBits(GPIOA, GPIO_Pin_0);  // 标准外设库函数
    delay(1000);
}

项目结构

Keilduino/
├── Application/          # 用户代码 (main.cpp)
├── ArduinoAPI/           # Arduino 兼容 API 层
│   ├── Arduino.h/c       # 核心 API (pinMode, digitalWrite, analogRead ...)
│   ├── HardwareSerial     → 平台相关实现
│   ├── SPI                → 平台相关实现
│   ├── Wire.h/cpp        # 软件 I2C
│   ├── Print / Stream    # 基础 I/O 类
│   ├── WString           # Arduino String 类
│   ├── Tone              # 蜂鸣器音调生成
│   └── WMath             # 数学工具
├── Libraries/            # 内置库 (Servo 等)
└── Platform/             # MCU 平台相关实现
    ├── STM32F0xx/
    ├── STM32F10x/
    ├── STM32F4xx/
    ├── AT32F4xx/
    ├── AT32F421/
    └── AT32F43x/
        ├── Config/       # mcu_config.h (外设使能/禁用、引脚映射)
        ├── Core/         # HAL 驱动 (GPIO, ADC, PWM, Timer, EXTI, USART ...)
        └── MDK-ARM/      # Keil 工程文件

示例代码

示例代码位于 Example 目录:

示例 说明
Basic.cpp GPIO、PWM、ADC、串口综合示例
PWM.cpp PWM 初始化与占空比控制
Timer.cpp 定时器中断回调
USART.cpp 串口通信与中断
ADC_DMA.cpp 多通道 ADC + DMA 采集
EXTI.cpp 外部中断(按键检测)
GPIO_Fast.cpp 快速 GPIO 宏操作

第三方库移植

请参考 Arduino 库移植指南。

注意事项

  • 请勿删除 main.cpp 中的 main 函数。
  • 添加第三方库时,需提供完整的头文件路径,并将所有 .cpp 源文件添加到 Keil 工程中。
  • 部分库可能需要针对平台差异进行少量修改,请参考编译器错误提示或提交 Issue。

许可证

MIT License — Copyright © 2017 - 2025 _VIFEXTech

评论

暂无评论