ATmega16A学习
摘要:本文记录了将 ATmega16A 智能小车项目从官方 ICCAVR 工具迁移到 AVR-GCC 开源工具链的完整过程,可以不使用官方ICCAVR工具编译,而采用VS Code Powershell控制台编写+编译代码。详细梳理了开发环境搭建中遇到的关键问题及解决方案,包括头文件缺失、工具链安装、汇编器冲突、Makefile 调试等。最终成功编译出 156 字节的atmega16a.hex文件,并建立了完整的 Makefile 自动化构建系统。文中提供了可复用的 Makefile 模板、关键命令速查和经验总结,为 AVR-GCC 开发环境搭建提供了实用参考。
目录
- 1. 前言
- 2. 项目目标
- 3. 环境信息
- 4. 问题与解决方案全记录
- 4.1 第一阶段:解决 ICCAVR 头文件缺失
- 4.1.1 问题 1:
ioavr.h和iom16.h找不到
- 4.1.1 问题 1:
- 4.2 第二阶段:安装 AVR-GCC 工具链
- 4.2.1 问题 2:从 Microchip 官网找不到下载入口
- 4.2.2 问题 3:
avr-gcc命令找不到
- 4.3 第三阶段:安装 GNU Make
- 4.3.1 问题 4:
make命令无反应(无输出也无报错)
- 4.3.1 问题 4:
- 4.4 第四阶段:解决汇编器冲突(最关键的问题)
- 4.4.1 问题 5:
as: unknown option -- mmcu=avr5
- 4.4.1 问题 5:
- 4.5 第五阶段:代码适配与 Makefile 调试
- 4.5.1 问题 6:代码中使用 ICCAVR 头文件
- 4.5.2 问题 7:寄存器名称错误
- 4.5.3 问题 8:Makefile 中注释与命令混行导致错误
- 4.5.4 问题 9:
avr-objcopy参数大小写错误 - 4.5.5 问题 10:单片机型号大小写
- 4.1 第一阶段:解决 ICCAVR 头文件缺失
- 5. 最终可用的 Makefile
- 6. 关键命令速查
- 7. 关键经验总结
- 8. 最终成果
- 9. 参考资料
1.前言:为什么学习 ATmega16A 这块板子?
先提出问题,为什么学习 ATmega16A 这块板子?它能解决什么问题?适用于什么方向?应用环境下的所属领域在哪?我要拿 ATmega16A 这块板子做什么项目?实现什么功能?这是我每次在写文章时所思考的问题,这算是我个人特色的碎碎念吧,但是AI帮我优化文章排版时,总提示我删除这些语句,说什么文章风格问题😂,不知道AI参考的什么标准,总之我的写作水平一般,抱歉啊
然后回答上个问题(或者说听个小故事吧),我为什么学习ATmega16A?或者说学习慧净电子HL-1+HL-2小车?原因如下:
这个车是我26年7月8号某鱼上贪便宜买的,当时的目标是找一个小车底盘用来放置我刚到手的激光雷达,用来实现ROS2 + SLAM建图,但是小车底盘好贵啊,动不动100+钢镚,然后莫名奇妙的就找到了这个小车,整车售价30个钢镚(顺丰包邮还送下载器),30钢镚还要啥自行车啊,于是周三下单,周五到货,开箱发现了这款神仙主控芯片,51我还能用标准库写,ATnega16A芯片居然要裸机+寄存器写代码,什么叫板载16KB的flash?1024字节的SRAM?512字节的EEPREOM?,这他喵还是巡线小车主控?官方例程居然是09年的?官方给的编译软件我的电脑居然用不了?卧槽,这编译软件问题怎么这么多啊?槽点太多,我都不知道怎么吐槽了😓,再然后就要想办法解决问题了,不然30钢镚买堆工业垃圾吗?
我解决的问题方案就是将 ATmega16A 智能小车项目从官方 ICCAVR 工具迁移到 AVR-GCC 开源工具链上,然后用VS code编写+编译代码,慧净HJ-ISP烧写软件烧录.hex文件下面是流水灯代码展示效果:
)
总之上面图片就是完成结果,下面就是我在学习时的个人记录所得,如果你需要,希望能对你有所帮助。
还有这是ATmega16A开篇(首坑),是我在CSDN上的第二篇文章,也是我挖的第二个坑吧,这个系列(坑)以后要不要续上?我的回答是:有空就填吧,毕竟这个芯片的资料挺多的,ATmega16A 正式发布 /到量产是在08 年 6 月份(那时候我才几岁啊😱),这个主控芯片到目前为止已经发布了16年了,属于比较老旧的一档了,但是存在即合理,我手里的这个芯片是24年9月生产的,既然没被淘汰,就说明有学习价值,最后狗头保命图先挂上
2.项目目标
目标是将原本基于ICCAVR的 ATmega16A 项目,迁移到AVR-GCC开源工具链,实现代码编译并生成可烧录的.hex文件,为智能小车项目(HL-2 型)建立开发环境。最终成果:成功编译出atmega16a.hex(仅 156 字节)建立了 makefile 自动化构建系统。统。
3.环境信息
| 项目 | 内容 |
|---|---|
| 操作系统 | Windows 11 |
| 目标芯片 | ATmega16A |
| 晶振频率 | 12 MHz |
| 编程器 | USBASP |
| 烧录软件 | PROGISP(智峰软件) |
| 工具链路径 | E:\AVR-GCC\avr8-gnu-toolchain-win32_x86-master\bin |
| 注意 | 上面的工具链路径放哪里看个人意愿,我放E盘里使用没有问题,如果出现异常,就放到C盘里面 |
4.下面是遇到的问题与解决方案全记录
如你下图所见,我的电脑无法使用官方软件,首先我对这个软件根本不熟悉,纯新手,第一次用,它的报警问题我解决不了,多次碰壁之后得出的解决方法就是,用不了就不用了,果断卸载,直接换工具
第一阶段:解决官方 ICCAVR 头文件缺失的问题
问题 1:ICCAVR官方软件ioavr.h和iom16.h找不到报错信息:
!E .\main.c(1): cannot include source file “ioavr.h”; file not found
nd
原因分析:
1.AI说当前安装的 ICCAVR 是精简版(仅支持 XMEGA 系列),缺少 ATmega 系列的头文件。
2.我安装的
icc7avrV7.22Setup.msi可能只包含了部分组件。
解决方案:
彻底放弃修复 ICCAVR,决定迁移到 AVR-GCC 开源工具链,原因是这个上古软件实在是没有用过啊,虽然慧净官方视频是有演示,但是我没有兴趣去学习一款十几年前的开发软件,于是就放弃了。
AVR-GCC 使用标准头文件
#include <avr/io.h>,兼容性更好,社区支持更广泛。
第二阶段:安装 AVR-GCC 工具链
问题 2:从 Microchip 官网找不到下载入口
现象:
- 官网搜索 “AVR 8-Bit Toolchain” 返回太多结果,难以定位。
解决方案:
下面是我的保存的官方镜像包,官网的下载太慢了
通过网盘分享的文件:AVR 8-bit Toolchain 3.6.2(GCC 5.4.0)
链接: https://pan.baidu.com/s/1QeFV92Nmb4EeH6E-nd5ILw?pwd=8888 提取码: 8888
下载 ZIP 包,解压到
E:\AVR-GCC\avr8-gnu-toolchain-win32_x86-master\
问题 3:avr-gcc命令找不到
原因:工具链bin目录未添加到系统Path环境变量。
解决方案:
右键“此电脑” → “属性” → “高级系统设置” → “环境变量”
在“系统变量”中找到
Path,编辑并添加 E:\AVR-GCC\avr8-gnu-toolchain-win32_x86-master\binin
重启 PowerShell 生效。
第三阶段:安装 GNU Make
问题 4:make命令无反应(无输出也无报错)
**现象*PS C:\Users\gx> make --version
PS C:\Users\gx> # 完全无输出
输出输出
原因分析:
从 GnuWin32 下载的
make-3.81-bin.zip只包含make.exe,缺少运行所需的 DLL 依赖:libintl3.dlllibiconv2.dll
解决方案:
改用Setup 安装包(
make-3.81.exe),选择“Full Installation”(完整安装)。安装路径:
C:\Program Files (x86)\GnuWin32将
C:\Program Files (x86)\GnuWin32\bin添加到系统Path。
第四阶段:解决汇编器冲突(最关键的问题)
问题 5:as: unknown option -- mmcu=avr5
**报错信息*as: unknown option – mmcu=avr5r5r5
原因分析:
avr-gcc在编译时调用的是系统中的非 AVR 版本汇编器(通常是 MinGW 或 MSYS 自带的as.exe),它不认识 AVR 专用参数--mmcu=avr5。系统
Path中其他工具链的路径排在 AVR-GCC 之前。
尝试过的方案(部分有效):
复制
avr-as.exe为as.exe
Copy-Item avr-as.exe as.exexe→ 解决了命令行直接编译的问题,但
make仍然报错。
最终解决方案:
在Makefile 中强制指定工具链的绝对路径,并通过-B参数告诉avr-gcc到哪里查找辅助工具:
工具链绝对路径
AVR_BIN=E:/AVR-GCC/avr8-gnu-toolchain-win32_x86-master/bin CC=$(AVR_BIN)/avr-gcc OBJCOPY=$(AVR_BIN)/avr-objcopy SIZE=$(AVR_BIN)/avr-size在这里插入代码片编译选项中加入 -B 强制指定搜索路径
CFLAGS=-mmcu=$(MCU)-DF_CPU=$(F_CPU)-Os-Wall-B"$(AVR_BIN)"LDFLAGS=-mmcu=$(MCU)-B"$(AVR_BIN)")"原理:
-B参数告诉avr-gcc:在指定目录下搜索as、ld等子工具,而不是在系统 PATH 里乱找。绝对路径确保
make始终使用正确的工具链。
第五阶段:代码适配与 Makefile 调试
问题 6:代码中使用 ICCAVR 头文件原代码:
#include<ioavr.h>修改为 AVR-GCC 标准:
#include<avr/io.h>#include<util/delay.h>最终可用的 Makefile
TARGET=atmega16a MCU=atmega16 F_CPU=12000000ULSRC=main.c AVR_BIN=E:/AVR-GCC/avr8-gnu-toolchain-win32_x86-master/bin CC=$(AVR_BIN)/avr-gcc OBJCOPY=$(AVR_BIN)/avr-objcopy SIZE=$(AVR_BIN)/avr-size CFLAGS=-mmcu=$(MCU)-DF_CPU=$(F_CPU)-Os-Wall-B"$(AVR_BIN)"LDFLAGS=-mmcu=$(MCU)-B"$(AVR_BIN)"all:$(TARGET).hex $(TARGET).elf:$(SRC)$(CC)$(CFLAGS)$(LDFLAGS)-o $@ $^@echo"编译完成:$@"$(TARGET).hex:$(TARGET).elf $(OBJCOPY)-O ihex $<$@ @echo"生成烧录文件:$@"$(SIZE)$(TARGET).elf clean:del $(TARGET).elf $(TARGET).hex @echo"已清理 .elf 和 .hex 文件"flash:all avrdude-c usbasp-p $(MCU)-U flash:w:$(TARGET).hex.PHONY:all clean flash关键命令速查
| 用途 | 命令 |
|---|---|
| 编译项目 | make或make all |
| 清理临时文件 | make clean |
| 编译并烧录 | make flash |
| 清屏 | cls |
| 查看生成文件 | ls *.hex |
| 烧录(ProgISP 方式) | 手动加载.hex,点击“自动” |
关键经验总结
遇到“头文件找不到”→ 检查编译器是否完整安装,考虑迁移到 AVR-GCC。
遇到
as: unknown option→ 说明汇编器路径冲突,用-B参数强制指定工具链路径。Makefile 中命令缩进必须用 Tab 键,不能用空格。
make clean必须通过make调用,不能直接输入clean。环境变量修改后要重启终端才能生效。
中文注释在 PowerShell 中显示乱码是正常的,不影响功能,可以用英文注释替代。
最终成果
这是Windows powershell的展示效果,电脑自带powershell完成功能实现的时候,VS code自然也能实现下面的功能了,截图展示如下:
PSE:\001\ATmega16A> make E:/AVR-GCC/.../avr-gcc-mmcu=atmega16-DF_CPU=12000000UL-Os-Wall-B...-o atmega16a.elf main.c E:/AVR-GCC/.../avr-objcopy-O ihex atmega16a.elf atmega16a.hex E:/AVR-GCC/.../avr-size atmega16a.elf textdatabss dec hex filename 156 0 0 156 9c atmega16a.elf到这一步时,如果不出意外,恭喜你的开发环境已经配置完毕了。当然,如果出了意外,这代表着新的风暴已经出现,就看老兄您粉墨登场,如何力挽狂澜了,毕竟我们对于ATmega16芯片来说都是纯新手,10年到20年的老资历嵌入式工程师才最有发言权。
还有看到这里的话,如果发现有不足之处麻烦您留言指正提醒了,ATmega16A这个系列后续我看情况考虑要不要继续填坑了,毕竟ATmega16芯片的熔丝位这种上古设置真的让我开了眼,当真是学海无涯苦作舟啊。
唉,我CSDN开篇的BBG第一坑还没填呢,又开了一个新坑
最后,再次特色狗头贴图保命了
编辑于2026年7月12日22:24:35
参考资料
这个参考资料麻烦您去AI检索下吧,初稿被毙了,我发现牵扯太多外网链接CSDN审核好像过不了,还有相关资料已经放上面网盘里了,只有官方镜像包,没有小车资料,小车资料也挺好找的。