单片机---Mac下的开发环境【3】(STC单片机 + PlatformIO IDE)

前言

上一篇文章 单片机---Mac下的开发环境【2】(STM32、Arduino + PlatformIO IDE) 的最后提到了 PlatformIO IDE 开发 STC 单片机程序的可行性。

后来我才发现,实际上 PlatformIO IDE 已经对部分 STC 单片机进行了原生支持,如下图:

STC supported.png

可以看到,仅支持 STC15 系列的部分单片机。

实际上支持哪些板子或者单片机都是可配置的,只是这种配置有一定的门槛,当然这个门槛对广大程序员来讲可以忽略不计,但是玩单片机的也有相当一部分电子爱好者,他们不懂太多的软件工程,门槛对于这些人来讲又是比较高的。不过我是希望 PlatformIO 官方可以把这部分做个功能出来,毕竟 GUI 操作更直观、更方便,也让希望能够进行独立配置的伙伴们可以拥有更高的自由度,这不也应该是开源项目的天生特质吗?

回到正题,让我们来看看如何使用 PlatformIO IDE 开发 STC 单片机应用程序。

原生支持的 STC 单片机

我手中的是自己焊接的 STC15W204S 单片机板子,使用内部时钟,有两颗 LED 用来测试代码效果。

STC15W204S.png

下面就用这个板子来简单的演示开发过程

新建项目

New Project.png

这里的 Framework 是无法选择的,因为 IDE 所提供的框架都没有对 STC 进行支持。其他的不再赘述。

Created.png

项目创建成功??梢钥吹剑瑂rc 目录下并没有自动为我们生成源文件,因为没有框架参与。我们自己创建即可。

编写代码

老套路,还是用 Blink Led 程序来测试。创建源代码文件,然后编写代码如下:

// main.c

#include <8052.h>

// 定义时钟频率
#define MAIN_Fosc 24000000L

// 定义 LED 驱动管脚
#define LED P1_1

void delay_ms(unsigned int ms)
{
    unsigned int i;
    do
    {
        i = MAIN_Fosc / 13000;
        while (--i)
            ; //14T per loop
    } while (--ms);
}

void main()
{
    while (1)
    {
        // 让 LED 点亮 100ms,熄灭 100ms,循环闪烁。
        LED = 0;
        delay_ms(100);
        LED = 1;
        delay_ms(100);
    }
}

编译项目

使用快捷键 control+option+B 或者点击左下角的 Build 按钮进行编译。因为没有依赖或者使用框架,所以不用下载资源。其他的不再赘述。

Upload

我使用 FT232 USB 转串口??榻テ?Mac 连接:

USB 转串口.png

在没有进行任何其他配置的情况下,我们看看能不能 Upload 成功:

Upload stuck.png

经过我的测试,结果是会一直卡在这里。那么是因为什么呢?又怎么解决这个问题呢?

大家看上图红框内的信息。对,PlatformIO IDE 在向 STC 单片机 Upload 时使用了 stcgal 这个工具,这个工具在我的这篇文章 单片机---Mac下的开发环境【1】(STC单片机 + SDCC + Stcgal) 中有介绍过。

那么我直接在终端中使用 stcgal 这个工具是可以的,为什么到 IDE 中就不行了呢?那是因为没有指定 stcgal 的 Protocol,我们先看一下可以烧录的 stcgal 命令:

~  stcgal -P stc15 -t 24000 -p /dev/tty.usbserial-A105L08V firmware.hex

这个算是常规来讲比较完整的一个烧录命令,简单介绍一下:

  • -P : 用来指定 stcgal 的协议,stc15 就是指 STC15 系列单片机的协议。通常我都不会省略这个参数,因为有些系列不显式的指定协议的话可能会引发一些问题,日后整理好再发布出来;
  • -t : 在使用内部时钟时指定时钟频率,这个参数在第一次使用内部时钟时必须填写,不然无法烧录。第一次过后,如果不需要修改内部时钟频率的话,这个参数可以不填;
  • -p : 指定端口,必须填写,不然找不到设备;
  • firmware.hex : 固件的相对路径。

介绍完可用的命令后,我们再来看为什么 IDE 无法使用 stcgal 成功的 Upload 固件。实际上在分析这个问题的时候我是花费了一些时间的,因为在终端中的显示的信息里面没有任何问题,就是一直卡在 Cycling power 这块。后来我发现,在给单片机重新上电后,USB 转串口??槭怯蟹从Φ?,TXD、RXD 的 LED 灯会闪一下,然后就保持??榈?TXD 的 LED 高速闪烁(看起来很像常亮),这说明??楹偷テ怯型ㄑ兜模徊还鐾ㄑ读四敲匆凰布?,然后??橐恢背⑹苑⑺褪?,单片机没有进一步的响应。啰嗦了这么多不知道小伙伴们能不能看懂 ??。总结来讲,就是与单片机的串口通讯被拒绝了。

发现上面所描述的现象后,问题就变得简单了。因为这一定是 stcgal 协议的问题,这个问题很有可能是 PlatformIO IDE 对 stcgal 的使用存在问题导致的(当然,PlatformIO IDE 能原生支持 STC 就已经很走心了,毕竟老外很少玩 STC 单片机),那么就需要知道 IDE 是如何使用 stcgal 这个工具的。

经过阅读源码,找到了上传固件相关的部分:

platform-intel_mcs51/builder/main.py

重点看 UPLOADERFLAGS 里面的参数,有 -p -t -a,但是没有 -P ,正如我上面所说的,-P 这个参数我都是不会省略的,确实有的系列的 STC 单片机在不给 -P 参数的时候烧录没问题,但有的系列就会有问题,这里省略了这个协议参数,导致 stcgal 与单片机通讯失败。

问题找到了,那就解决呗。我们先简单粗暴的在 UPLOADERFLAGS 加上 -P 参数,指定为 stc15:

Modify platform-intel_mcs51/builder/main.py.png

添加红框中的代码后保存,然后我们再通过 IDE 上传固件试试看结果如何:

Upload success.png
结果符合预期,Upload 成功了,红色框出的位置是修改源码之前卡住的地方,现在把它跨过去成功的将固件上传到单片机中了!

但是问题不能就这么简单粗暴的解决,因为如果要使用 STC8 或者其他系列的 STC 单片机遇到同样的问题怎么办?不能每次都修改源代码??!这不符合开闭原则,这也太不程序猿了!所以我将 PlatformIO IDE 中涉及到 STC 单片机的相关代码进行了优化,向官方提交了 PRAdd "stcgal_protocol" field #16),已经通过并合并进了 develop 分支,会跟随下一版的 IDE 插件发布更新。到时候无需任何配置,写好代码后即可编译上传,敬请期待吧。

官方已经在 1.2.0 版本中添加了我的PR

屏幕快照 2019-05-17 上午10.54.29.png

修改时钟频率

Change MCU frequency.png

通过 board_build.f_cpu 配置选项可以覆盖板子默认的时钟频率。更多选项参阅官方文档。

非原生支持的 STC 单片机

P.S.

通过解决上面遇到的问题,大概看了一下 PlatformIO IDE 的源码(不看源码怎么解决问题 ??),也因此熟悉了板子的配置文件,所以也就知道了如何自己手动添加原生不支持的板子了。这个如果有小伙伴需要了解,我以后再总结一篇文章出来,本片文章就暂时先不介绍非原生支持的开发了。

--- The End ---

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

推荐阅读更多精彩内容