目录

前面介绍了在Windows的Keil5环境下使用FwLib_STC8, 以下介绍在Linux(本文使用Ubuntu20.04)的VSCode下的环境搭建

配置VSCode开发环境运行演示用例

前提

  • 已经安装完VSCode + PlatformIO环境, 并配置好MCS-51 Platform, 如果未完成, 请自行搜索网上的教程和说明
  • 本机已安装git

频率设定和参数准备

因为当前在Linux下不能通过烧录工具调整芯片的内置RC时钟频率, 所以芯片的时钟调整要用其它方法

  • 最简单直接的方式, 是在Windows下用STC-ISP将芯片设置到目标频率, 这种方式将来要修改频率时, 需要再次用STC-ISP进行修改
  • 如果希望将来在Linux下调整无需使用STC-ISP, 则在STC-ISP烧录时, 勾选最后一项"在程序区结束处添加重要测试参数", 这些参数记录了出厂时对芯片这些频率的标定, 在程序中将这部分参数读出, 今后要使用哪个频率就可以直接设置成对应的频率
    • 代码参考 demo/tim/timer0_print_cpuid.c
  • 对于版本为7.4.4U以上的芯片, 各频率参数已经固化到CHIPID只读地址, 可以直接读取
    • 代码参考 demo/mem/mem_read_chipid.c
  • 无Windows环境的情况, 可以通过代码动态调整标定(较不精确), 或者通过示波器标定(精确)

对于第二, 第三, 第四种情况, 需要得到以下4个值, 下面配置项目时会用到:

  • IRCBAND: 频段编号, 取值范围为[0x00, 0x11], 对于STC8G和STC8H1K, 因为只有两个频段, 所以取值为[0x00, 0x01]
  • VRTRIM: 对应频段的电压标定值
  • ITRIM: 对应频段并对应目标频率的裁剪值, 以上三个参数联用就可以确定一个时钟频率
  • LITRIM: 对上面三个参数产生的时钟频率的微调

在PlatformIO中添加STC8G,STC8H对应的Board

因为PlatformIO的MCS-51中只包含很少的几种board, 需要预先添加. 对应STC8G, STC8H的board配置可以从这里下载 platform-intel_mcs51/tree/contrib-snovotill/boards.

将这些json都放到你本地PlatformIO对应MCS-51的boards目录下去, 默认路径为用户home目录下的 .platformio/platforms/intel_mcs51/boards 目录, 如图

1. 在VSCode中创建项目

打开VSCode, 在下方点击PlatformIO图标, 打开PlatformIO首页

点击 New Project 打开新项目对话框

在对话框中依次填写

  1. Name: 填写项目名称
  2. Board: 选择芯片型号
  3. Framework: 对于MCS-51, 这一项是空白
  4. Location: 选择项目目录, 如果不使用默认目录, 则取消勾选, 自己选择路径
  5. 点击Finish创建项目

期间会弹出对话框问是否信任此目录下所有文件的作者, 选择"Yes"

项目创建完成后, 可以看到项目的目录结构

.
├── include # 项目的头文件路径
├── lib # 项目用到的库文件, FwLib_STC8将放到这个目录下
├── src # 项目的源文件, 项目代码都放到这里
└── test # 项目的测试文件

右侧则是对应当前环境的配置信息

2. 导入FwLib_STC8封装库

在lib上右键, 点击Open Containing Folder, 打开文件夹

在lib文件夹下, 注意路径别错了, 右键点击Open In Terminal, 或者直接Ctrl + Alt + T打开命令行, 直接cd到这个路径下也可以,

执行git命令将项目克隆到当前路径

# github
git clone https://github.com/IOsetting/FwLib_STC8.git FwLib_STC8
# 或者giteee
git clone https://gitee.com/iosetting/fw-lib_-stc8.git FwLib_STC8

回到VSCode, 可以看到 lib 目录下已经多了 FwLib_STC8 这个目录, 并且能看到里面的.h和.c文件. PlatformIO 会根据封装库里的 library.json 将封装库自动配置到项目里

3. 编译演示用例

在项目树中, 浏览路径 FwLib_STC8/demo/uart, 选择uart1_timer1_tx.c, 这是用Timer1做串口1的波特率发生器的演示代码, 右键点击 Copy,

再到 src 上方右键点击 Paste, 将代码复制到项目代码目录

下面配置编译参数, 打开paltformio.ini, 在下面添加参数,

添加之后的内容为

[env:stc8h3k32s2]
platform = intel_mcs51
board = stc8h3k32s2
build_flags =
-D__CONF_FOSC=36864000UL
-D__CONF_MCU_MODEL=MCU_MODEL_STC8H3K32S2
-D__CONF_CLKDIV=0x02
-D__CONF_IRCBAND=0x03
-D__CONF_VRTRIM=0x19
-D__CONF_IRTRIM=0x28
-D__CONF_LIRTRIM=0x00
upload_protocol = custom
upload_port = /dev/ttyUSB0
upload_speed = 1152000
upload_flags =
-p$UPLOAD_PORT
-s$UPLOAD_SPEED
-e
upload_command = ${platformio.packages_dir}/tool-stc8prog/stc8prog $UPLOAD_FLAGS -f $SOURCE

