Ubuntu下搭建STC单片机开发环境
过去开发STC单片机一直是基于Windows平台的,用Keil C51和STC官方提供的烧录软件。可是Windows上基本都是图形化工具,虽然上手容易,但是图形化界面也限制了开发效率。一直很想研究一下怎么在Linux上开发STC单片机。
我用的是Ubuntu 16.04桌面版。
首先安装sdcc,全称Small Device C Compiler,是一个转为8位MCU设计的C编译器。sdcc如同gcc,可以把C源码编译、链接成单片机的可执行文件。最简单的安装方法是:
+++code
sudo apt install sdcc
---code
当然,也可以从源码编译安装,具体可以查看#HREFhttp://sdcc.sourceforge.net/#-HREF1sdcc官网#-HREF2。
我们可以写一个小程序来试验一下,main.c:
+++code
#include <8051.h>

void delay(unsigned long loop) {
    while (loop) {
        loop--;
    }
}

void main() {
    while (1) {
        delay(100000);
        P1_7 = 0;
        delay(100000);
        P1_7 = 1;
    }
}
---code
使用如下命令一次性编译、链接:
+++code
sdcc main.c
---code
sdcc也可以像gcc那样使用-c参数指定只编译、不链接等等。
命令执行后,会看到目录下产生了一堆main.*文件,其中有一个main.ihx就是我们要的文件。
一开始我很困惑,在Windows上用Keil生成的程序是*.hex格式的,这个ihx是什么鬼?没有关系,在安装sdcc时自动安装了packihx这个工具,能把ihx文件转为hex文件:
+++code
packihx main.ihx > main.hex
---code
接下来就可以烧录啦。如果没有开发板,可以按照《#HREF../../2015/搭建51单片机最小系统——以STC12C2052为例/index.html#-HREF1搭建51单片机最小系统——以STC12C2052为例#-HREF2》中的说明,搭建好stc51最小系统。
用两个可用的烧录工具,一个是#HREFhttps://github.com/laborer/stcflash#-HREF1stcflash#-HREF2,另一个是#HREFhttps://github.com/grigorig/stcgal#-HREF1stcgal#-HREF2。个人推荐后者。
安装很简单:
+++code
sudo pip3 install stcgal
---code
如果之前没有安装过pip3的话,需要先安装pip3:
+++code
sudo apt install python3-pip
---code
可以正式开始烧录了。把USB-TTL插入电脑,应该会出现/dev/ttyUSB0(如果有多个,那么找到对应那个)。然后执行命令:
+++code
sudo stcgal main.hex
---code
此时会出现“Waiting for MCU, please cycle power:”字眼,需要重新插拔一下单片机电源,然后就会开始下载:
1.jpg
我之所以推荐使用stcgal而不是stcflash,是因为stcgal可以额外配置很多的参数。比如STC12C2052这款单片机,可以选择使用内部RC震荡器还是外部时钟源。那么在烧录时可以带上这些配置,比如:
+++code
sudo stcgal -o clock_source=internal main.hex
---code
具体参数可以查看。
另外我发现,stcgal是可以直接下载ihx格式的文件的。