没有 Arduino 库的 Arduino 编程 - Atmel Studio
Arduino Programming Without Arduino Libraries - Atmel Studio
我想这个问题已经被问过数千次了,我根本找不到关于这个主题的很多资源。
我想使用 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/
但是,图片丢失了,而且看起来很简约。
你可以做你想做的事,但你需要像 Atmel-ICE, AVR Dragon, STK 500 or a AVRISP mkII 这样的程序员。还有一些。 Atmel 有许多程序员,具体取决于您的需要。还有一些便宜得多的第 3 方程序员。我有 STK500 和 Dragon。爱他们两个,他们在 Atmel Studio 中玩得很好 6.X。
这本书是很好的学习资源:
如果你熟悉C,我推荐
- 从 AVR Libc reference
开始
- 检查 iom328p.h 以了解您的处理器特定定义(位于
...\Atmel Toolchain\AVR8 GCC\Native\[#.#.####]\avr8-gnu-toolchain\avr\include\avr
下)
- 可选地,在 Atmel Studio 中创建一个新的 ASF 板项目选择设备 ATmega328p 并检查从 "user_board" 模板(无论如何都是
*.h
的一组几乎为空的通用集,为您 may/may 不需要的东西提供 space)
- 让 complete processor manual 始终靠近您 - 在那里找到的寄存器和位名称与 AVR 库中的定义相匹配
请注意,Atmel Studio 和工具链附带的库支持 m328P,但 ASF 不支持 UNO 板本身。但是,对于基本编程,您会很好。
添加 ... 在 PORTB
PORTB
在处理器的特定 ...io.h
(上面的第一个项目符号)中定义,通过包含 <io.h>
并在 AVR Studio 中选择正确的处理器会自动包含该处理器。在您的处理器库中,您会发现
#define PORTB _SFR_IO8(0x05)
查找处理器指南(上面的第 4 个项目符号)第 615 页,您会看到 PORTB 在 I/O 地址 0x05
(q.e.d.). _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
(以及更多)最终让您可以使用在处理器手册中找到的 register/port/pin 名称在 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
你会找到支持 reading/writing from/to 程序和闪存等的库
我想这个问题已经被问过数千次了,我根本找不到关于这个主题的很多资源。
我想使用 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/
但是,图片丢失了,而且看起来很简约。
你可以做你想做的事,但你需要像 Atmel-ICE, AVR Dragon, STK 500 or a AVRISP mkII 这样的程序员。还有一些。 Atmel 有许多程序员,具体取决于您的需要。还有一些便宜得多的第 3 方程序员。我有 STK500 和 Dragon。爱他们两个,他们在 Atmel Studio 中玩得很好 6.X。
这本书是很好的学习资源:
如果你熟悉C,我推荐
- 从 AVR Libc reference 开始
- 检查 iom328p.h 以了解您的处理器特定定义(位于
...\Atmel Toolchain\AVR8 GCC\Native\[#.#.####]\avr8-gnu-toolchain\avr\include\avr
下) - 可选地,在 Atmel Studio 中创建一个新的 ASF 板项目选择设备 ATmega328p 并检查从 "user_board" 模板(无论如何都是
*.h
的一组几乎为空的通用集,为您 may/may 不需要的东西提供 space) - 让 complete processor manual 始终靠近您 - 在那里找到的寄存器和位名称与 AVR 库中的定义相匹配
请注意,Atmel Studio 和工具链附带的库支持 m328P,但 ASF 不支持 UNO 板本身。但是,对于基本编程,您会很好。
添加 ... 在 PORTB
PORTB
在处理器的特定 ...io.h
(上面的第一个项目符号)中定义,通过包含 <io.h>
并在 AVR Studio 中选择正确的处理器会自动包含该处理器。在您的处理器库中,您会发现
#define PORTB _SFR_IO8(0x05)
查找处理器指南(上面的第 4 个项目符号)第 615 页,您会看到 PORTB 在 I/O 地址 0x05
(q.e.d.). _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
(以及更多)最终让您可以使用在处理器手册中找到的 register/port/pin 名称在 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
你会找到支持 reading/writing from/to 程序和闪存等的库