对以上编译参数的说明

  • build_flags 是编译时传入的编译参数
  • __CONF_FOSC 是芯片运行时的时钟频率, 36864000UL 代表36.864MHz, 如果使用STC-ISP设定, 需要与设定的值一致
  • __CONF_MCU_MODEL 是芯片型号, 如果不是STC8H3K32S2, 则到include/conf.h 中查找对应的型号
  • __CONF_CLKDIV 分频系数, 系统时钟是 FOSC经过分频系数分频后的结果, 默认填0表示不分频
  • __CONF_IRCBAND=0x03 以下四个参数都是前面准备阶段需要准备的频率设定值, 如果使用STC-ISP设定, 这四个参数可以不加
  • __CONF_VRTRIM=0x19
  • __CONF_IRTRIM=0x28
  • __CONF_LIRTRIM=0x00

对以上烧录参数的说明

  • upload_protocol 烧录协议, 因为stcgal无法烧录stc8g, stc8h, 这里设置为 custom, 表示使用自定义的烧录工具
  • upload_port 端口, 连接芯片的USB2TTL对应的串口
  • upload_speed 下载使用的波特率
  • upload_flags 下载时使用的参数 -e 表示擦除
  • upload_command 下载使用的完整命令

此时就可以进行编译了, 点击左侧的PlatformIO图标, 然后点击导航栏中的PROJECT TASKS -> stc8h3k32s2(这里根据你的环境命名可能会不同) -> General -> Build

如果最后显示 SUCCESS, 就表示编译成功

4. 通过 stc8prog 将固件烧录到芯片

前往 stc8prog 的发布页stc8prog/releases下载最新版并解压出 stc8prog 可执行文件. 浏览到自己的PlatformIO的packages安装目录, 默认为用户home目录下的 .platformio/packages 目录.

在下面创建目录 tool-stc8prog, 并将刚才得到的 stc8prog 可执行文件复制到这个目录下

回到VSCode, 就可以执行烧录任务了.

连接好USB2TTL和芯片, 点击左侧PlatformIO图标, 点击导航栏中的 PROJECT TASKS -> stc8h3k32s2(这里根据你的环境命名可能会不同) -> General -> Upload, 待下方出现等待提示后对芯片重新上电, 就会开始下载.

下载完成后就会自动运行, 通过串口工具CuteCOM, 或者命令行screen /dev/ttyUSB0 115200, 使用8bit波特率115200连接, 可以观察到每隔1秒输出的"T41U string"

5. 运行其它演示用例

如果要运行其它演示用例, 则删除include和src目录下的文件, 再将需要运行的演示用例文件复制到src目录, 按上面的步骤进行编译和烧录即可

PlatformIO 的多环境配置

PlatformIO支持同时配置多个环境, 各环境使用不同的芯片和参数, 并设置其中一个为默认环境, 用快捷键可以直接对默认环境进行编译和烧录, 这点比Keil5要方便很多.

platformio.ini的多环境配置示例如下, 这里配置了两个环境, 一个是stc8h3k32s2芯片的stc8h3k32s2_36m840hz, 另一个是stc8h1k08的stc8h1k08_36m840hz, 并将stc8h3k32s2_36m840hz设置成了默认环境. 在开发中, 可以直接用快捷键Ctrl + F9 唤起编译, 用快捷键 Ctrl + Alt + U 唤起烧录.

[platformio]
default_envs = stc8h3k32s2_36m840hz [env:stc8h3k32s2_36m840hz]
platform = intel_mcs51
board = stc8h3k32s2
build_flags =
;--opt-code-size
-D__CONF_FOSC=36864000UL
-D__CONF_MCU_MODEL=MCU_MODEL_STC8H3K32S2
-D__CONF_CLKDIV=0x02
-D__CONF_IRCBAND=0x03
-D__CONF_VRTRIM=0x19
-D__CONF_IRTRIM=0x28
-D__CONF_LIRTRIM=0x00
upload_protocol = custom
upload_port = /dev/ttyUSB0
upload_speed = 1152000
upload_flags =
-p$UPLOAD_PORT
-s$UPLOAD_SPEED
-e
upload_command = ${platformio.packages_dir}/tool-stc8prog/stc8prog $UPLOAD_FLAGS -f $SOURCE [env:stc8h1k08_36m840hz]
platform = intel_mcs51
board = stc8h1k08
build_flags =
-D__CONF_FOSC=36864000UL
-D__CONF_MCU_MODEL=MCU_MODEL_STC8H1K08
-D__CONF_CLKDIV=0x00
-D__CONF_IRCBAND=0x01
-D__CONF_VRTRIM=0x1F
-D__CONF_IRTRIM=0xB5
-D__CONF_LIRTRIM=0x00
upload_protocol = custom
upload_port = /dev/ttyUSB1
upload_speed = 1152000
upload_flags =
-p$UPLOAD_PORT
-s$UPLOAD_SPEED
-e
upload_command = ${platformio.packages_dir}/tool-stc8prog/stc8prog $UPLOAD_FLAGS -f $SOURCE

