Debian 12/13 下使用 SDCC + VSCode 开发 51 单片机完整教程(环境配置)

适用对象 :Linux 新手、嵌入式初学者、想用开源工具开发 STC89C52/AT89S51 等 8051 单片机的爱好者
系统环境 :Debian 12 或 Debian 13(也适用于 Ubuntu 22.04+)
目标 :从零搭建一个 免费、开源、命令行友好 的 51 单片机开发环境


为什么选择 SDCC + VSCode?

  • 完全免费开源:无需 Keil C51 的 2KB 代码限制
  • 跨平台:Linux / Windows / macOS 均可使用
  • 轻量高效:命令行编译 + VSCode 智能提示,无臃肿 IDE
  • 适合学习:理解编译、链接、烧录全过程

第一步:安装开发工具链

1. 安装 SDCC(Small Device C Compiler)

SDCC 是专为 8 位 MCU(如 8051、Z80)设计的 C 编译器。

bash 复制代码
sudo apt update
sudo apt install sdcc sdcc-libraries

sdcc-libraries 包含 8051.hreg51.h 等关键头文件!

验证安装:

bash 复制代码
sdcc --version
# 应输出类似:SDCC 4.2.0 ...

2. 安装 VSCode

bash 复制代码
sudo apt install wget gpg
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
sudo install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg
sudo sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list'
sudo apt update
sudo apt install code

3. 安装烧录工具 stcgal(用于 STC 系列单片机)

由于 Debian 12/13 默认禁止 pip 修改系统 Python,我们使用 pipx 安全安装:

bash 复制代码
# 安装 pipx
sudo apt install pipx

# 配置 PATH
pipx ensurepath

# 重新加载 shell 配置(或关闭终端重开)
source ~/.profile

# 安装 stcgal
pipx install stcgal

验证:

bash 复制代码
stcgal --version
# 应输出:stcgal 1.7.0 或更高

🔌 注意:如果你用的是非 STC 芯片(如 AT89S51),需使用其他烧录工具(如 USBasp + avrdude),本教程以 STC 为例。


第二步:配置串口权限

Linux 默认禁止普通用户访问串口设备。运行以下命令将当前用户加入 dialout 组:

bash 复制代码
sudo usermod -aG dialout $USER

重要-aG 中的 -a 表示"追加",不能省略!否则会移除你所有其他用户组!

然后注销系统并重新登录(或重启),使权限生效。

验证:

bash 复制代码
groups
# 输出中应包含 "dialout"

第三步:创建项目结构

在任意目录创建你的项目,例如:

bash 复制代码
mkdir ~/my-8051-project && cd ~/my-8051-project
mkdir src

项目结构如下:

复制代码
my-8051-project/
├── src/
│   └── main.c
├── Makefile
└── .vscode/
    └── c_cpp_properties.json

第四步:编写示例代码

创建 src/main.c

c 复制代码
#include <8051.h>

void delay_ms(unsigned int ms) {
    unsigned int i, j;
    for (i = 0; i < ms; i++)
        for (j = 0; j < 114; j++);
}

void main(void) {
    P1 = 0x00;  // 初始化 P1 口
    while (1) {
        P1 = ~P1;      // 翻转 P1(如接 LED 会闪烁)
        delay_ms(500);
    }
}

使用 #include <8051.h>(SDCC 官方头文件),也可用 #include <reg51.h>(Keil 兼容)


第五步:配置 VSCode 智能提示(关键!)

在项目根目录创建 .vscode/c_cpp_properties.json

json 复制代码
{
    "configurations": [
        {
            "name": "8051 (SDCC)",
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/share/sdcc/include/mcs51",
                "/usr/share/sdcc/include"
            ],
            "defines": [
                "__SDCC__",
                "__SDCC_mcs51",
                "__sfr=volatile unsigned char",
                "__sbit=volatile unsigned char",
                "__at(x)=",
                "__bit=volatile unsigned char"
            ],
            "compilerPath": "/usr/bin/sdcc",
            "cStandard": "c99",
            "intelliSenseMode": "linux-gcc-x86"
        }
    ],
    "version": 4
}

作用 :让 VSCode 认识 P1__sfr__sbit 等 8051 特有语法,消除"未定义标识符"错误。

保存后,在 VSCode 中按 Ctrl+Shift+P → 输入 "Reload IntelliSense" 刷新。


第六步:编写 Makefile(自动化编译)

在项目根目录创建 Makefile

makefile 复制代码
# Makefile for 8051 with SDCC

TARGET = main
SRC_DIR = src
BUILD_DIR = build
CFLAGS = --model-small --opt-code-speed

$(BUILD_DIR)/$(TARGET).ihx: $(SRC_DIR)/$(TARGET).c
	@mkdir -p $(BUILD_DIR)
	sdcc $(CFLAGS) -o $(BUILD_DIR)/$(TARGET).ihx $<

flash: $(BUILD_DIR)/$(TARGET).ihx
	stcgal -P stc89 -p /dev/ttyUSB0 $(BUILD_DIR)/$(TARGET).ihx

clean:
	rm -rf $(BUILD_DIR)

.PHONY: clean flash

⚙️ 根据你的芯片型号调整 -P 参数:

  • STC89C52 → -P stc89
  • STC12C5A60S2 → -P stc12
  • STC15 系列 → -P stc15

查看所有支持型号:stcgal -L


第七步:编译与烧录

1. 编译项目

bash 复制代码
make

生成文件位于 build/ 目录,主文件为 main.ihx

2. 烧录到单片机

bash 复制代码
make flash

烧录操作流程

  1. 运行 make flash
  2. 终端显示 Waiting for MCU...
  3. 此时给单片机断电 → 再上电(触发 STC ISP 下载模式)
  4. 等待自动烧录完成

硬件连接:

  • USB-TTL 模块 TX → 单片机 RXD (P3.0)
  • USB-TTL 模块 RX → 单片机 TXD (P3.1)
  • 共地(GND 接 GND)

常见问题

如何生成 .hex 文件?

bash 复制代码
packihx build/main.ihx > build/main.hex

参考资源


相关推荐
纪伊路上盛名在2 小时前
在vscode中使用colab的GPU算力
ide·vscode·python·编辑器·开发工具·gpu算力·colab
Joy T2 小时前
【Git 快速实战】VSCode + Git 环境搭建与全流程指令速通指南
ide·git·vscode
三佛科技-187366133972 小时前
FT8433 低成本5V80mA非隔离BCUK方案直接替代KP311ALGA
单片机·嵌入式硬件
ElfBoard3 小时前
ElfBoard技术贴|如何在【RK3588】ELF 2开发板实现GPIO功能复用
linux·人工智能·单片机·嵌入式硬件·物联网·机器人
西城微科方案开发3 小时前
体重电子秤MCU芯片方案
单片机·嵌入式硬件
Rousson13 小时前
硬件学习笔记--93 静电防护方案(电阻、磁珠、电感、TVS等)
笔记·单片机·学习
happyhappy没有句号14 小时前
嵌入式单片机一套通关学习笔记
笔记·单片机·嵌入式硬件·学习
d111111111d15 小时前
STM32外设基地址与寄存器偏移地址的深度解析
笔记·stm32·单片机·嵌入式硬件·学习