返回首页
当前位置: 主页>开发编程语言>

GCC编程Arduino

时间:2018-01-10 02:46来源:USB开发群 作者:USB开发频道 点击:

  

3   注意

4   使用ICSP烧写Bootloader

织梦内容管理系统

5   译者补充

copyright dedecms

本文来自织梦

Arduino是IDE和硬件平台,IDE以Java编写,并使用Processing语言。 copyright dedecms

这对新手是个好主意,因为简化了开发,但是也比C要弱: 本文来自织梦

C有准确的执行时间,没有隐藏代码,写什么就执行什么 copyright dedecms

C更容易访问硬件和中断 copyright dedecms

便于在多种MCU之间移植

copyright dedecms

本文编译和上传一个简单的纯C程序(使用avr-libc),而不用Arduino IDE。只需要终端、文本编辑器、AVR-GCC工具链。

本文来自织梦

1   闪耀LED例子

从让Arduino引脚13的LED闪耀开始(实际是闪耀PORTB的所有位)。创建个文件夹来存放项目,并创建文件 blink.c

织梦内容管理系统

#include <avr/io.h> #include <util/delay.h> int main(void) { unsigned char counter; DDRB=0xff; //设置PORTB输出 while(1) { PORTB=0xff; //设置PORTB为高 counter=0; while(counter!=50) { _delay_loop_2(30000); counter++; } PORTB=0x00; counter=0; while(counter!=50) { _delay_loop_2(30000); counter++; } } return 1; }
织梦好,好织梦

2   编译和上传

将Arduino连接到USB口之后,Linux-2.6会自动载入FTDI驱动 ftdi_sio.ko

织梦内容管理系统

$ dmesg ... usb 3-2: FTDI USB Serial Device converter now attached to ttyUSB0 usbcore: registered new interface driver ftdi_sio drivers/usb/serial/ftdi_sio.c: v1.4.3:USB FTDI Serial Converters Driver

工具链(编译器/连接器/汇编器、标准C库和编程工具)包含在三个包中:

本文来自织梦

$ apt-get install gcc-avr avr-libc avrdude

C库的手册在 /usr/share/doc/avr-libc/avr-libc-user-manual/index.html 。

本文来自织梦

建议仔细看看 file:///usr/share/doc/avr-libc/avr-libc-user-manual/group__demo__project.html 。其末尾有个Makefile,可供定制到自己所需。改变程序名到 blink 并编译: 织梦内容管理系统

$ make

这会生成 blink.hex ,也就是要上传的镜像。有两种凡是可供上传到Arduino:

织梦内容管理系统

ICSP(In-Circuit Serial Programming)

本文来自织梦

使用Bootloader,消耗2KB的程序存储器

内容来自dedecms

第二个选项并不严格要求。实际上,第一个选项也并没有绝对优势。除非你只需要一个USB线,而不是两个。

织梦内容管理系统

2.1   通过Bootloader上传

此时AVR程序存储器已经包含了Bootloader,烧写 blink.hex 。确保熔丝的BOOTRST=0,如果不是,Bootloader在复位后不会启动。 dedecms.com

$ avrdude -p m168 -P /dev/ttyUSB0 -c stk500v1 -b 19200 -F -u -U flash:w:blink.hex 内容来自dedecms

2.2   不通过Bootloader,而是用并口编程器

如果不用Bootloader,直接烧写blink.hex,通过并口编程器。要确保熔丝的BOOTRST=1,如果不是,程序在复位后不会执行(后面章节会解释如何设置熔丝):

dedecms.com

$ avrdude -p m168 -P /dev/parport0 -c dapa -b 115000 -F -u -U flash:w:blink.hex

如果你使用ATmega8则用 -p m8 。

copyright dedecms

copyright dedecms

2.3   不通过Bootloader,而是用AVR ISP MK-II编程器

要使用这种方法,你需要一个mkII编程器(约30欧元),并连接到Arduino,通过ICSP连接器。在AVR Studio IDE,通过 [Tool]=>[Program AVR]=>[Connect ...] 来选择AVR ISP mkII编程器,USB连接,并选择Flash镜像,最后点击 [Program] 按钮。 dedecms.com

内容来自dedecms

织梦好,好织梦

3   注意

使用的引脚号与Arduino的定义不同 织梦好,好织梦

本文来自织梦

要使用AVR-GCC的术语访问端口和其他硬件,参考datasheet的SFR(特殊功能寄存器),一些ATmega8的不同于ATmega168/328p copyright dedecms

dedecms.com

如果你使用其他零件(ATmega8、ATmega168、ATmega328等),注意修改Makefile的MCU变量

内容来自dedecms

织梦内容管理系统

最近Arduino转到ATmega328了,兼容ATmega168,但有更多程序空间,而avr-libc@2009-01-01并不支持ATmeag328,编程工具的串口也不工作:

