Linux系统下51单片机开发环境配置
因为现在使用linux的桌面系统进行办公,用虚拟机或者装双系统切换着实不方便。
需要的工具
sdcc
#51mcu等各种较老式的mcu的c语言编译器
#我使用的是deepin linux
sudo apt install sdcc #可能版本不是最新的但是对市面上的51系列单片机够用
#还可以自己下载编译,但是不推荐,总会有点解决不了的小问题
http://sdcc.sourceforge.net/snap.php#Linux
stcgal
#一个python编写的程序烧写器
#最好在root中安装这个包
sudo pip3 install stcgal
#这个工具有点小问题,待会再说
头文件位置
#如果用apt 下载的sdcc
#头文件在
/usr/share/sdcc/mcs51
使用的时候调自己手里51单片机的型号就行,不知道就用<mcs51/8052.h>这个通用兼容的头文件就行
c文件编写
#include<mcs51/8052.h>
void main(){
//寄存器位的赋值还有中断函数与keil不太一样,但是差别不大,编写的时候查百度就行
P2_0 = 0;
while(1);
}
编译
sdcc main.c
#产生的烧录文件
main.ihx
烧录
sudo python3 -m stcgal -P stc89 /home/username/main.ihx [-b 115200] 传输波特率可选设置默认 19200
#有些51单片机到这会出问题
配置中可能会出现的挫折
1.ch340驱动问题
检查你的系统ch340驱动是否没问题(之前确保你的数据线没问题)
ls /dev/tty* | grep USB0
#出现 ttyUSB0 说明驱动好使
#啥都没有说明驱动有问题
有些版本的linux中,没有ch340的驱动,系统无法识别你开发板usb接口
下载驱动包
https://www.wch.cn/download/CH341SER_LINUX_ZIP.html
先不要着急编译,这里的c文件只支持到3.几的版本,其实我们只需要的是其中的makefile文件
再到
https://elixir.bootlin.com/linux/v5.10.113/source/drivers/usb/serial/ch341.c
中找到你系统内核版本的ch341.c文件
uname -r 可以查到内核版本
将找到的ch341.c内容 复制到驱动包中 改名为ch34x.c 将原来的ch34x.c替换。
到驱动包中,编译并加载内核
sudo make
sudo make load
查看内核是否加载成功
lsmod | grep ch
#出现 ch34x 的字样就是成功了
再查看驱动是否安装成功
ls /dev/tty* | grep USB0
ttyUSB0
2.stcgal问题
当你进行烧录的时候
sudo python3 -m stcgal -P stc89 /home/username/main.ihx
一直在等待上电重启
Waiting for MCU, please cycle power:
或使用默认类型时
sudo python3 -m stcgal /home/username/main.ihx
出现
Waiting for MCU, please cycle power: done
Protocol detected: stc89
Protocol error: packet checksum mismatch
Disconnected!
不要怕,这不是你差步骤或者别的问题,是stcgal的问题
查了很多是 BSL version的问题,虽然我也不知道这个是个什么东西但是只有下一个有stc89a类型的stcgal就解决了
git clone https://github.com/nrife/stcgal.git
再用这个 git下来的包中的stcgal.py来指定stc89a这个类型
sudo python3 stcgal.py -P stc89a /home/username/main.ihx
你的第一linux下写的51程序就烧好了!!!