51单片机开发环境python3单片机开发mac·

macOS搭建51单片机开发环境

Hugh

Hugh

4506 26

1.概述

鉴于好多朋友平常工作电脑为苹果,再配一台 Windows 机器来开发 51 单片机,略显多余。为此,本文详细讲解在 macOS 搭建 51 单片机开发环境。

软硬件需求:

  • macOS 笔记本或台式机
  • 串口转 USB 驱动 CH341
  • 51 内核编译器 sdcc
  • 程序下载工具 stcgal
  • 代码编辑器 visual studio code
  • 51 单片机开发板(选配)

小编使用的 51 单片机开发板为 nebula-Pi,主单片机型号为 STC89C52RC,并且搭载了 CH340C 串口转 USB 芯片,通过该串口实现程序的下载。

2.串口转 USB 驱动 CH341 安装

单片机开发板与 PC 之间通过 USB 线连接,需安装 CH340C 的 USB 转串口 macOS 驱动程序。下载地址,直接点下载就好。解压下载好的文件,双击运行目录里面的 ch34xInstall.pkg,根据提示一直点击下一步,最后重启电脑。

重启电脑后,将 51 单片机开发板连接至 PC,在命令行终端输入下列代码:

ls /dev/tty.wchusbser*

如果出现:

/dev/tty.wchusbserial14a0

表示驱动安装成功!其中 14a0 代表你的串口号,每台 PC 或插在不同的 USB 口,这个号略有差异,后续下载程序将会使用到。

3.程序下载工具 stcgal 安装

stcgal 是 STC 单片机的下载工具,安装前需确保已提前安装好 python3。

3.1 安装 python3

macOS 自带 python2.7,到官网下载 python3 的 macOS 版本,并安装。 安装完毕 python3 以后,敲入命令获得安装路径:

which python3

我的安装路径为:

/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7

将这个路径配入环境变量:

vim ~/.bash_profile

在文件的最后一行输入下面代码,保存并重启电脑:

alias python="/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7"

命令行敲入:

python

输出如下信息表明 python3 环境配置成功:

Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 26 2018, 23:26:24) 
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

3.2 下载安装 stcgal

下载地址,下载后并解压。在终端命令行中 cd 切换路径到解压文件。终端输入下面两条命令开始安装:

./setup.py build
sudo ./setup.py install

可输入如下命令查看 stcgal 版本信息:

stcgal --version

到这里,STC 单片机在 macOS 下的程序下载工具 stcgal 就安装完成了。

4.内核编译器 sdcc 安装

sdcc 可通过命令行直接安装:

brew install sdcc

该命令使用了 brew,因此需提前安装 homebrew,官方网站安装需要科学上网,我们使用国内镜像可实现光速安装,命令如下:

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

安装完成后,查看 sdcc 版本信息:

sdcc --version

运行结果如下:

SDCC : mcs51/z80/z180/r2k/r3ka/gbz80/tlcs90/ez80_z80/ds390/pic16/pic14/TININative/ds400/hc08/s08/stm8/pdk13/pdk14/pdk15 4.0.0 #11528 (Mac OS X x86_64)
published under GNU General Public License (GPL)

到这里 sdcc 安装也告一段落了。

4.代码编辑器 visual studio code 安装

命令行代码安装如下:

brew cask install visual-studio-code

安装完成启动软件,按下图所示搜索,并安装 platformIO IDE 插件:

按下图所示,搜索嵌入式平台 Intel MCS-51 ,并点击进入 install。

到这里,代码编辑环境准备就绪了。

5.新建工程

step1: 新建项目流程如下所示:

step2: 设置项目名称,选用 Generic STC89C52RC 平台。

step3: 编辑代码 step3.1添加符合 sdcc 编译器要求的头文件,需要打开工程目录将头文件添加至 include 文件夹下,头文件下载链接如下:

https://pan.baidu.com/s/1wSZKHhlElO6w2nwQIMfXuQ 密码: in94

step3.2 src 文件夹下添加.c 格式文件如下图 2,3 所示,并编辑代码如下:

#include"8051.h"
#define LED0 P1_0

void main()
{
    LED0 = 0;//点亮 LED0
}

step3.3 指定下载串口,打开 platformio.ini 文件,添加如下代码,如下图 5 所示:

upload_port = /dev/cu.wchusbserial14a0

注意: 代码中的串口号就是安装 USB 串口驱动时的串口号,正常情况下,在下载时软件会自动寻找并打开串口,但有时打开不正确,造成下载不成功,因此,我们在这里指定好固定的串口。 具体流程如下图所示,其中,6,7 所示为编译下载按钮。

step4 按上图的 6 编译按钮开始编译,结果如下:

step5 按上图 7下载按钮,并给开发板上电,下载过程如下图所示。

到这里便完成了 51 单片机的开发环境的搭建,并完成了一个小的试验项目。

6 其他重要事项

大家是否注意到我们在新建工程的step2: 选用 Generic STC89C52RC 平台,如果我们板子的平台不在可选之列怎么办?例如单片机 STC12C5A60S2。此时,我们需要自行建立板子平台模版,具体操作方法请参考: RY-Teach STC12C5A60S2 Mac 环境搭建

7 总结

本文详细介绍了 基于 visual studio + platformIO + stcgal + sdcc 的 51 单片机开发环境搭建。

相关文章

优先推荐同专题、同标签和同作者内容,补足热门文章。

评论 26

登录 后参与评论

评论 26

tianchengx
tianchengx12月17日 19:15

你好,我跟着你的教程搭建了环境,编译成功,但是在烧录的时候程序直接显示 Cycling power: done 但是此时我并没有给单片机重新上电,导致程序卡在这里不能继续进行,此时单片机所有的灯都灭掉了,按学习班开关也没有反应,control+c中断程序后单片机的灯就重新亮起来了,可以重新烧录,但是卡在同一个地方。 但是同样的程序,使用终端可以成功烧录并运行,请问这个问题可能出在哪里? 平台是普中的STC89C52RC平台,采用的就是教程中的程序。下面的烧录时的代码: Executing task: platformio run --target upload < Processing stc89c52rc (platform: intel_mcs51; board: stc89c52rc) Verbose mode can be enabled via -v, --verbose option CONFIGURATION: https://docs.platformio.org/page/boards/intel_mcs51/stc89c52rc.html PLATFORM: Intel MCS-51 (8051) (1.2.3) > Generic STC89C52RC HARDWARE: STC89C52RC 11MHz, 512B RAM, 8KB Flash PACKAGES: • tool-stcgal 1.104.0 (1.4) • toolchain-sdcc 1.30804.10766 (3.8.4) LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf LDF Modes: Finder ~ chain, Compatibility ~ soft Found 0 compatible libraries Scanning dependencies... No dependencies Building in release mode Checking size .pio/build/stc89c52rc/firmware.hex Advanced Memory Usage is available via "PlatformIO Home > Project Inspect" Flash: [ ] 1.3% (used 105 bytes from 8192 bytes) Configuring upload protocol... AVAILABLE: stcgal CURRENT: upload_protocol = stcgal Looking for upload port... Use manually specified: /dev/cu.wchusbserial14610 Uploading .pio/build/stc89c52rc/firmware.hex Cycling power: done ^CWaiting for MCU: interrupted *** [upload] Build interrupted. Error: Aborted by user

Hugh
Hugh 回复 @tianchengx12月17日 19:26

没遇到过你这个问题?

Hugh
Hugh 回复 @tianchengx12月17日 19:30

感觉软件安装没啥问题,你试一下,先点击下载,等到了重启提示的时候再给开发板上电!

tianchengx
tianchengx 回复 @Hugh12月17日 20:24

我试过不上电,先点下载,等出来提示再上电,这时候就直接无法上电,也试过直接上电,等跑到cycling power:的时候就直接跳出来了Done,然后板子的灯全灭,上电开关无反应。但是用终端就可以成功烧录,现在的问题就是platform IO不会等我重新上电,done就直接显示出来了

ronger
ronger 回复 @tianchengx12月17日 20:45

? 重启电脑解决百分之 90 的问题

tianchengx
tianchengx 回复 @ronger12月17日 21:07

落入了那10%?

Hugh
Hugh 回复 @tianchengx12月17日 21:09

等我晚上有空测试一下,看看能不能复现你这个问题!

tianchengx
tianchengx 回复 @Hugh12月17日 21:18