织梦内容管理系统

#define BAUD 19200 #include <util/setbaud.h> UBRR0H = UBRRH_VALUE; UBRR0L = UBRRL_VALUE; #if USE_2X UCSR0A |= (1<<U2X0); #else UCSR0A &= ~(1<<U2X0); #endif
copyright dedecms

你应该替换为: 织梦内容管理系统

#define BAUD_RATE 19200 UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); UBRR0H = (F_CPU/(BAUD_RATE*16L)-1)>>8; UCSR0B = (1<<RXEN0) | (1<<TXEN0); UCSR0C = (1<<UCSZ00) | (1<<UCSZ01);

启用内部上拉电阻,在D0(RX),来降低线路噪声: copyright dedecms

DDRD &= ~_BV(PIND0); PORTD |= _BV(PIND0);

内容来自dedecms

4   使用ICSP烧写Bootloader

本节针对你的设备是空的,没有Bootloader。已经有Arduino Bootloader的可以直接跳过不看。一个简单的检查是否有Bootloader的方法是复位后PIN13的等会闪3次。 dedecms.com

4.1   什么是Bootloader

Bootloader是一种在特定存储区域的程序(bootloader区),其基本任务是接收新的固件,并存储到AVR的Flash存储器(程序存储器)。每个Bootloader都是针对特定设备的,使用特殊的协议。所有这些配置参数必须与主机编程器匹配(avrdude)。avrdude可以用多种类型的协议,支持多种连接(串口、并口、USB、...)。

织梦好,好织梦

一个例子是ATmega168在16MHz,stk500v1协议,19200-8N1串口的Bootloader: 。

本文来自织梦

按照如下步骤来烧写到AVR设备。更换其他操作系统,如Windows就是将 /dev/parport0 替换为LPT1,并安装giveio.sys即可。

织梦好,好织梦

(解释如何编译Bootloader,而不是提供预编译的) copyright dedecms

copyright dedecms

连接到并口编程器dapa和ICSP,然后供电:

copyright dedecms

$ # write the following fuse bits: efuse=0x00, hfuse=0xdd, lfuse=0xff $ # write the following fuse bits: lock=0x3f (unlock boot section) $ avrdude -c dapa -p m168 -P /dev/parport0 115000 -U flash:w:ATmegaBOOT_168_ng.hex $ # write the following fuse bits: lock=0x0f (lock boot section) 织梦内容管理系统

在烧写镜像之前,先把熔丝设置成:使用外部晶振、禁用时钟分频、最大化Bootloader段等。然后烧写ATmegaBOOT_168_ng.hex到AVR。对于熔丝位,参考手册。 copyright dedecms

要访问并口,必须在 lp 组,修改 /etc/group 并退出会话来让改变生效。

织梦好,好织梦

织梦内容管理系统






秦华 『上海买保险』上海地区人寿保险资深寿险顾问 上海外籍人士买保险-高端人士医疗办理
服务项目:儿童医疗/子女教育金/养老保险/重大疾病/意外伤害/员工团险/公众责任
免费热线『上海』:13761630213, QQ:107242375, Email:victor.qin@qq.com
选择保险事业 为了爱,为了一份坚定的承诺!MSN:
上海地区请直接拨打本人电话,应约免费上门提供免费保险方案。
Baoxian.ws>>           旅行签证保险、上门办理>>        重大疾病网>>     上海重大疾病一览    
友情链接: 走在上海人寿保险的前端    和讯保险博客    上海投保在线    Shanghai Insurance    秦华的个人简历


顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
图文并茂 我的链接
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
上海高端医疗/住院医疗保险信息
上海保险规划师信息
上海子女教育理财保险信息
上海保险规划师信息
上海女性高端生育保险方案-等待期
上海保险规划师信息
上海三口之家家庭保障方案
上海保险规划师信息
上海女性特色重大疾病保险方案
上海保险规划师信息
上海女性白领理财保险方案
上海保险规划师信息
上海养老理财规划保险方案
上海保险规划师信息
通过网络取得初步咨询
  •    
上海办理-免费咨询送计划书
上海买保险
上海办理-申根签证 出国旅行保险
上海买保险
上海买保险,海外基金,买保险,友邦保险,中国人民健康保险,养老保险,儿童保险,儿童医疗,子女教育金,太平洋保险,医疗保险,工伤保险条例,中国人寿保险,保险公司,中国平安保险,医疗险,进口药,自费药,外籍人士医疗,泰康人寿,英国保诚集团,上海综合保险,国际医疗保险,上海医疗保险,上海社会保险,上海养老保险,上海市综合保险,上海平安保险,上海太平洋保险,和睦家医院,上海综合保险卡,买保险,高端医疗,重大疾病,意外伤害,定期寿险,家庭理财,友邦保险,金茂大厦,少儿互助基金,上海社保,太平洋集团,港安医院