[编译] 8、在Linux下搭建 stm8 单片机的开发烧写环境(makefile版)
一、SDCC(Small Device C Compiler)编译环境搭建
SDCC是一个小型设备的C语言编译器,该编译器是标准C语言,可以编译Intel MCS51架构的微处理器,也可以编译STM8等常见MCU。我们要在linux上搭建STM8开发环境,首先要搭建SDCC编译环境。
其主页是:http://sdcc.sourceforge.net/ ,下面是SDCC的首页简介:
SDCC is a retargettable, optimizing Standard C (ANSI C89, ISO C99, ISO C11) compiler suite that targets the Intel MCS51 based microprocessors (8031, 8032, 8051, 8052, etc.), Maxim (formerly Dallas) DS80C390 variants, Freescale (formerly Motorola) HC08 based (hc08, s08), Zilog Z80 based MCUs (z80, z180, gbz80, Rabbit 2000/3000, Rabbit 3000A, TLCS-90) and STMicroelectronics STM8. Work is in progress on supporting the Microchip PIC16 and PIC18 targets. It can be retargeted for other microprocessors.
1.1、下载
有两个可供下载的:
- 1) https://sourceforge.net/projects/sdcc/files/ <-- 需要自己编译,有一定难度
- 2) http://sdcc.sourceforge.net/snap.php <-- 编译好的,拿来即用
注: 对于选择拿来即用的兄弟,可以直接跳过1.2节
1.2、编译
如何编译:
./config
可能会出现下面几种错误(我也给出了解决办法):
错误 1 、缺少bison :
configure: error: Cannot find required program bison.
解决方法:
sudo apt-get install flex bison
错误 2 、找不到adjacency_list.hpp
configure: error: boost library not found (boost/graph/adjacency_list.hpp).
解决方法:
sudo apt-get install libboost-date-time-dev libboost-program-options-dev libboost-system-dev libboost-filesystem-dev libboost-iostreams-dev
错误 3 、 没有PIC14、PIC16设备
failed for device/lib/pic14
解决方法:
./configure --disable-pic14-port --disable-pic16-port
1.3、测试
直接下载编译好的需要将其按照说明放入系统bin等文件中,采用编译的会自动将其放入系统bin中。而我比较喜欢不让其和系统的各种东西纠缠在一起,单独放在工程下的一个叫tool的文件里,大不了用的时候输全路径!
如下,我在example目录下建一个makefile和a.c文件,将直接编译好的sdcc文件放在tool下面:
➜ SDCC_WS tree -L 2
.
├── example
│ ├── a.c
│ └── makefile
├── readme.md
└── tool
└── sdcc
其中a.c为 stm8 闪灯程序:
#include "stm8l.h"
int main() {
int d;
// Configure pins
PB_DDR = 0x20;
PB_CR1 = 0x20;
// Loop
do {
PB_ODR ^= 0x20;
for(d = 0; d < 29000; d++) { }
} while(1);
}
makefile为:
SDCC_PATH=../tool/sdcc
z_sdcc=${SDCC_PATH}/bin/sdcc
z_packihx=${SDCC_PATH}/bin/packihx
a.hex:a.c
${z_sdcc} -lstm8 -mstm8 --out-fmt-ihx a.c
${z_packihx} a.ihx > a.hex
clean:
rm -rf *.asm *.lst *.mem *.rst *.lnk *.rel *.sym *.ihx *.hex *.map *.lk *.bin
二、Hex2Bin+命令行烧写工具配置使用
2.1、下载工具安装配置
理论上hex也能烧写,但是hex比bin要大一些,所以我们用这里用bin烧写。hex转bin要用到一个Hex2Bin工具,将其下载下来解压到tool目录下;stm8单片机烧写工具需要用一个github开源软件stm8flash,也将其下载到tool目录下:
➜ stm8_linux_tool git:(master) tree -L 2
.
├── app
│ ├── app_stm8_peri_blinky
│ └── app_stm8_peri_uart
├── bin
├── build
│ ├── makefile
│ └── tools.mk
├── readme.md
└── tool
├── Hex2bin-2.5
├── Hex2bin-2.5.zip
├── sdcc
├── sdcc.zip
└── stm8flash
9 directories, 5 files
将makefile改为:
-include tools.mk
z_sdcc=${SDCC_PATH}/bin/sdcc
z_sdld=${SDCC_PATH}/bin/sdld
z_packihx=${SDCC_PATH}/bin/packihx
z_hex2bin=${HEX2BIN_PATH}/hex2bin
z_stm8flash=${STM8FLASH_PATH}/stm8flash
files_temp=*.asm *.lst *.rst *.rel *.sym *.ihx *.hex *.map *.lk *.bin *.cdb
build:
$(z_sdcc) -lstm8 -mstm8 --out-fmt-ihx $(CFLAGS) $(LDFLAGS) $(APP_PATH)/$(PROJECT)/*.c
${z_packihx} *.ihx > $(PROJECT).hex
${z_hex2bin} $(PROJECT).hex
mv -f $(files_temp) $(BIN_PATH)
clean:
rm -f $(BIN_PATH)/*
flash:
echo "00 00 ff 00 ff 00 ff 00 ff 00 ff" | xxd -r -p > factory_defaults.bin
$(z_stm8flash) -c stlinkv2 -p stm8s103?3 -s opt -w factory_defaults.bin
$(z_stm8flash) -c stlinkv2 -p stm8s103?3 -w $(BIN_PATH)/*.ihx
rm factory_defaults.bin
2.2、编译+烧写
进入 build 目录运行 make build PROJECT=app_stm8_peri_blinky,自动编译:

输入make flash 进行烧写:

注:有些芯片被锁起来了,因此要在 flash 前多加一个解锁的指令:
echo "00 00 ff 00 ff 00 ff 00 ff 00 ff" | xxd -r -p > factory_defaults.bin
$(z_stm8flash) -c stlinkv2 -p stm8s103?3 -s opt -w factory_defaults.bin
最终效果是下面一个 stm8 最小开发板上的红色灯珠快速闪烁:

链接
- 本文 GITHUB 地址:https://github.com/nbtool/stm8_linux_tool
- stm8 PROGRAMMING USING SMALL DEVICE C COMPILER (SDCC):GO
- SDCC WiKi:https://sourceforge.net/p/sdcc/wiki/Home/
- 在Linux下搭建51单片机的开发烧写环境:GO
- Getting started with STM8 Development Tools on GNU/LINUX GO
- How to Program STMicro STM8S $1 Board in Linux GO
- Разработка для STM8 под Linux GO
- Fun and games with the STM8 on Linux GO
- stm8af5288: Can't flash GO
: ** 我做了一系列全自动构建编译环境的工程,目前可以覆盖:51单片机、stm8、esp8266、esp32、nrf51822、nrf52832、android,欢迎到我的 nbtool github 下交流:https://github.com/nbtool **

[编译] 8、在Linux下搭建 stm8 单片机的开发烧写环境(makefile版)的更多相关文章
- [编译] 3、在Linux下搭建51单片机的开发烧写环境(makefile版)
星期二, 10. 七月 2018 01:01上午 - beautifulzzzz 一.SDCC(Small Device C Compiler)编译环境搭建 SDCC是一个小型设备的C语言编译器,该编 ...
- 单片机成长之路(51基础篇) - 006 在Linux下搭建51单片机的开发烧写环境
在Linux下没有像keli那样好用的IDE来开发51单片机,开发环境只能自己搭建了. 第一步:安装交叉编译工具 a) 安装SDCC sudo apt-get install sdcc b)测试SDC ...
- [编译] 7、在Linux下搭建安卓APP的开发烧写环境(makefile版-gradle版)—— 在Linux上用命令行+VIM开发安卓APP
April 18, 2020 6:54 AM - BEAUTIFULZZZZ 目录 0 前言 1 gradle 安装配置 1.1 卸载系统默认装的gradle 1.2 下载对应版本的二进制文件 1.3 ...
- [编译] 5、在Linux下搭建安卓APP的开发烧写环境(makefile版)—— 在Linux上用命令行+VIM开发安卓APP
星期三, 19. 九月 2018 02:19上午 - BEAUTIFULZZZZ 0)前言 本文不讨论用IDE和文本编辑器开发的优劣,是基于以下两点考虑去尝试用命令行编译安卓APP的: 了解安卓APP ...
- [编译] 9、在Linux下搭建 nordic 最新基于 zephyr 的开发烧写环境
目录 前言 1.概述 2.安装工具 3.获取 nRF Connect SDK 源码 4.安装 Python modules 5.安装 toolchain 6.下载 nRF Command Line T ...
- Linux 下搭建jsp服务器(配置jsp开发环境)
Linux 做为服务器的高效一直时为人所熟知的了,在linux 上搭建各种各样的服务器和开发环境也时学计算机的人常做的.以下时最近在linux配置jsp服务器的全过程,包含一些基本步骤和排错过程: 1 ...
- [编译] 4、在Linux下搭建nRF51822的开发烧写环境(makefile版)
星期日, 09. 九月 2018 07:51下午 - beautifulzzzz 1.安装步骤 1) 从GNU Arm Embedded Toolchain官网下载最新的gcc-arm工具链,写文章时 ...
- 在Linux下搭建nRF51822的开发烧写环境(makefile版)
http://www.qingpingshan.com/m/view.php?aid=394836
- Linux下搭建 Cocos2d-x-2.1.4 编译环境
[tonyfield 2013.09.04 ] 参考 Linux下搭建 Cocos2d-x-2.1.4 编译环境 导入 HelloCpp 例程 1. Java 入口 HelloCpp.java Hel ...
随机推荐
- LTDC_DMA2D驱动实验
STM32F429芯片使用LTDC.DMA2D.及RAM存储器,构成了一个完整的液晶控制器.LTDC负责不断刷新液晶屏(将数据从显存搬运到液晶屏),DMA2D用于图像数据搬运.混合及格式转换(将数据搬 ...
- 【题解】Luogu P1011 车站
题目描述 火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上.下车,但上.下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人.从第3站起( ...
- Jenkins+Github+Nginx实现前端项目自动部署
前言 最近在搭建一个自己的网站,网站框架搭好了要把项目放到服务器运行,但是每次更新网站内容就要手动部署一次,实在很麻烦,于是就想搭建一套自动化部署的服务.看了一些案例最后选用现在比较主流的Jenkin ...
- 50、django工程(ajax)
50.1.ajax介绍: 1.ajax是在不跳转当前url地址的情况偷偷的往后台发送数据做增删改数据的操作,如果成功返回结果刷新当前页面,失败则提醒, 使用 id 或 name 属性. 2.模态对话框 ...
- 10.8、mysql日志
mysql生成或相关联的日志文件种类繁多,这里重点关注与mysql数据库服务相关 的几类日志文件: 1.错误日志: 记录mysql服务进程mysql的在启动/关闭/运行过程中遇到的错误信息: [mys ...
- ps 快速去掉不需要的部分
1.打开图片---使用套索工具将不需要的圈起来----右键填充--直接点击确定就可以了
- filebeat 提取获取massage字段 利用pipeline grok 7.12
嘴巴会说(情商)比技术有时候更重要! 水平有限,希望你看完有所收获! 背景 1,filebeat直连Elasticsearch,需要对massage提取一些特定的字段. 2,如果你对数据需要处理的比较 ...
- MySQL 数据库恢复一张表中的数据
如果使用 mysqldump -uroot -p123 user > test.sql备份了user数据库中的所有数据,但是当前只想要恢复该数据库的某张表数据,该怎么处理呢? 已知恢复整个数据库 ...
- ios关键字
self:类似JAVA中的this指针,是隐藏参数,指向当前调用方法的类 super:调用父类的方法 if(self=[super init]),是一种通用写法,赋值并测零是为了防止超类在初始化过程中 ...
- abp知识
领域驱动开发的特点:1.分层更多,前期代码量大,后期维护方便2.业务进行了专业的领域划分,业务逻辑更加清晰,便于业务扩展.3.代码工程高内聚,更加精简.4.主要是解决复杂业务逻辑编写问题 为什么要使用 ...