4

我认为这个问题已经被问了数千次,我根本找不到关于这个主题的很多资源。

我想使用 Atmel Studio 和 C 语言对我的 Arduino Uno (ATmega328P) 进行编程,减去 Arduino 库。我的意思是我想编写如下代码:

int main(void) {
     /* set pin 5 of PORTB for output*/
     DDRB |= _BV(DDB5);

     while (1) {
       /* set pin 5 high to turn led on */
       PORTB |= _BV(PORTB5);
       _delay_ms(BLINK_DELAY_MS);

       /* set pin 5 low to turn led off */
       PORTB &= ~_BV(PORTB5);
       _delay_ms(BLINK_DELAY_MS);
     }
}

而不是充斥着如此方便的Arduino 功能的代码。我想深入了解 Arduinos!

话虽如此,我正在寻找您可以提供的任何出色的学习资源,以便我可以扩展我的知识!

到目前为止,我设法找到 的唯一有用的来源是这个页面: https ://hekilledmywire.wordpress.com/2010/12/04/22/

但是,图像丢失了,无论如何,它看起来很简约。

4

2 回答 2

3

如果您熟悉 C,我建议您

  • AVR Libc 参考开始
  • 检查iom328p.h以了解您的处理器特定定义(位于下...\Atmel Toolchain\AVR8 GCC\Native\[#.#.####]\avr8-gnu-toolchain\avr\include\avr
  • 可选地,在 Atmel Studio 中创建一个新的 ASF 板项目,选择设备ATmega328p并检查从“user_board”模板加载到项目文件夹中的源(无论如何,这是一个通用的几乎空的集合,*.h为您可能/可能不提供的东西提供空间需要)
  • 随时为您提供完整的处理器手册- 在那里找到的寄存器和位名与 AVR 库中的定义相匹配

请注意,Atmel Studio 和工具链附带的库支持 m328P,但 ASF 不支持 UNO 板本身。但是,对于基本编程,您会很好。

在 PORTB 上添加...

PORTB在您的处理器的特定...io.h(上面的第一个项目符号)中定义,通过<io.h>在 AVR Studio 中包含和选择正确的处理器自动包含在内。在您的处理器库中,您可以找到

#define PORTB _SFR_IO8(0x05)

查看处理器指南(上面的第 4 个项目符号)第 615 页,您会看到 PORTB 位于 I/O 地址0x05qed)。_SFR_IO8(..)本身是一个宏定义<avr/sfr_defs.h>为从 I/O 转换为内存地址(是的,较低的寄存器被双重映射为 I/O 和内存,因此内存地址高 0x20,因为最低的内存地址被 R0 到 R31 占用) .

通过包含<io.h>您从 AVR 库中获得

#include <avr/io.h>
// included by io.h
//    #include <avr/sfr_defs.h>
//    #include <avr/portpins.h>
//    #include <avr/common.h>
//    #include <avr/version.h>
//    #include <avr/io(your_processor).h> via processor declaration ... fuses
//        #include <avr/(maybe some more).h>

所有这些...h(以及更多)最终让您可以使用您在处理器手册中找到的寄存器/端口/引脚名称在 C 中进行编程。

还有一些更有用的库,例如

#include <stdint.h>                     // Type definitions, e.g. uint8_t
//    #include "stdint-gcc.h"
#include <avr/power.h>                  // clock prescaler macro
#include <avr/interrupt.h>              // interrupt macros

您会发现支持从/向程序和闪存等读取/写入的库等。

于 2015-06-18T09:42:26.327 回答
1

您可以随心所欲,但您需要像Atmel-ICEAVR DragonSTK 500AVRISP mkII这样的程序员。还有几个。根据您的需要,Atmel 有许多程序员。还有一些便宜得多的第三方程序员。我有 STK500 和 Dragon。爱他们两个,他们与 Atmel Studio 6.X 配合得很好。

这本书是一个很好的学习资源:

制作:艾略特·威廉姆斯的 AVR 编程

于 2015-06-17T14:42:59.880 回答