历史上的今天
返回首页

历史上的今天

今天是:2025年03月18日(星期二)

正在发生

2019年03月18日 | 如何在Linux下进行stc51单片机的开发

2019-03-18 来源:eefocus

第一次接触单片机,自然选择了简单的51单片机。然而我的操作系统是 Linux 。在 Windows 下上手51似乎很容易。但是 Linux 上搭建 51 开发环境不是很顺。


那么谈谈 Linux 我如何搭建 STC89C52RC 的开发环境吧。


(一)

选择自己喜好的代码编辑器即可。vim , emacs , gedit 等都可以。


(二)

安装编译器。一般选择 sdcc 。一般可从发行版的包管理器中直接安装。

如Arch中:  

$ sudo pacman -S sdcc

如果不行,需要自行下载编译。

简单介绍使用sdcc:

假如当前目录有一个写好的源文件 main.c 。 使用如下简单方式即可编译。

$ sdcc main.c

生成的若干个文件中 main.ihx 是一个生成的16进制可执行文件。后面便可以将其烧录到单片机中。


(三)

将生成的可执行程序烧录到单片机是需要一条下载线的。一般说来使用 USB 转串口的下载线。插上之后,在 /dev 里面有个设备叫 ttyUSB* 说明可以进行后面内容。

否则你可能需要安装 USB 转串口的驱动。

选择烧录工具。网上大部分使用的是 gSTCISP 这个工具烧录。但是在我尝试之后,总是卡在 We are trying to connect your MCU...这个地方。

起初我还以为下载线出现问题了。后来发现不是。你可以尝试。注意 gSTCISP 需要的是二进制文件,因此需要把 main.ihx 转换为二进制文件。

一个转换例子:

$ makebin < main.ihx > main.bin

你需要把文件名更改成你自己相应文件名。其他方法还有很多,自行搜索。

  通过我测试的一个烧录工具 stcflash 。这是一个 python 脚本。因此你需要安装 python 环境。大部分 Linux 发行版安装了 python 。但是你需要安装一个额外的运行库 python-serial 。

$ sudo pacman -S python-serial

将下载好的 stcflash.py 放入源文件目录。接下来开始烧录。

  首先关闭板子。执行

$ sudo python ./stcflash.py ./main.ihx

打开开发板即可烧录进去。成功结果如下:

Connect to /dev/ttyUSB0 at baudrate 2400
Detecting target... done
FOSC: 11.996MHz
Model: STC89C52RC (ver4.3C)
ROM: 8KB
Baudrate: 38400
Erasing target... done
Size of the binary: 218
Programming: #################### done

另外二进制文件使用 stcflash 也可以烧录进入。

sdcc 下载地址:http://sdcc.sourceforge.net/snap.php#Linux

gSTCISP 下载地址:http://osdn.jp/projects/sfnet_gstcisp/releases/?fulllist=1

stcflash 下载地址:https://github.com/RainMark/stcflash.git


推荐阅读

史海拾趣

ABC [ABC Taiwan Electronics Corp]公司的发展小趣事

近年来,随着环保意识的日益增强,ABC Taiwan Electronics Corp积极响应绿色生产的号召。公司引入了环保材料和节能技术,降低了生产过程中的能耗和排放。同时,公司还加强了废弃物的处理和回收利用,实现了资源的循环利用。此外,ABC还积极参与社会公益活动,支持教育事业和环保事业,履行了企业的社会责任。

这五个故事展示了ABC Taiwan Electronics Corp从创业初期的艰难起步到逐步成长为国际知名电子零件供应商的发展历程。通过技术突破、国际化战略、产业升级和绿色生产等方面的努力,ABC不断应对市场的变化和挑战,实现了稳健的发展。

Garmin_Canada_Inc.公司的发展小趣事
通过微控制器的精确控制,可以实现拨号过程的精确控制。例如,在拨号前进行必要的初始化操作,拨号过程中实时监测信号状态,并在拨号完成后进行状态确认。
GE Industrial Solutions公司的发展小趣事
由于光耦的CTR随温度变化而变化,可能导致输出信号的非线性失真。解决方法包括选择温度稳定性好的光耦,或在电路中加入温度补偿电路。
Grand Halo Technology Co Ltd公司的发展小趣事
由于光耦的CTR随温度变化而变化,可能导致输出信号的非线性失真。解决方法包括选择温度稳定性好的光耦,或在电路中加入温度补偿电路。
HALO Electronics公司的发展小趣事
使用高压测试仪测量输入输出之间的隔离电压,确保满足安全要求。
倍思特(BEST)公司的发展小趣事
光耦的隔离作用虽然能减少电气噪声的干扰,但光耦本身也可能引入噪声。解决方法包括选择低噪声的光耦,或在电路中加入滤波电路。

问答坊 | AI 解惑

直流稳压电源 电子大赛培训资料

本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 …

查看全部问答>

基于proteus的喇叭的应用实例或单片机实现的音乐贺卡

单片机实现类似音乐贺卡的功能,自己选择一段音乐用单片机驱动喇叭播放出来,…

查看全部问答>

急求VHDL高手进来帮我看一看

没有语法错误,但找不到症结在哪,请帮忙看一下,感谢! QQ704443450。小女子在线等…

查看全部问答>

ClearCommError问题

COMSTAT ComStat ClearCommError(m_hCom,&dwErrorFlags,&ComStat); 这个函数用于清除硬件错误和获取状态(我是的重叠操作) 我WriteFile后,ReadFile前怎么这个结构的cboutbuf永远是0,为什么不是我写入的字节 单步调试N此不知为何?恭请高手解 ...…

查看全部问答>

png按钮的资源释放问题

开发环境:vc2005  arm   wince5.0 我用网上下的CCePngButtonST类做png按钮,想要实现同一个按钮上的png图片根据不同情况显示不同内容,比如播放器打开时显示一张图片,播放器关闭时显示另一张图片,结果点了n次后把内存都占 ...…

查看全部问答>

机顶盒界面开发咨询

请问各位大侠如何做比较酷的机顶盒界面(比如说立体按钮)? 用C或C++. 只能自己画吗? 有什么注意的地方? 谢谢了 …

查看全部问答>

dereferencing type-punned pointer will break strict-aliasing rules

static int print(char **out, int *varg) {         register int width, pad;         register int pc = 0;         register char *format = (char *)(*varg++);   &nb ...…

查看全部问答>

DS1302程序读写

DS1302程序读写;对初学者很有帮助的哟;对C语言老手也很有参 考价值!…

查看全部问答>

DSP代码运行报错,求高人指点

cmd文件内一段代码如下: _EVENT72 = EVENT72;_EVENT73 = EVENT73;_EVENT74 = EVENT74;_EVENT75 = EVENT75;_EVENT76 = EVENT76;_EVENT77 = EVENT77;_EVENT78 = EVENT78; CCS 4内,debug运行后报错:   absolute symbol \"_EVENT72\" being ...…

查看全部问答>