【轉】WinAVR(GCC)快速入门

导读:WinAVR 的配置与 makefile 一直是新手入门的两个难点。我们经过详细的测试,推荐大家不需要作任何的配置, 并且介绍了如何用最简单的方法创建自己的 makefile 文件。利用本文,十来分钟你就能入门 WinAVR /GCC.

软件安装好后,你就能在电脑上看到如下的功能菜单:

说明如下:

名称

说明

Programmers Notepad

GCC语言编辑器。可提供应用程序接口。

Mfile

GCC需要一个叫 makefile 的参数文件才能进行编译。Mfile 是一个工具,可以让用户方便地修改 makefile 上的参数。不过我们不推荐使用它。我们推荐直接用记事本打开 makefile 进行编辑。

AVR Insight

仿真调试工具

TkInfo

GNU的超文本浏览器

Uninstall WinAVR

卸载 WinAVR 软件

WinAVR User Manual

WinAVR 用户手册

GNU Maunals Online

GNU的在线帮助

AVR-libc Manual

AVR GCC的C语言函数库帮助手册

从上表可见,WinAVR 的功能看来很多。但我们只推荐使用PN (Programmers Notepad )。

让我们演示如何使用PN进行GCC代码的编辑、编译。

步骤一:打开 PN 工具

步骤二: 编写C源代码

菜单 File --> Open 打开预先放在 C:/avr_test 目录下的C源文件。这个源文件来自我们的新手入门的第一个范例,文件名叫 main.c 。

#include 
#include

//注: 内部函数_delay_ms() 最高延时 262.144mS@1MHz 即 32.768ms@8MHz
// 该函数可以实现较精确的定时for()/while()指令很难计算延时时间
// 为了使 _delay_ms()函数的延时正确,须在makefile中设定F_CPU为实际的系统时钟频
// 本范例为1MHz内部RC振荡器 即 F_CPU=1000000
int main(void)
{
unsigned char i,j,k; //定义变量
PORTA=0xFF;
DDRA=0xFF; //PA口设为输出高电平,灯灭
while(1)
{
i=1;
for (j=0;j<8;j++) //循环8次,即PA0~~PA7轮流闪亮
{
PORTA=~i; //反相输出,低电平有效
for (k=0;k<10;k++) _delay_ms(30); //延时 30*10=300毫秒,可自行调节
i=i<<1; //左移一位
// 0b00000001 PA0
// 0b00000010 PA1
// 0b00000100 PA2
// 0b00001000 PA3
// 0b00010000 PA4
// 0b00100000 PA5
// 0b01000000 PA6
// 0b10000000 PA7
}
}
}

打开main.c 后,看到如下的界面

你可以直接编辑 main.c 。

编辑完成,保存后,我们就可以进行下面的编译工作。

步骤三: 准备 Makefile 文件

编译能生成可供AVR执行的代码、仿真调试文件等。

可能大家会奇怪,上面的main.c 代码,没有告诉电脑AVR芯片的型号、工作频率等,电脑如何知道这些数据?

WinAVR/GCC 使用一个叫 Makefile 的文件,存放这些参数。在WinAVR上也有一个叫mfile的应用程序去处理这个Makefile 文件。但我们测试时发现,mfile 的缺陷很多,不好用,并且容易弄错。我们推荐大家直接用记事本等,直接编译这个文件。为了方便阅读与修改,我们将最常用的内容,放到Makefile的最前面,并且作了中文注解。

在我们的示范Makefile,会看到以下的内容。建议大家只修改:单片机的类型、系统时钟频率、目标文件名及C源文件名这四项。大家可参考我们的示范修改:

#这是一个简单makefile,仅用于初学者使用
#修改于WINAVR20050214所生成的makefile
#简单实验只需更改 [单片机类型][目标文件名][C源文件名][系统时钟频率]即可
#修改好参数后另存到单片机程序所在目录,然后执行[make all]命令
#生成 烧录FLASH的*.hex,烧录EEPROM的*.eep,调试用的*.elf 文件
# MCU name
# 单片机类型 参考格式是:atmega8 / at90s2313 / attiny15
MCU = atmega16

# Processor frequency.
# 系统时钟频率(Hz),用于生成延时 _delay_us() _delay_ms() 见delay.h
# This will define a symbol, F_CPU, in all source code files equal to the
# processor frequency. You can then use this symbol in your source code to
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
# automatically to create a 32-bit value in your source code.
F_CPU = 1000000

# Target file name (without extension).
# 目标文件名(即生成的.hex/.eep/.elf的文件名)
TARGET = main

# List C source files here. (C dependencies are automatically generated.)
# C源文件名(不带路径)
# 多个文件名间用空格隔开 例如 SRC = file1.c file2.c file3.c
# 不需要加上 h头文件
SRC = $(TARGET).c

#**************后面内容基本不需要修改,除非你是老手*****************************#

# Output format. (can be srec, ihex, binary)
# 输出烧录文件格式
FORMAT = ihex

# Optimization level, can be [0, 1, 2, 3, s].
# 优化级别
# ...... 下面的内容此处省略 ....

将我们这个示范的 Makefile 文件,下载后拷贝到 c:/avr_test 目录中。上面我们已经设置了ATmega16芯片,工作在1M的频率里,主文件名叫 main.c ,只有一个文件。

步骤四:编译 (Make All)

按下图操作。

编译成功后,会有如下的 Process Exit Code: 0 的信息。

如果结果不是0,表明编译有问题,请检查你的 c:/avr_test 目录是否有main.c 与 Makefile 两个文件。

编译成功后,原来只有2个文件的目录,现在变成了如下图的文件清单:

重要说明:如果你需要重新编译一次,最好先运行一下 Make Clean ,以保证编译不受干扰。比如你修改了 Makefile 的MCU类型,如果你不使用 Make Clean, 就会得出错误的结果。

步骤五: 完成。

烧录(ISP下载)、运行,与JTAG调试。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值