Ubuntu 系统下开发 51 单片机
在 Ubuntu 系统下开发 51 单片机(特别是 STC 系列),核心思路是用开源编译器 SDCC 替代 Keil,用 stcgal 替代 STC-ISP。这种方案完全免费、跨平台,且能完美融入 VS Code 等现代编辑器。
以下是从零搭建 Ubuntu 51 单片机开发环境的完整步骤:
🛠️ 第一步:安装核心工具链
打开终端,依次执行以下命令安装编译器和烧录工具:
安装 SDCC 编译器
SDCC 是支持 MCS-51架构的标准 C 编译器。
bash
sudo apt update
sudo apt install sdcc
验证安装:输入 sdcc -v,若显示版本信息则安装成功。
安装 Python 和 pip
stcgal 是基于 Python 的烧录工具。
bash
sudo apt install python3 python3-pip python3-venv
安装 stcgal 烧录工具
建议创建虚拟环境以避免污染系统 Python 库:
bash
python3 -m venv stc_env
source stc_env/bin/activate
pip install stcgal
验证安装输入 stcgal -h,若显示帮助信息则安装成功。
配置串口权限
Ubuntu 默认普通用户无法访问串口,需将当前用户加入 dialout 组:
bash
sudo usermod -a -G dialout $USER
注意:执行完后必须注销并重新登录或重启电脑才能生效。
💻 第二步:编写与编译代码
创建一个测试文件 main.c,内容如下(点亮 P1.0 引脚 LED):
c
#include <8051.h>
void Delay(unsigned int t) {
while (--t);
}
void main(void) {
while (1) {
P1_0 = 0; // 点亮 LED (假设低电平触发)
Delay(50000);
P1_0 = 1; // 熄灭 LED
Delay(50000);
}
}
编译流程:
编译生成 .ihx 文件:
bash
sdcc main.c
转换格式为 .hex(stcgal 需要 hex 格式):
bash
packihx main.ihx > main.hex
🔌 第三步:连接硬件与烧录
连接开发板
将 51 开发板通过 USB 转 TTL 模块(如 CH340)连接到 Ubuntu 电脑。
输入 ls /dev/ttyUSB* 查看串口号,通常显示为 /dev/ttyUSB0。
执行烧录
在终端执行烧录命令(根据芯片型号选择 -P 参数,STC89C52 通常用 stc89a 或 auto):
bash
stcgal -P stc89a -p /dev/ttyUSB0 main.hex
冷启动操作
stcgal 提示 "Waiting for MCU..." 时,先断开开发板电源,再重新上电。这是 STC 单片机进入 ISP 下载模式的必要操作。看到进度条走完即表示烧录成功。
🚀 第四步:提升体验(VS Code 集成)
为了获得类似 Keil 的代码提示和项目管理的体验,推荐在 VS Code 中配置:
安装插件:
C/C++ (Microsoft):提供代码高亮和智能提示。
EIDE (Easy Embedded IDE) 或 Keil Assistant:虽然 EIDE 主要面向 Keil,但可以通过配置任务调用 SDCC。更简单的做法是使用 Task Runner。
配置 .vscode/tasks.json:
实现一键编译和烧录:
json
{
"version": "2.0.0",
"tasks": [
{
"label": "Build & Flash",
"type": "shell",
"command": "sdcc main.c && packihx main.ihx > main.hex && stcgal -P stc89a -p /dev/ttyUSB0 main.hex",
"group": "build",
"presentation": {
"reveal": "always"
},
"problemMatcher": []
}
]
}
配置后,按 Ctrl+Shift+B 即可自动完成编译、格式转换和烧录提示。
⚠️ 常见坑点排查
找不到头文件:SDCC 的头文件路径通常在 /usr/share/sdcc/include/mcs51/,代码中直接写 #include <8051.h> 即可,无需额外配置路径。
烧录失败/超时:检查串口权限是否生效(重启电脑),确认串口号 /dev/ttyUSB0 是否正确,并确保烧录时进行了“断电-上电”冷启动操作。
CH340 驱动问题:Ubuntu 20.04+ 内核通常自带 CH340 驱动。若 lsusb 能看到设备但 ls /dev/ttyUSB* 没有,尝试手动加载驱动:sudo modprobe ch341。
这套环境一旦搭建完成,后续开发只需编写代码、运行一键任务即可,非常适合习惯 Linux 命令行和现代编辑器的开发者。
以下是从零搭建 Ubuntu 51 单片机开发环境的完整步骤:
🛠️ 第一步:安装核心工具链
打开终端,依次执行以下命令安装编译器和烧录工具:
安装 SDCC 编译器
SDCC 是支持 MCS-51架构的标准 C 编译器。
bash
sudo apt update
sudo apt install sdcc
验证安装:输入 sdcc -v,若显示版本信息则安装成功。
安装 Python 和 pip
stcgal 是基于 Python 的烧录工具。
bash
sudo apt install python3 python3-pip python3-venv
安装 stcgal 烧录工具
建议创建虚拟环境以避免污染系统 Python 库:
bash
python3 -m venv stc_env
source stc_env/bin/activate
pip install stcgal
验证安装输入 stcgal -h,若显示帮助信息则安装成功。
配置串口权限
Ubuntu 默认普通用户无法访问串口,需将当前用户加入 dialout 组:
bash
sudo usermod -a -G dialout $USER
注意:执行完后必须注销并重新登录或重启电脑才能生效。
💻 第二步:编写与编译代码
创建一个测试文件 main.c,内容如下(点亮 P1.0 引脚 LED):
c
#include <8051.h>
void Delay(unsigned int t) {
while (--t);
}
void main(void) {
while (1) {
P1_0 = 0; // 点亮 LED (假设低电平触发)
Delay(50000);
P1_0 = 1; // 熄灭 LED
Delay(50000);
}
}
编译流程:
编译生成 .ihx 文件:
bash
sdcc main.c
转换格式为 .hex(stcgal 需要 hex 格式):
bash
packihx main.ihx > main.hex
🔌 第三步:连接硬件与烧录
连接开发板
将 51 开发板通过 USB 转 TTL 模块(如 CH340)连接到 Ubuntu 电脑。
输入 ls /dev/ttyUSB* 查看串口号,通常显示为 /dev/ttyUSB0。
执行烧录
在终端执行烧录命令(根据芯片型号选择 -P 参数,STC89C52 通常用 stc89a 或 auto):
bash
stcgal -P stc89a -p /dev/ttyUSB0 main.hex
冷启动操作
stcgal 提示 "Waiting for MCU..." 时,先断开开发板电源,再重新上电。这是 STC 单片机进入 ISP 下载模式的必要操作。看到进度条走完即表示烧录成功。
🚀 第四步:提升体验(VS Code 集成)
为了获得类似 Keil 的代码提示和项目管理的体验,推荐在 VS Code 中配置:
安装插件:
C/C++ (Microsoft):提供代码高亮和智能提示。
EIDE (Easy Embedded IDE) 或 Keil Assistant:虽然 EIDE 主要面向 Keil,但可以通过配置任务调用 SDCC。更简单的做法是使用 Task Runner。
配置 .vscode/tasks.json:
实现一键编译和烧录:
json
{
"version": "2.0.0",
"tasks": [
{
"label": "Build & Flash",
"type": "shell",
"command": "sdcc main.c && packihx main.ihx > main.hex && stcgal -P stc89a -p /dev/ttyUSB0 main.hex",
"group": "build",
"presentation": {
"reveal": "always"
},
"problemMatcher": []
}
]
}
配置后,按 Ctrl+Shift+B 即可自动完成编译、格式转换和烧录提示。
⚠️ 常见坑点排查
找不到头文件:SDCC 的头文件路径通常在 /usr/share/sdcc/include/mcs51/,代码中直接写 #include <8051.h> 即可,无需额外配置路径。
烧录失败/超时:检查串口权限是否生效(重启电脑),确认串口号 /dev/ttyUSB0 是否正确,并确保烧录时进行了“断电-上电”冷启动操作。
CH340 驱动问题:Ubuntu 20.04+ 内核通常自带 CH340 驱动。若 lsusb 能看到设备但 ls /dev/ttyUSB* 没有,尝试手动加载驱动:sudo modprobe ch341。
这套环境一旦搭建完成,后续开发只需编写代码、运行一键任务即可,非常适合习惯 Linux 命令行和现代编辑器的开发者。
阅读量: 234
发布于:
修改于:
发布于:
修改于: