1. 课程导入与开发环境搭建

Microchip SAM 系列是基于 Arm Cortex-M 内核的 32 位 MCU 产品线,覆盖从低功耗小容量到高性能带外部总线的多种型号。学习 SAM 外设驱动与板级适配,第一步不是急着写代码,而是把“选型—工具链—框架—硬件连接—最小工程”这条链路走通。本章围绕这条链路展开,目标是让你能独立完成一个可编译、可下载、可观察的 GPIO 点灯工程。

1.1 SAM 系列选型:先看内核与封装,再看外设与生态

SAM 家族常见分支包括 SAM D(Cortex-M0+/M23,主打低功耗与 USB)、SAM G(Cortex-M4F,带浮点与低功耗)、SAM E(Cortex-M4F,带以太网、CAN、LCD 等丰富外设)、SAM S(Cortex-M7,高性能)、SAM V(Cortex-A5,跑 Linux 级应用)以及 SAM L(Cortex-M23,超低功耗)。选型时建议按以下顺序判断:

  • 内核与主频:是否需要 FPU/DSP、是否需要 100 MHz 以上主频;
  • 存储与封装:Flash/RAM 是否够协议栈与缓冲,引脚数是否匹配 PCB 空间;
  • 外设组合:Sercom(可配置为 UART/SPI/I2C)、ADC/DAC、USB、CAN、以太网、TCC 等;
  • 生态与工具:是否被 Harmony v3 支持、是否有官方 Xplained Pro 板与例程。

例如做一个带 USB 与低功耗采集的节点,SAM D21(Cortex-M0+,48 MHz,256 KB Flash,32 KB RAM)通常足够;若需要以太网与 CAN,则 SAM E70(Cortex-M7,300 MHz)更合适。选型不是越强越好,而是“外设够用、封装可布、工具链支持”三者平衡。

1.2 Atmel Studio 与 MPLAB X IDE 对比

Atmel Studio 是早期 SAM/AVR 的官方 IDE,基于 Visual Studio 外壳,Windows 独占,对旧版 ASF 支持好,但已停止更新。MPLAB X IDE 是 Microchip 当前主推的跨平台 IDE(Windows/Linux/macOS),基于 NetBeans,配合 MCC(MPLAB Code Configurator)与 Harmony v3 使用,支持 XC32、XC16、XC8 编译器。对于新项目,应优先选择 MPLAB X IDE + Harmony v3;Atmel Studio 仅用于维护旧工程。

对比项Atmel StudioMPLAB X IDE
平台仅 WindowsWindows / Linux / macOS
框架ASF(旧)Harmony v3 + MCC
维护状态停止更新持续更新
推荐场景旧工程维护新项目开发

1.3 Harmony v3 框架简介

Harmony v3 是 Microchip 为 SAM 与 PIC32 提供的固件框架,采用分层结构:底层是 PLIB(外设库,直接操作寄存器),中间是驱动层(DRV),上层是系统服务(System Service)与中间件(USB、TCP/IP、文件系统等)。它通过 MCC 图形化配置生成初始化代码,把时钟、引脚、外设参数固化为配置结构,减少手写寄存器的工作量。理解 Harmony v3 的关键是分清“配置生成”与“应用逻辑”的边界:配置由 MCC 完成,应用逻辑写在生成的 app.c 或用户文件中。

Harmony v3 分层结构与 GPIO 点灯数据流 应用层 Application app.c / main.c:调用 GPIO 驱动接口,实现点灯逻辑 中间件与系统服务 Middleware / System Service USB / TCP-IP / File System / 时钟与引脚管理 驱动层 Drivers (DRV) GPIO / SERCOM / TCC / ADC 等外设驱动 外设库 PLIB + 硬件寄存器 PORT / GPIO 寄存器,直接控制引脚电平 MCC 图形化配置 生成时钟/引脚/外设初始化代码

1.4 开发板与调试器连接

以 SAM D21 Xplained Pro 为例,板载 EDBG 调试器通过 USB 与 PC 连接,同时提供虚拟串口与调试接口。若使用独立调试器(如 Atmel-ICE 或 PICkit 4),需连接 SWD 四线:SWCLK、SWDIO、GND、VTref。连接时注意:

  • 目标板供电与调试器 VTref 电平一致(通常 3.3 V);
  • SWD 线尽量短,避免与高频信号并行;
  • 首次连接在 MPLAB X 中确认设备 ID 能被识别,再下载程序。

1.5 第一个 GPIO 点灯工程

在 MPLAB X 中新建 Harmony v3 工程,选择目标器件(如 ATSAMD21G18A),用 MCC 配置:系统时钟 48 MHz,将 PA17 配置为 GPIO 输出(对应板载 LED)。生成代码后,在应用层调用驱动接口翻转引脚。示例逻辑如下:

// 初始化后,在主循环中翻转 LED
while (1) {
    GPIO_PinToggle(GPIO_PIN_PA17);
    for (volatile uint32_t i = 0; i < 480000; i++); // 约 10 ms 延时
}

编译下载后,观察板载 LED 是否以约 50 Hz 闪烁(10 ms 翻转一次,周期 20 ms)。若 LED 不亮,依次检查:引脚配置是否为输出、时钟是否使能、下载是否成功、LED 极性是否接反。这个最小工程验证了工具链、调试器、时钟与 GPIO 驱动整条链路,是后续所有外设实验的基础。