有些人说
Linux下怎么开发单片机程序? 我们学得都是在
Windows下的开发工具和烧录工具。其实这只是中国的情况,中国大都是用
Windows系统的。所以我们也只接触到
Windows下的开发工具。在国外,许多大牛是不用
Windows的。那么,他们如果要做单片机怎么办?肯定没问题的,
Linux也有许多的单片机和嵌入式的开发工具。下面,我以
51系列单片机为例,介绍一下怎么使用
Linux系统玩单片机。
首先,说一下我的硬件和软件情况。
硬件:
一台笔记本、 一个
51单片机开发板(这个在网上有很多卖,也就
150左右的价格)。单片机芯片有两块 :一块是
Atmel的
AT89S52,
另一块是
STC的
STC89C52RC 。
USB转串口线一根(串口通信和
STC下载用)。
USBISP下载线一根(
AT89S52下载用)。
软件:
操作系统:
Ubuntu 11.04 (内核
2.6.38-10-generic)、
sdcc(单片机
C语言编译器
)、
avrdude(
AT单片机下载程序)、
gSTCISP(STC单片机下载程序
) 、
objcopy(
GUN 开发工具里的
,应该默认
Linux都会安装)
操作系统的安装就不讲了。
SDCC可以在网上下到源代码然后编译安装。
/*SDCC也有
Windows版本,不过我这只讲
Linux下的东西,如果有兴趣请自己百度
Google一下
*/
不过这样很麻烦,而且不一定安装的上。我们的
ubuntu 有超级牛力(不知道这个?在终端下输入
apt-get就知道啦。)直接在终端下输入以下命令:
sudo apt-get install sdcc sdcc-doc
先讲
AT89S52的下载
首先是安装
AT89S52的下载软件,还是用
ubuntu的超级牛力:
sudo apt-get install gcc-avr binutils-avr avrdude avr-libc
然后编辑
avrdude.conf 以使得
avrdude可以下载
51的单片机
sudo gedit /etc/avrdude.conf
在最后面加入
AT89s52的相关信息
(这是
Joy Shukla写的
)
#------------------------------------------------------------
# Below chips by added by me .. Joy Shukla(joy_shukla@yahoo.in)
# these chips can be programmed with my usbasp programmer(changed atmega8 program)
# after adding avrdude support in this file ..
#------------------------------------------------------------
#------------------------------------------------------------
# AT89S52
#------------------------------------------------------------
part
id = "8052";
desc = "AT89S52";
signature = 0x1E 0x52 0x06;
chip_erase_delay = 20000;
pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
"x x x x x x x x x x x x x x x x";
chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
"x x x x x x x x x x x x x x x x";
timeout = 200;
stabdelay = 100;
cmdexedelay = 25;
synchloops = 32;
bytedelay = 0;
pollindex = 3;
pollvalue = 0x53;
predelay = 1;
postdelay = 1;
pollmethod = 0;
memory "flash"
size = 8192;
paged = no;
min_write_delay = 4000;
max_write_delay = 9000;
readback_p1 = 0xff;
readback_p2 = 0xff;
read = " 0 0 1 0 0 0 0 0",
" x x x a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
write = " 0 1 0 0 0 0 0 0",
" x x x a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
mode = 0x21;
delay = 12;
;
memory "signature"
size = 3;
read = "0 0 1 0 1 0 0 0 x x x 0 0 0 a1 a0",
"0 0 0 0 0 0 0 0 o o o o o o o o";
;
;
#------------------------------------------------------------
然后保存
现在就可以烧录
AT89S52的单片机了
,
用命令
sudo avrdude -p 8052 -c usbasp -e -U flash:w:'跑马灯
.hex'
就可以烧录了 你可以把命令中的”跑马灯
.hex”换成你自己的程序。
如果觉得 命令太长 太难记, 那么推荐你使用
makefile来自动完成。
我是这样做的
在工作目录下建立一个
makefile,内容如下:
###########内容开始
#############
main:
sdcc liushui.c #注意这一行以及一下每行开头都是一个
Tab
packihx liushui.ihx>liushui.hex #SDCC默认的输出格式是
ihx 我们把它转换成
hex
sudo avrdude -p 8052 -c usbasp -e -U flash:w:liushui.hex #这就是烧录的语句,其实最后的格式是
ihx也可以烧录的
##########内容结束
###############
保存之后 在工作目录下只要输入一句
make 就可以完成 编译 烧录 一步到位了。
/*当然你得保障程序能正常编译,下载器和单片机都连接好了
*/
接下来讲讲如何烧录
STC单片机
STC的程序编写 不用我说了。它的下载是用
gSTCISP 貌似是一个中国人写的,还是图形界面的。
gSTCISP 下载地址如下
http://forum.ubuntu.org.cn/download/file.php?id=104628&sid=767b624faf73a36c71fcd4f8111773e
gSTCISP下载要求的格式是
bin 我在网上也没找到所谓的
Hex2bin 程序
,不过 发现用
objcopy 也可以把
hex文件转化为
bin'文件,姑且我就先这么用了。
生成
hex文件后,用如下命令将
hex转化为
bin
objcopy -I ihex -O binary liushui.hex liushui.bin # I 和
O 都是大写
然后 打开
gSTCISP (我直接把它
cp到了
/usr/bin,就可以直接在提示符下输入
gSTCISP运行了)
选择
port(端口) 我的是
/dev/ttyUSB0 然后选择文件 选择刚刚生成的
bin文件
点击
DownLoad
好像
STC的是要先断电再上电的时候 就能把程序写入单片机了
当你看到
Program OK Have already encrypt.就说明你烧录成功啦。
写在最后:
我其实也是一个小菜鸟,这其实只是我的一次笔记而已。而且有些地方还写得很罗嗦。高手可以直接略过啦。使用
Linux 做单片机可以不用学怎么去用鼠标操纵不同图形界面的
IDE(集成开发环境),只需考虑自己要做的程序,然后记住需要的编译选项,而且
SDCC是
windows
Linux通用的,在
linux写的代码,
makefile 在
windows下甚至可以不用改
或者改动少许就能使用。而且
Linux不用去装什么下载线驱动,我的
usbisp下载线 和
usb转串口下载线都是直接插上就可以下载了。
___________________________________
以上内容全部为转载内容,出处:http://www.cnblogs.com/sky1991/archive/2012/08/08/2627575.html