杰瑞科技汇

avr studio 教程

AVR Studio (Atmel Studio) 完整入门教程

第一部分:概述与环境准备

什么是 AVR Studio / Atmel Studio?

  • AVR Studio: 这是早期的版本,专门用于 AVR 单片机的开发,现在基本已被 Atmel Studio 取代。
  • Atmel Studio: 这是 Microchip 收购 Atmel 后推出的官方集成开发环境,它不仅支持所有 AVR 系列单片机(如 ATmega, ATtiny),还支持 SAM 系列ARM Cortex-M处理器。我们今天主要学习的就是 Atmel Studio

Atmel Studio 是一个“一站式”开发平台,集成了以下功能:

avr studio 教程-图1
(图片来源网络,侵删)
  • 代码编辑器: 带有语法高亮、自动补全等功能。
  • C/C++ 编译器: 内置了业界标准的 GCC 编译器,用于将你的 C/C++ 代码转换成 AVR/ARM 能理解的机器码。
  • AVR/ASM 汇编器: 用于编写汇编代码。
  • 调试器: 这是它的核心功能之一,可以让你单步执行代码、查看变量值、设置断点,极大地简化了开发过程。
  • 内置编程器/仿真器: 支持 JTAG、ISP、PDI、UPDI 等多种调试和烧录协议,可以直接连接你的开发板(如 Atmel ICE, JTAGICE3, 或 USBasp)。

为什么选择 Atmel Studio?

  • 官方支持: 由芯片原厂提供,稳定可靠,对芯片的支持最全面。
  • 强大的调试功能: 内置仿真器和硬件调试器,调试体验远胜于很多第三方工具。
  • 免费: 对个人用户和许多商业应用完全免费。
  • 生态系统完整: 与 Atmel 硬件(开发板、调试器)无缝集成。

环境准备

硬件:

  1. 一块 AVR 开发板: 推荐 Arduino UNO (基于 ATmega328P) 或 ATmega328P最小系统板,它们成本低,资料多,非常适合入门。
  2. 一根 USB 线: 用于给开发板供电和通信。
  3. 一个调试器 (可选但强烈推荐):
    • Atmel ICE: 功能最全,支持所有 AVR 和 SAM,价格较贵。
    • JTAGICE3: 经典调试器,支持大部分 AVR。
    • USBasp: 只能用于烧录,不能进行实时调试,是最低成本的烧录工具。
    • 对于初学者,可以先使用 Arduino UNO 自带的 USB-to-Serial 芯片进行烧录,后续再购买调试器。

软件:

  1. 下载 Atmel Studio:
  2. 安装驱动: 如果你使用的是独立的调试器(如 Atmel ICE),请根据其说明书安装相应的 USB 驱动,使用 Arduino UNO 则无需额外驱动。

第二部分:创建第一个项目 - "Blink LED"

我们将通过点亮开发板上一个 LED 的经典入门项目,熟悉 Atmel Studio 的基本操作。

步骤 1: 创建新项目

  1. 打开 Atmel Studio。
  2. 点击 Start -> New Project...
  3. 在弹出的窗口中,选择 AVR C++ Project (因为我们用 C 语言编程)。
  4. 为项目命名,Blink_LED,并选择一个存放位置。
  5. 点击 OK

步骤 2: 选择器件

  1. 接下来会弹出 Device Selection 窗口。
  2. 在左侧的搜索框中输入 ATmega328P,然后从列表中选择它。
  3. 点击 OK

Atmel Studio 会为你生成一个基本的项目结构,包含一个 main.cpp 文件和一些默认代码。

avr studio 教程-图2
(图片来源网络,侵删)

步骤 3: 编写代码

删除 main.cpp 中的所有默认代码,然后粘贴以下代码:

#include <avr/io.h>   // 包含 AVR 寄存器定义的头文件
#include <util/delay.h> // 包含延时函数的头文件
int main(void)
{
    // 将 LED 所在的引脚设置为输出模式
    // 假设 LED 连接在 PB5 引脚 (Arduino UNO 上的 13 号引脚)
    // DDRB 是 Data Direction Register B
    // 1 代表输出, 0 代表输入
    DDRB |= (1 << DDB5);
    while (1) // 无限循环
    {
        // 点亮 LED: 将 PB5 引脚输出高电平
        PORTB |= (1 << PORTB5);
        _delay_ms(500); // 延时 500 毫秒
        // 熄灭 LED: 将 PB5 引脚输出低电平
        PORTB &= ~(1 << PORTB5);
        _delay_ms(500); // 延时 500 毫秒
    }
}

代码解释:

  • #include <avr/io.h>: 包含了所有 AVR 单片机寄存器的定义,DDRB, PORTB 等。
  • DDRB |= (1 << DDB5);: DDRB 是 B 端口的数据方向寄存器。DDB5 是 B 端口的第 5 位,这行代码将 B 端口的第 5 位设置为 1,表示 PB5 引脚为输出模式。
  • PORTB |= (1 << PORTB5);: PORTB 是 B 端口的输出数据寄存器,这行代码将 PB5 引脚的电平设置为高电平 (1),点亮 LED。
  • PORTB &= ~(1 << PORTB5);: 这行代码将 PB5 引脚的电平设置为低电平 (0),熄灭 LED。
  • _delay_ms(500);: 这是一个延时函数,单位是毫秒,它需要包含 <util/delay.h> 头文件。

步骤 4: 构建项目

点击工具栏上的 Build 按钮(一个锤子图标)或者按 F7 键。