我用platform IO的inspect 检查这个项目,里面有些错误,但是我看不太懂,不知道有没有用处 PIO Core Call Error: "Processing stc89c52rc (platform: intel_mcs51; board: stc89c52rc)\n--------------------------------------------------------------------------------\nVerbose mode can be enabled via -v, --verbose option\nCONFIGURATION: https://docs.platformio.org/page/boards/intel_mcs51/stc89c52rc.html\nPLATFORM: Intel MCS-51 (8051) (1.2.3) > Generic STC89C52RC\nHARDWARE: STC89C52RC 11MHz, 512B RAM, 8KB Flash\nPACKAGES: \n - tool-stcgal 1.104.0 (1.4) \n - toolchain-sdcc 1.30804.10766 (3.8.4)\nLDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf\nLDF Modes: Finder ~ chain, Compatibility ~ soft\nFound 0 compatible libraries\nScanning dependencies...\nNo dependencies\nBuilding in debug mode\nCalculating size .pio/build/stc89c52rc/firmware.hex\nInternal RAM layout:\n 0 1 2 3 4 5 6 7 8 9 A B C D E F\n0x00:|0|0|0|0|0|0|0|0|S|S|S|S|S|S|S|S|\n0x10:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|\n0x20:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|\n0x30:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|\n0x40:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|\n0x50:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|\n0x60:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|\n0x70:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|\n0x80:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|\n0x90:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|\n0xa0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|\n0xb0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|\n0xc0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|\n0xd0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|\n0xe0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|\n0xf0:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|\n0-3:Reg Banks, T:Bit regs, a-z:Data, B:Bits, Q:Overlay, I:iData, S:Stack, A:Absolute\n\nStack starts at: 0x08 (sp set to 0x07) with 248 bytes available.\nNo spare internal RAM space left.\n\nOther memory:\n Name Start End Size Max \n ---------------- -------- -------- -------- --------\n PAGED EXT. RAM 0 256 \n EXTERNAL RAM 0 256 \n ROM/EPROM/FLASH 0x0000 0x0068 105 8192 \n\nGenerating memory usage report...\n\n\n*** [sizedata] ELFError : Magic number does not match\nTraceback (most recent call last):\n File "/Users/xutiancheng/.platformio/packages/tool-scons/scons-local-4.2.0/SCons/Action.py", line 1279, in execute\n result = self.execfunction(target=target, source=rsources, env=env)\n File "/Users/xutiancheng/.platformio/packages/tool-scons/scons-local-4.2.0/SCons/Util.py", line 748, in __call__\n return self.method(*nargs, **kwargs)\n File "/Users/xutiancheng/.platformio/penv/lib/python3.9/site-packages/platformio/builder/tools/piosize.py", line 209, in DumpSizeData\n elffile = ELFFile(fp)\n File "/Users/xutiancheng/.platformio/penv/lib/python3.9/site-packages/elftools/elf/elffile.py", line 73, in __init__\n self._identify_file()\n File "/Users/xutiancheng/.platformio/penv/lib/python3.9/site-packages/elftools/elf/elffile.py", line 482, in _identify_file\n elf_assert(magic == b'\x7fELF', 'Magic number does not match')\n File "/Users/xutiancheng/.platformio/penv/lib/python3.9/site-packages/elftools/common/utils.py", line 77, in elf_assert\n _assert_with_exception(cond, msg, ELFError)\n File "/Users/xutiancheng/.platformio/penv/lib/python3.9/site-packages/elftools/common/utils.py", line 114, in _assert_with_exception\n raise exception_type(msg)\nelftools.common.exceptions.ELFError: Magic number does not match\n========================== [FAILED] Took 0.45 seconds =========================="

Hugh
Hugh 回复 @tianchengx12月17日 22:18

下面是我的测试结果,点击下载后也停留在了cycling power: done,此时重新给单片机上电,自动开始下载了!

tianchengx
tianchengx 回复 @Hugh12月19日 10:26

我是出现power cycling:done 之后,开发板好像直接下电了,在按开关没有反应,^+c结束程序之后自动又上电了,结束之前不论做什么都不行

Hugh
Hugh 回复 @tianchengx12月19日 21:21

你的开发板是不是又类似自动下载的电路?就接Tx,Rx,GND,其他不接试一试!

tianchengx
tianchengx 回复 @Hugh12月20日 07:54

我的是普中A3的板子,晚上回家我试一下!

tianchengx
tianchengx12月20日 21:21

我看了一下,应该是没有,介绍里面也没写有自动下载的功能,用终端烧录也要重新上电才行。

tianchengx
tianchengx12月20日 22:52

会不会是Platform IO里面的stcgal版本过低?我看platform IO显示的是1.4版本,但是我装的是1.6版本。 我试着按照教程替换了Platform IO里面的 stcgal文件夹,但是VS Code里面显示的还是1.4版本,是我替换失败了吗?

Hugh
Hugh 回复 @tianchengx12月20日 23:00

我的版本也是1.4,应该不是版本问题!

tianchengx
tianchengx12月21日 09:15

昨天又研究了一下,问题可能是出在PlatformIO尝试进行自动断电而不是手动断电导致的,但是自动断电的程序又与我的开发板不兼容?

ronger
ronger 回复 @tianchengx12月21日 09:20

? 把它换了, Nebula Pi 开发板

tianchengx
tianchengx 回复 @ronger12月23日 14:25

还是菜鸟,终端先用着,后面学到蓝牙wifi了换一个?

mr_zty
mr_zty4月12日 22:19

不知道这个程序为什么会报错

Hugh
Hugh 回复 @mr_zty4月14日 19:38

看看你的代码和报错信息!