单片机---Mac下的开发环境【1】(STC单片机 + SDCC + Stcgal)

前言

最近闲来无事,想在Mac上玩一玩单片机开发,没有Keil等工具使用,经过各种Google,完成了基本环境的搭建。

搭建开发环境

背景介绍

  • Mac系统版本: macOS Mojave
  • USB转串口: CH340PL2303
  • 单片机: STC90C516RD+ 、STC89C52RC

编译阶段

安装编译器

编译器我们使用 SDCC ,下面是官网上的介绍:

What is SDCC?
SDCC is a retargettable, optimizing Standard C (ANSI C89, ISO C99, ISO C11) compiler suite that targets the Intel MCS51 based microprocessors (8031, 8032, 8051, 8052, etc.), Maxim (formerly Dallas) DS80C390 variants, Freescale (formerly Motorola) HC08 based (hc08, s08), Zilog Z80 based MCUs (z80, z180, gbz80, Rabbit 2000/3000, Rabbit 3000A, TLCS-90) and STMicroelectronics STM8. Work is in progress on supporting the Microchip PIC16 and PIC18 targets. It can be retargeted for other microprocessors.

简单翻译一下,就是说:

SDCC 是一个优化标准 C (ANSI C89, ISO C99, ISO C11) 的编译器套件,Targets:

  • 基于 Intel MCS51 的微处理器 (8031, 8032, 8051, 8052, 等),
  • Maxim DS80C390 变体,
  • 基于 Freescale HC08 的 (hc08,s08),
  • 基于 Zilog Z80 的MCU (z80, z180, gbz80, Rabbit 2000/3000, Rabbit 3000A, TLCS-90),
  • STMicroelectronics STM8
    和 。

正在开展支持 Microchip PIC16 和 PIC18 的工作。
它可以重新 target 其他微处理器。

SDCC的安装

可以选择在官网下载安装包,可以通过包管理工具安装,甚至你可以自己编译 SDCC 的源码来安装(Linux 可能需要)。

我们在Mac上通常使用 brew 这个包管理工具,通过 brew 来安装 SDCC 的命令:

~ brew install sdcc

安装结束后使用如下命令查看 SDCC 版本信息:

~ sdcc -v
SDCC : mcs51/z80/z180/r2k/r3ka/gbz80/tlcs90/ds390/pic16/pic14/TININative/ds400/hc08/s08/stm8 3.8.0 #10562 (Mac OS X x86_64)
published under GNU General Public License (GPL)

到此,编译器 SDCC 就安装成功了。

编译代码

我们首先写一个简单的跑马灯 led.c,用 SDCC 编译,代码如下:

#include <8052.h>

void delay_ms(unsigned int ms)
{
    unsigned char i;
    while (ms--)
    {
        for (i = 0; i < 120; i++)
            ;
    }
}

void main()
{
    unsigned char i;

    while (1)
    {
        P1 = 0xff;
        i = 8;
        while (i--)
        {
            P1 = P1 << 1;
            delay_ms(300);
        }

        P1 = 0xff;
        i = 8;
        while (i--)
        {
            P1 = P1 >> 1;
            delay_ms(300);
        }
    }
}

代码写好了,使用如下命令编译:

~/led sdcc led.c

~/led ls
led.asm led.c   led.ihx led.lk  led.lst led.map led.mem led.rel led.rst led.sym

SDCC 编译器编译完成之后,会生成很多文件,有的是中间件,有的是可以当做库提供给他人的,这里我们主要关心 led.ihx 文件,这个文件是可以烧录到单片机的可执行文件。

至此,编译阶段的任务就全部都完成了。那么代码编译好之后,如何装入单片机并执行呢?下面就说一些烧录阶段。

烧录阶段

连接、驱动

我的学习板是板载USB转串口模块的,芯片是 PL2303,需要安装 PL2303 Mac 版本的驱动程序,这样通过 USB 连接到学习板后,就可以发现设备。驱动下载地址在上面的背景介绍中。CH340 芯片的同理,安装好驱动后,其他没有差别。

驱动安装后必须要重启电脑,电脑重启后,将电脑和学习板通过 USB 连接起来,如下图:


mac_stc_mcu.jpg

打开终端,执行如下命令:

~/led ls /dev/tty.*
/dev/tty.Bluetooth-Incoming-Port  /dev/tty.usbserial

其中 /dev/tty.usbserial 就是学习板 USB 转串口设备,一会儿要用到这个设备进行烧录。

安装烧录工具

烧录工具我知道的有:stcgal 和 stcflash
这里选择 stcgal 就好,没有任何理由选择 stcflash,前者完爆后者,有意思的是本来我想在这里写一点这两个工具的对比,可是一想到根本没有任何可比性,索性就算了吧,其实在上面是否要提到 stcflash 这件事我也是很纠结的。。。

stcgal_support_list.png

上面这张图片是 stcgal 经过测试的 MCU 清单(stcgal should fully support STC 89/90/10/11/12/15/8 series MCUs.)

下面来安装 stcgal,推荐使用 Python3 和 pip3 来安装 stcgal,执行如下命令:

~ pip3 install stcgal

可能需要读写系统目录的权限。
烧录工具就安装完成了。

烧录程序

回到终端,接下来我们将之前编译好的程序烧录到单片机中,使用如下命令:

~/led stcgal -P stc89 -p /dev/tty.usbserial led.ihx

介绍一下这个命令:-P stc89 表明单片机型号,-p /dev/tty.usbserial 是我们上面查到的 USB 转串口设备,led.ihx 就是我们之前编译好的程序。

执行完上面的命令后,终端会提示你给单片机重新上电:

Waiting for MCU, please cycle power:

终端会在这里等待,知道你把单片机重新上电后,会继续执行烧录工作。重新上电后效果如下:

Waiting for MCU, please cycle power: done
Target model:
  Name: STC90C516RD+
  Magic: F130
  Code flash: 62.0 KB
  EEPROM flash: 0.0 KB
Target frequency: 23.846 MHz
Target BSL version: 4.3C
Target options:
  cpu_6t_enabled=False
  bsl_pindetect_enabled=False
  eeprom_erase_enabled=False
  clock_gain=high
  ale_enabled=True
  xram_enabled=True
  watchdog_por_enabled=False
Loading flash: 188 bytes (Intel HEX)
Switching to 19200 baud: checking setting testing done
Erasing 2 blocks: done
Writing flash: 640 Bytes [00:00, 2015.33 Bytes/s]
Setting options: done
Disconnected!
~/led

至此,一个简单的跑马灯程序,经过编码 -> 编译 -> 烧录后,成功的运行在单片机上了。

注:

需要注意的是,sdcc 编译器与 keil 的编译器有微小的区别,在写代码的时候有几个地方需要不同的写法,这个网上搜索一下就可以了解到。

---End

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容