Ubuntu下使用PlatformIO开发STC89/STC12/Arduino
安装VSCode
从 https://code.visualstudio.com/Download 下载最新的 deb 版, 通过命令行安装
sudo apt install ./code_1.59.0-1628120042_amd64.deb
VSCode配置
调整目录树缩进
默认的缩进是8px, 不容易区分不同层级的目录, 需要调整为16px, 在 settings 里, Workbench -> Appearance, Tree:Indent, 可以直接搜索 tree 找到.
增加当前行高亮
在settings中增加配置
"editor.renderLineHighlight": "line",
"workbench.colorCustomizations": {
"editor.lineHighlightBackground": "#000000",
"editor.lineHighlightBorder": "#333333"
}
安装Idea键位插件
IntelliJ IDEA Keybindings: https://marketplace.visualstudio.com/items?itemName=k--kato.intellij-idea-keybindings
安装完
- 可以使用IDEA风格的
Ctrl
+W
选择键 - 关闭标签页是
Ctrl
+F4
- 使用
Alt
+o
在C语言中切换源文件与头文件 - 开关下方的消息栏
Ctrl
+j
修改快捷键
点击左下角的设置, 点击键盘快捷键, 在界面中设置
- 前进 Go Back: 默认
Ctrl
+Alt
+-
, 修改为Alt
+,
- 后退 Go Forward: 默认为
Ctrl
+Alt
++
, 修改为Alt
+.
安装PlatformIO
- 直接在VSCode的插件中查找PlatformIO并安装
- 安装完成后, 还需要等待PlatformIO安装完PlatformIO Core
- 直接安装大概率失败. 要到VSCode Settings-> Application -> Proxy 下配置HTTP代理, 例如
http://127.0.0.1:1081
- 不能用socks5, 因为安装过程中使用python, 会报没有socks支持的错误
- 直接安装大概率失败. 要到VSCode Settings-> Application -> Proxy 下配置HTTP代理, 例如
- Core安装完之后, 在底部状态栏就会出现一个Home图标
- 点击图标会打开PIO Home,
- 这时候左侧会出现PIO自己的菜单, 里面点Platforms
- 会列出Installed, Embedded, Desktop, Frameworkds等
MCS51/STC51项目
准备环境
在PIO Home里点击Platforms, 点击Embedded会列出可用的类型, 里面选择Intel MCS51, 点击Install, 这个下面会有STC系列的芯片
安装完之后会弹出提示, 实际的安装路径是 ~/.platformio/packages/ 下的toolchain-sdcc和tool-stcgal
Platform Manager: Installing intel_mcs51
Platform Manager: intel_mcs51 @ 1.2.3 has been installed!
Tool Manager: Installing platformio/toolchain-sdcc @ ~1.30804.10766
Downloading...
Tool Manager: toolchain-sdcc @ 1.30804.10766 has been installed!
Tool Manager: Installing platformio/tool-stcgal @ ~1.104.0
Tool Manager: tool-stcgal @ 1.104.0 has been installed!
The platform 'intel_mcs51' has been successfully installed!
The rest of the packages will be installed later depending on your build environment.
这里用的SDCC还是3.8.4, 比较旧. 最新的已经4.1.0了
增加对STC其他型号的支持
需要增加自定义Board, 其配置文件位置为/home/milton/.platformio/platforms/intel_mcs51/boards
, 在这里可以添加自定义的Board, 例如新建stc89c516rd.json, 写入下面的内容, 就添加了对stc89c516rd的支持.
STC89C516RD+
- Flash: 61K
- RAM: 256 + 1024
- 与 HML_FwLib_STC89 一起使用时要将 config.h 中的
#define __CONF_COMPILE_ISP 1
设为0, 因为这个型号没有EEPROM, 所以ISP功能无效
{
"build": {
"f_cpu": "11059200",
"size_iram": 256,
"size_xram": 1024,
"size_code": 62464,
"size_heap": 128,
"mcu": "stc89c516rd",
"cpu": "mcs51"
},
"frameworks": [],
"upload": {
"maximum_ram_size": 1280,
"maximum_size": 62464,
"protocol": "stcgal",
"stcgal_protocol": "stc89",
"protocols": [
"stcgal"
]
},
"name": "Generic STC89C516RD",
"url": "https://www.stcmicro.com/stc/STC89C516RD.html",
"vendor": "STC"
}
STC12C5A56S2
- Flash: 56K
- RAM: 256 + 1024
{
"build": {
"f_cpu": "11059200",
"size_iram": 256,
"size_xram": 1024,
"size_code": 57344,
"size_heap": 128,
"mcu": "stc12c5a56s2",
"cpu": "mcs51"
},
"frameworks": [],
"upload": {
"maximum_ram_size": 1280,
"maximum_size": 57344,
"protocol": "stcgal",
"stcgal_protocol": "stc12",
"protocols": [
"stcgal"
]
},
"name": "Generic STC12C5A56S2",
"url": "https://www.stcmicro.com/stc/stc12c5a32s2.html",
"vendor": "STC"
}
STC12C5A60S2
- Flash: 60K
- RAM: 256 + 1024
{
"build": {
"f_cpu": "11059200",
"size_iram": 256,
"size_xram": 1024,
"size_code": 61440,
"size_heap": 128,
"mcu": "stc12c5a60s2",
"cpu": "mcs51"
},
"frameworks": [],
"upload": {
"maximum_ram_size": 1280,
"maximum_size": 61440,
"protocol": "stcgal",
"stcgal_protocol": "stc12",
"protocols": [
"stcgal"
]
},
"name": "Generic STC12C5A60S2",
"url": "https://www.stcmicro.com/stc/stc12c5a32s2.html",
"vendor": "STC"
}
新建项目
注意workspace如果不用默认的, 要自己选一下, 选择board的时候用stc关键词可以搜到STC相关的芯片.
项目目录结构
默认的目录结构如下, 包含第三方库的结构
|--.pio
| |--build
| |--<...> 与项目同名的目录, 这里放的是编译产生的文件
|--.vscode
| |--c_cpp_properties.json 这个文件,在每次启动vscode打开项目的时候由PlatformIO更新
| |--...
|
|--include 这里放置项目的头文件
|
|--lib 这里放置其它lib, 默认情况下,lib的c文件和h文件必须在根目录或src目录下才会自动被扫描并包含和编译
| |
| |--Bar
| | |--docs
| | |--examples
| | |--src
| | |- Bar.c
| | |- Bar.h
| | |- library.json (如果c文件和h文件不在默认目录, 就需要这个文件) https://docs.platformio.org/page/librarymanager/config.html
| |
| |--Foo
| | |- Foo.c
| | |- Foo.h
|
|- platformio.ini 这个是项目的关键文件, 用来设置platform,board,build_flags等信息
|
|--src 这里放置项目的c文件
|- main.c
其中要注意的几点:
- c_cpp_properties.json 并不会随着platformio.ini的修改而更新, 而是每次在启动vscode,在打开PIO的Home界面时更新, 如果误删或误改此文件, 需要重新打开VSCode
- 这个文件只会影响到界面上的渲染, 包括错误提示, 和编译无关. 可能这里报红但是编译OK, 也可能这里OK但是编译出错
- 编译只与platformio.ini和lib//library.json有关, 这个修改完立即生效
- 如果lib/这个项目, 其源文件和头文件都在根目录或者都在src目录下, 那么PIO会自动扫描并自动组织源文件编译
- 如果不是上述的情况, 就要在lib/下编写一个library.json文件, 用来告诉PIO这个项目的源文件和头文件都在哪里, 这样PIO才会组织源文件编译
STC89/STC90/STC10/STC11项目
这些项目对应的可以添加HML_Fwib_STCxx封装库, 地址为
- https://github.com/MCU-ZHISHAN-IoT/HML_FwLib_STC89
- https://github.com/MCU-ZHISHAN-IoT/HML_FwLib_STC90
- https://github.com/MCU-ZHISHAN-IoT/HML_FwLib_STC10
- https://github.com/MCU-ZHISHAN-IoT/HML_FwLib_STC11
将封装库添加到项目
以添加 HML_FwLib_STC89 库为例, 有两种方式
方式一
简单的方法, 就是直接把头文件和源文件都合到src目录下, 在lib/HML_FWLib_STC89目录里, 将inc下的hml目录移动到项目src 目录下, 这样编译时就会自动编译下面的c文件.
方式二
将项目git clone到lib目录下, 在lib/HML_FWLib_STC89下建立library.json, 写入以下内容
{
"name": "hml_fwlib_stc89",
"version": "0.0.0",
"build": {
"srcDir": "src",
"includeDir": "inc"
}
}
这样也能让PIO识别这个库的头文件和源文件
添加编译参数
因为 HML_FWLib_STC89 这个库编译时需要额外的参数, 可以通过配置 platformio.ini 添加. 增加build_flags. 因为没有Makefile, 所以与封装库文档中的flag不同, 这里的flag名称是最终作用到编译参数上的名称, 这样编译就不会有warning了.
[env:stc89c52rc]
platform = intel_mcs51
board = stc89c52rc
build_flags =
-D__CONF_FRE_CLKIN=11059200
-D__CONF_MCU_PRESCALER=12
-D__CONF_MCU_MODEL=MCU_MODEL_STC89C52RC
添加烧录参数
board设置的默认upload方式为stcgal, 默认的波特率是 19200, 如果想让烧录速度快一点, 可以添加upload参数
upload_speed = 115200
upload_flags =
-b$UPLOAD_SPEED
使编辑器支持 __sfr
默认配置下, 编辑器不能识别SDCC MCS51的__sfr关键字, 会提示错误, 这时候可以通过在main.c添加lint.h头文件解决
#include "lint.h"
参考 https://github.com/microsoft/vscode-cpptools/issues/2499
编译
- 可以点击底部状态栏的勾号, 这个是编译
- 也可以通过点左侧的PlatformIO图标, 然后点Build
- 编译的时候会区分env, 这个要注意
- 如果想看到详细的编译输出, 点开Advanced, 点击Verbose Build
正常输出
Processing stc12c5a56s2 (platform: intel_mcs51; board: stc12c5a56s2)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/intel_mcs51/stc12c5a56s2.html
PLATFORM: Intel MCS-51 (8051) (1.2.3) > Generic STC12C5A56S2
HARDWARE: STC12C5A56S2 11MHz, 1.25KB RAM, 56KB Flash
PACKAGES:
- tool-stcgal 1.104.0 (1.4)
- toolchain-sdcc 1.30804.10766 (3.8.4)
LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 1 compatible libraries
Scanning dependencies...
Dependency Graph
|-- <hml_fwlib_stc11> 0.0.0
Building in release mode
Checking size .pio/build/stc12c5a56s2/firmware.hex
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
Flash: [ ] 4.6% (used 2655 bytes from 57344 bytes)
烧录
将USB2TTL连接好后, 点击底部状态栏的 右箭头 图标, 就会开始烧录, 同样需要手动操作开关的过程. 输出如下(这个是默认的19200波特率配置)
Configuring upload protocol...
AVAILABLE: stcgal
CURRENT: upload_protocol = stcgal
Looking for upload port...
Auto-detected: /dev/ttyUSB0
Uploading .pio/build/stc12c5a56s2/firmware.hex
Cycling power: done # 到这一步断电/加电
Waiting for MCU: done
Target model:
Name: STC12C5A56S2
Magic: D17C
Code flash: 56.0 KB
EEPROM flash: 6.0 KB
Target frequency: 11.035 MHz
Target BSL version: 6.6I
Target options:
reset_pin_enabled=True
low_voltage_reset=False
oscillator_stable_delay=32768
por_reset_delay=long
clock_gain=high
clock_source=external
watchdog_por_enabled=False
watchdog_stop_idle=True
watchdog_prescale=256
eeprom_erase_enabled=False
bsl_pindetect_enabled=False
Loading flash: 2655 bytes (Intel HEX)
Switching to 19200 baud: testing setting done
Erasing 12 blocks: done
Writing 3072 bytes: ........................ done
Finishing write: done
Setting options: done
Target UID: 000300E155111B
Disconnected!
========================================== [SUCCESS] Took 23.10 seconds ================
中间如果有提示
Warning! Please install `99-platformio-udev.rules`.
More details: https://docs.platformio.org/page/faq.html#platformio-udev-rules
说明没有在/etc/udev/rules.d/下放置这个rule, 根据文档提示去下载放到这个目录下
Or add user to group
# Ubuntu
sudo usermod -a -G dialout $USER
# Manjaro
sudo usermod -a -G uucp $USER
STC12项目
STC12C5A60S2系列的MCU, 对应的封装库为 https://github.com/IOsetting/HML_FwLib_STC12 ,
项目中已经带了library.json, 可以直接集成至PlatformIO项目. 其他的方面和STC89-STC11是一样的
Arduino项目
新建项目, 选择项目目录, 在board里搜索nano 328 new bootloader
, 点击创建后, 会自动下载需要的插件
提示Arduino.h找不到avr/pgmspace.h
这个头文件实际上在~/.platformio/packages/toolchain-atmelavr/avr/include/
下面, 此时编译是可以正常编译的, 只是在VSCode里展示会提示错误. 要解决这个错误提示, 需要加到platformio.ini里面, 加上lib_deps
如下, 然后在项目文件浏览下的.pio/libdeps中就会出现这些头文件.
[env:nanoatmega328new]
platform = atmelavr
board = nanoatmega328new
framework = arduino
lib_deps =
/home/milton/.platformio/packages/toolchain-atmelavr/avr/include/
Ubuntu下使用PlatformIO开发STC89/STC12/Arduino的更多相关文章
- ubuntu下安装stm32开发环境
在windowns下开发stm32刚开始学最烦的就是创建工程模板,都不知道为什么要那样设置,而且步骤繁多.现在我告诉大家一个好消息,在linux下配置stm32开发环境包括创建工程,使用JLink仿真 ...
- Ubuntu下的PHP开发环境架设
Ubuntu下的PHP开发环境架设 今天重新装了ubuntu那么就吧过程记录下. 打开终端,也就是命令提示符. 我们先来最小化组建安装,按照自己的需求一步一步装其他扩展.命令提示符输入如下命令: ...
- ubuntu下安装 openssl 开发库
ubuntu下安装 openssl 开发库 检查是否已安装openssl: sudo apt-get install openssl 如果已安装执行以下操作:sudo apt-get install ...
- ubuntu下搭建JAVA开发环境【转】
转自:http://jingyan.baidu.com/article/86fae346b696633c49121a30.html JAVA开发环境是一种跨平台的程序设计语言,可以在windows.L ...
- 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)
. 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...
- ubuntu下搭建android开发环境之超顺畅模拟器
如果说android系统的卡,像耳边蚊子让人抓狂,那么android模拟器的卡,那就像午睡时的苍蝇.大概就是一样的恶心~~ 那么,这样的问题对于开发者肯定忍无可忍,我也一样,虽然我还没有入门,但我也一 ...
- 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解
. 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...
- 在ubuntu下设置eclipse开发STM32等嵌入式设备
之前为了能够让ROS与底层能够顺利通讯,我采用可开源开发板arduino ,因为arduino有ROS的库,能够按照ROS wiki上所给的教程就可以顺利的开发,但由于arduino的局限性,我觉得是 ...
- Fedora和Ubuntu下安装OpenGL开发环境配置
Fedora下OpenGl开发环境配置 开发OpenGL工程需要3个库文件和对应的头文件: libglut.so,libGLU.so,libGL.so, gl.h ,glu.h, glut.h 这些库 ...
- Ubuntu下搭建java开发环境
JDK安装: 1. 在http://www.oracle.com/technetwork/java/javase/downloads/index.html上下载相应版本的JDK环境,这里我使用的是jd ...
随机推荐
- Angular系列教程之父子组件通信详解
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- git添加被.gitignore忽略的文件
技术背景 在git操作中,有时候为了保障线上分支的简洁性,会在.gitignore文件中屏蔽一些关键词,比如可以加一个*.txt来屏蔽掉项目中所有带txt后缀的文件,还可以加上*test*来屏蔽所有的 ...
- 4. Oracle数据库提示ERROR: ORA-12560: TNS: 协议适配器错误
问题如下 造成ORA-12560: TNS: 协议适配器错误的问题的原因有两个: 有关服务没有启动 windows平台个一如下操作:开始-程序-管理工具-服务,打开服务面板,启动TNSlistener ...
- Oracle12c On 银河麒麟v10SP3 的安装过程
Oracle12c On 银河麒麟的安装过程 学习官网资料 下载最新版的preinstall文件 https://yum.oracle.com/repo/OracleLinux/OL8/appstre ...
- 基于OpenJDK部署clickhouse-local镜像的快捷方法
基于OpenJDK部署clickhouse-local镜像的快捷方法 摘要 前期搭建了一套基于OpenJDK的Clickhouse的服务端的镜像 可以简单使用dbeaver进行连接与使用. 后来发现需 ...
- [转帖]CentOS7使用Chrony实现时间同步
学习安装部署 ceph 时 ,在添加 mon 时报错了,搜索原因后发现是 时间同步问题.于是学习一下时间同步工具. 一般CentOS6 使用的时间同步工具是ntp.现在还有不少开源软件文档建议安装的时 ...
- Booking.com如何在毫秒内搜索数百万个地点
译自:How Booking.com Searches Through Millions of Locations in Milliseconds Booking.com是一家与酒店.旅馆.度假租赁等 ...
- 爬虫逆向基础,认识 SM1-SM9、ZUC 国密算法
关注微信公众号:K哥爬虫,QQ交流群:808574309,持续分享爬虫进阶.JS/安卓逆向等技术干货! [01x00] 简介 国密即国家密码局认定的国产加密算法,爬虫工程师在做 JS 逆向的时候,会遇 ...
- docker的架构及工作原理(详解)
目录 一.docker架构图 二.Client 客户端 三.Host 主机(docker引擎) 四.Image 镜像 五.Container 容器 六.镜像分层 可写的容器层 七.Volume 数据卷 ...
- Prompt工程师指南[高阶篇]:对抗性Prompting、主动prompt、ReAct、GraphPrompts、Multimodal CoT Prompting等
Prompt工程师指南[高阶篇]:对抗性Prompting.主动prompt.ReAct.GraphPrompts.Multimodal CoT Prompting等 1.对抗性 Prompting ...