如果一切正常,底部的 Output 窗口会显示 Build: 1 succeeded, 0 failed,这表示代码已经成功编译成了 .elf, .hex 等格式的文件。.hex 文件就是我们最终要烧录到单片机里的程序。

avr studio 教程-图3
(图片来源网络,侵删)

步骤 5: 烧录程序

烧录程序需要使用硬件工具(编程器/调试器),这里以最常用的 USBasp 为例。

  1. 连接硬件:

    • 将 USBasp 的 6-Pin 排线连接到 Arduino UNO 的 ICSP 接口,注意对齐 MISO, MOSI, SCK, RESET 等引脚。
    • 将 USBasp 插入电脑的 USB 口。
  2. 在 Atmel Studio 中配置工具:

    • 点击菜单栏的 Tools -> Device Programming...
    • 在弹出的窗口中:
      • Tool: 选择 USBASP
      • Device: 确保选择的是 ATmega328P
      • Interface: 选择 ISP (In-System Programmer)。
      • 点击 Apply
  3. 烧录:

    • 在左侧的 memories 选项卡中,点击 Flash
    • 点击 按钮,选择你刚刚编译生成的 .hex 文件(通常在项目目录的 DebugRelease 文件夹里)。
    • 点击 Program 按钮,等待编程完成。

烧录成功后,你的 Arduino UNO 板上的 L LED(连接在 PB5 引脚)就会开始闪烁了!


第三部分:使用调试器进行代码调试

调试是编程中最重要的环节,Atmel Studio 的调试功能非常强大。

步骤 1: 配置调试器

  1. 确保你的硬件调试器(如 Atmel ICE)已经连接到开发板的 DEBUG 接口。
  2. 点击菜单栏的 Debug -> Start Debugging and Break,或者直接按 F5

Atmel Studio 会尝试连接到芯片,如果成功,程序会停在 main 函数的第一行,并且编辑器会进入调试模式。

步骤 2: 认识调试界面

调试时,会出现几个新的窗口:

  • Debug (调试) 工具栏: 包含了常用的调试按钮,如继续、单步进入、单步跳过、跳出等。
  • Disassembly (反汇编): 显示当前代码对应的汇编指令。
  • Memory: 显示内存内容。
  • Watches: 可以在这里添加变量或寄存器,实时查看它们的值。

步骤 3: 常用调试操作

  1. 设置断点:

    • 在代码编辑器的行号左侧单击,会出现一个红点,这就是断点。
    • 当程序运行到断点处时,会自动暂停。
  2. 运行到光标处:

    • 将光标定位到你希望程序暂停的代码行。
    • 右键点击,选择 Run to Cursor (快捷键 Ctrl+F10),程序会直接执行到这一行。
  3. 单步执行:

    • Step Over (F10): 单步跳过,如果当前行是函数调用,它会执行整个函数,然后停在下一行。
    • Step Into (F11): 单步进入,如果当前行是函数调用,它会进入函数内部,停在函数的第一行。
    • Step Out (Shift+F11): 单步跳出,当你在函数内部时,它会执行完剩余的函数代码,并返回到调用该函数的下一行。
  4. 查看和修改变量/寄存器:

    • 查看寄存器: 在 Watches 窗口中,输入 PORTBDDRB,你就可以实时看到它们的值。
    • 查看变量: 同样在 Watches 中输入你的变量名。
    • 修改变量/寄存器: 在 Watches 窗口中,右键点击一个变量或寄存器,选择 Edit Value,可以临时修改它的值,用于测试。
  5. 查看内存:

    • 打开 Memory 窗口,输入地址,0x21 (这是 PORTB 寄存器的地址),你可以直接查看内存该地址的内容。

第四部分:进阶技巧与资源

使用 Makefile 进行更灵活的项目管理

对于大型项目,手动创建和管理项目文件会很麻烦,Atmel Studio 可以与 Makefile 配合使用,让你能像在 Linux/Unix 环境下一样,通过命令行构建项目,实现跨平台和版本控制。

  • 方法: 在创建项目时,选择 AVR GCC C Executable Project,然后选择 "Use Makefile-based build system"。

学习 AVR 数据手册

数据手册是 AVR 开发的“圣经”,当你对某个寄存器或外设(如定时器、ADC)不了解时,查阅数据手册是唯一的正确途径。

  • 在哪里找: Microchip 官网,搜索你的芯片型号,如 "ATmega328P Datasheet"。

推荐资源

  • 官方文档: Atmel Studio 自带的帮助文档 (F1) 非常详细。
  • 社区论坛: Microchip 官方论坛、AVR Freaks (现在已整合到 Microchip 论坛)。
  • 视频教程: 在 YouTube 上搜索 "Atmel Studio tutorial",有大量优秀的视频教程。
  • 开源项目: 在 GitHub 上搜索 AVR 相关项目,学习他人的代码。

这份教程带你走完了 Atmel Studio 的基本流程:从安装、创建项目、编写代码、编译、烧录,到最核心的调试功能,掌握了这些,你就已经具备了使用 Atmel Studio 进行 AVR 开发的坚实基础。

学习路径建议:

  1. 熟练 Blink: 反复练习,直到能不看教程独立完成。
  2. 尝试更多外设: 学习使用按键、蜂鸣器、数码管等。
  3. 深入定时器: 学习如何使用 AVR 的定时器来产生精确的延时或 PWM 波形。
  4. 学习串口通信: 实现 PC 与单片机的数据交互。
  5. 挑战 ADC: 学习如何读取模拟传感器的数据。

祝你在 AVR 的世界里玩得开心!

分享:
扫描分享到社交APP
上一篇
下一篇