因为最近新开了一门 51 单片机课程,所以搞了台单片机开发板来玩。传统的单片机开发环境基本上都是 Windows+Keil,而 Keil 的编辑器又显得落后。如果你也想要脱离 Windows 和 Keil 那种传统的开发生态,拥抱 Linux 的开发环境的话,不妨尝试 PlatformIO。
# 1 PlatformIO
PlatformIO 是一个物联网开发的开源生态系统,支持跨平台的开发和调试。我平时使用 VSCode 作为主力编辑器;PlatformIO 插件对 VSCode 的支持很好。当然,如果你使用其他编辑器或 ide,那也当然没问题;PlatfromIO 在 Clion、QT、Vim 等主流软件中均由相关插件支持。这里以 VSCode 为例:
- 首先安装 PlatformIO IDE 插件
- 打开 PlatfromIO IDE 首页
-
从 Platfroms 中搜索 Intel MCS-51 (8051) 进行下载
-
点击新建项目
-
填写项目名称;选择 STC89C52RC;进入下一步
- include 文件夹下存放项目需要的头文件;主程序放在 src 目录下;platformio.ini 是 PlatformIO的配置文件;
# 2. hello world
正如每种语言的入门程序一定是 hello world 那样,学习 51 单片机的初次实践必定是点亮 led 灯。让我们向 src 中添加以下代码:
//main.c
#include "8051.h"
#define LED P1_0
void main(){
LED = 0;
}
你可能会注意到这个程序和你在 Keil 中见到的并不完全一样(也就是说和大多数的教程并不相同),但没有任何关系;PlatformIO 使用的编译器是 sdcc,因此和 Keil 具有不同的指令,比如定义端口时使用 “ _ ” ,而不是 “ ^ ” ;又比如使用宏定义而不是“ sbit ”…
# 3. 确认串口驱动
一般情况下,Linux 自带串口驱动。但为了确保驱动切实存在,运行以下命令(当然是在已连接单片机的情况下)
sudo dmesg | grep tty
当看到方框中信息表明驱动已安装。万一(真的会有这个万一吗?)没能看到此条消息,请先安装驱动,不要往下走。
# 4. 构建和烧录
Platform IO 中已经事先预留好了构建和烧录选项,一般来说我们只需要鼠标点点就行,但还是稍微了解一下其中原理。
Platform IO 构建过程使用的编译器,正如我们之前所说,是 sdcc。其全称是 Small Device C Compiler,这是一个使用 GPL 授权的开源工具集;这也意味着我们能够毫无顾虑地将其投入到生产中(点名批评某 K 字开头的软件)。其指令与 Keil 稍有不同。
烧录使用的是 stcgal。stcgal 是 STC Windows 软件的全功能开源替代品;它支持广泛的 MCU,非常便携,适合自动化。使用命令行运行的指令如下:
stcgal -P stc89 -p /dev/ttyUSB0 .pio/build/STC89C52RC/firmware.hex
其中 -P
指定单片机的型号,-p
指定串口,此处填写上面查找到的串口名称。(有时能够自动找到串口和单片机型号,因此不是必填项)
我所使用的是某中科技的 STC89C52 开发板,已知在使用 Platform IO 自带的 stcgal 进行烧录会卡在 Cycling power: done
,无法继续进行烧录。据判断,是未指定开发板型号。因此使用指令进行烧录;出于偷懒的原因,在 ~/.zshrc
中添加一条别名:
alias stc89="stcgal -P stc89 -t 24000 .pio/build/STC89C52RC/firmware.hex"
输入指令后,按提示手动断电上电
当看到“ Disconnected! ”时表明烧录完毕
若提示串口 Permission denied ,尝试运行
sudo chmod 777 /dev/ttyUSB0
增加权限。