听说STC出了32位的51单片机,本着尝尝新的想法,我入手了一块STC32的核心板来折腾,所以我打算开一个新坑,记录一下调试STC32的过程以及可能遇到的问题和麻烦。
0x00 前言
事情是这样的,为什么我要加这个前言呢?因为我被STC-ISP搞得精神崩溃了,这个STC提供的Flash烧录工具只有Windows版本,但是我日常用的开发环境是Mac OS,所以我试图用Wine来运行这个软件。但是这个软件不知道是用了什么奇怪的依赖,我装遍了所有我认为可能的依赖,但程序还是会在一个STC自家的弹窗广告弹出来之前发生闪退,所以我认为因为这个弹窗广告的原因导致闪退。我尝试了很多方法,但最终还是以失败告终。所以我决定在我正式开始编写这个系列的文章之前把STC好好地骂一顿。
但是我最后不死心,决定看看没有弹窗广告的老版本有没有这个问题的时候,在STC那宛如蜘蛛网一样乱的官网上找到了一个“精简版”STC-ISP,我抱着试试的态度打开它的时候,终于不闪退了,不过弹窗广告还是存在,但无法正常显示广告的状态,我调试了之后发现这个程序可以用,所以把原先的前言给删了。老姚的双亲暂时是保住了,就看他下次更新的时候有没有又整出什么幺蛾子。
0x01 配置开发环境
开发环境主要分为两部分,一个是编译器,一个是烧录程序。如果你使用的是Windows操作系统,那么很简单,安装一个Keil C251来编译程序,再在STC官网(stcmcudata.com)上下载一个STC-ISP来烧录程序即可。下面我将简单讨论一下Linux/Mac用户要如何配置开发环境。
编译器用的是C251编译器,很遗憾,SDCC并没有提供对C251支持,所以目前我只找到了Keil C251这一种可以编译C251的工具。而Keil只支持Windows,如果要在Linux或者Mac下开发的话,可以考虑使用Wine进行安装。我在MacOS12的机器上测试通过了Keil C251的运行,并且并不需要安装过多额外的依赖,只需要将字体组件corefonts安装至Wine容器中即可完美运行(关于如何安装依赖,请自行搜索Wine容器配置工具,在Mac下可以使用Wineskin这一图形化应用轻松配置)。
而烧录程序有多种选择,其一是像前文运行Keil一样,使用Wine环境运行。STC-ISP是用VC6.0+MFC写的程序,所以在Wine中安装mfc42这项依赖即可运行。请注意,官网上提供了几个版本的STC-ISP,请下载那个带有精简版字样的版本,否则会发生未知原因的闪退。在安装完成之后需要将串口映射到Wine中,使用指令:
1 | ln -s /dev/[你的串口设备号] [你的Wine Prefix路径]/dosdevices/com1 |
然后在STC-ISP中选择串口号COM1即可进行烧录。
另一种方式是使用stcgal进行烧录,这个软件目前还在保持更新(Github地址:https://github.com/area-8051/stcgal-patched )。
从Github下载代码后,执行
1 | python3 setup.py build |
在Install命令的输出信息里,可以找到类似这样的输出:
1 | Installing stcgal script to /usr/local/opt/python@3.9/Frameworks/Python.framework/Versions/3.9/bin |
根据你自己实际的安装路径,将这个目录添加到环境变量:
1 | sudo vi ~/.bash_profile |
添加如下两行(路径换成你自己实际的):
1 | export PYTHONPATH=/usr/local/opt/python@3.9/Frameworks/Python.framework/Versions/3.9/bin |
然后保存退出并执行:
1 | source ~/.bash_profile |
烧录命令:
1 | stcgal [要烧写的Hex文件路径] -P stc8d -p /dev/[你的串口设备号] |