结束

以上就是针对Linux下, VSCode+PlatformIO环境, 使用FwLib_STC8封装库进行环境配置和运行演示用例的说明.

STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解)的更多相关文章

  1. STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解)

    介绍 FwLib_STC8 是一个针对STC8G, STC8H系列MCU的C语言封装库, 适用于基于这些MCU的快速原型验证. 项目地址: Gitee FwLib_STC8 镜像地址: GitHub ...

  2. STC8H开发(四): FwLib_STC8 封装库的介绍和注意事项

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  3. 全网最详细的Git学习系列之安装各个Git图形客户端(Windows、Linux、Mac系统皆适用ing)(图文详解)

    不多说,直接上干货! 目前Git图形客户端 TortoiseGit .SourceTree .GitUp .SmartGit .QGit .GitX .Gitnub.Tower .Git-cola . ...

  4. 关于Linux安装中NAT模式和桥接模式的区别详解

    1.一般我们在创建一个Linux虚拟机时候,会面临三个网络配置选择: 桥接模式.nat模式.host-only模式(主机模式,这个模式用得少,就不介绍了) 2.NAT模式: 所谓nat模式,就是虚拟系 ...

  5. 关于Linux安装中NAT模式和桥接模式的区别详解(转载)

    1.一般我们在创建一个Linux虚拟机时候,会面临三个网络配置选择: 桥接模式.nat模式.host-only模式(主机模式,这个模式用得少,就不介绍了) 2.NAT模式: 所谓nat模式,就是虚拟系 ...

  6. 五款实用免费的Python机器学习集成开发环境(5 free Python IDE for Machine Learning)(图文详解)

    前言 集成开发环境(IDE)是提供给程序员和开发者的一种基本应用,用来编写和测试软件.一般而言,IDE 由一个编辑器,一个编译器(或称之为解释器),和一个调试器组成,通常能够通过 GUI(图形界面)来 ...

  7. 全网最详细的Git学习系列之介绍各个Git图形客户端(Windows、Linux、Mac系统皆适用ing)(图文详解)

    不多说,直接上干货! 一.TortoiseGit - The coolest Interface to Git Version Control TortoiseGit 是 TortoiseSVN 的  ...

  8. 如何快速将文本中的tab更换成逗号(图文详解)

    不多说,直接上干货! 现有一份数据如下. 下载日志数据并分析 到搜狗实验室下载用户查询日志 1) 介绍 搜索引擎查询日志库设计为包括约1个月(2008年6月)Sogou搜索引擎部分网页查询需求及用户点 ...

  9. linux虚拟机centos64位_6.5+VM10安装oracle11g图文详解

    注意: vi基本命令:i--编辑状态  退出编辑并保存时先按ESC键,再按符合“:wq”或者":x"即可注意每个步骤时的当前用户,是root还是oracle 以root用户登录虚机 ...

随机推荐

  1. 二、SpringBoot实现上传文件到fastDFS文件服务器

    上篇文章介绍了如何使用docker安装fastDFS文件服务器,这一篇就介绍整合springBoot实现文件上传到fastDFS文件服务器 1.pom.xml文件添加依赖 <!-- 连接fast ...

  2. window 查看端口占用情况

    查看哪个进程在用 netstat -aon|findstr "8080" TCP    0.0.0.0:8080           0.0.0.0:0              ...

  3. 【Java】基本语法学习笔记

    1.数组 *数组的创建 int[] array = {1,2,3,4,5}; 注意区别于C++ int a[] = (1)两种输出方法 public class number { public sta ...

  4. 华为HMS Core图形引擎服务携手三七游戏打造移动端实时DDGI技术

    在2021年HDC大会的主题演讲中提到,华为HMS Core图形引擎服务(Scene Kit)正协同三七游戏一起打造实时DDGI(动态漫反射全局光照:Dynamic Diffuse Global Il ...

  5. Java网络多线程编程:对象流错误导致Connection reset

    Java网络多线程编程--对象流错误导致Connection reset 在老韩的网络多线程编程实战项目中,发生了如下报错: 服务器端和客户端均发生了报错,在确定相应对象流代码完全没有问题之后,回归定 ...

  6. LuoguB2029 大象喝水 题解

    Update \(\texttt{2021.12.4}\) 修改了原先的错误代码,给各位造成影响,在此表示很抱歉. Content 大象要喝 \(20\) 升水,但现在只有一个深 \(h\) 厘米,半 ...

  7. 【LeetCode】1110. Delete Nodes And Return Forest 解题报告 (C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 日期 题目地址:https://leetcode ...

  8. 【LeetCode】555. Split Concatenated Strings 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 遍历 日期 题目地址:https://leetcode ...

  9. 【LeetCode】18. 4Sum 四数之和

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:four sum, 4sum, 四数之和,题解,leet ...

  10. 【剑指Offer】二进制中1的个数 解题报告(Python)

    题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 解题方法 这个题如果使 ...