找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7045|回复: 2
收起左侧

在Keil5中使用FwLib_STC8封装库开发STC8G/8H(图文详解)

[复制链接]
ID:912806 发表于 2022-1-5 21:15 | 显示全部楼层 |阅读模式
介绍
FwLib_STC8 是一个针对STC8G, STC8H系列MCU的C语言封装库, 适用于基于这些MCU的快速原型验证.
* 项目地址: [Gitee FwLib_STC8] https://gitee.com/iosetting/fw-lib_-stc8
* 镜像地址: [GitHub FwLib_STC8]https://github.com/IOsetting/FwLib_STC8

为避免之前STC12封装库存在的问题, 这个封装库在以下方面进行了改进
1. 兼容SDCC和Keil C51   FwLib_STC12封装库只支持SDCC编译, 并且寄存器命名与官方不同, 使得基于FwLib_STC12的项目代码与其他Keil开发的项目代码无法兼容. 在FwLib_STC8的开发上, 采用了与官方库文件一致的命名, 并且增加了对Keil C51和SDCC的适配. 基于FwLib_STC8的项目, 可以在Linux下使用SDCC编译, 也可以在Windows下使用Keil C51环境进行编译.
2. 减小代码尺寸   FwLib_STC12封装库较多使用函数的方式对寄存器进行封装, 而函数与函数间的层级调用都会增加栈开支, 这样一方面8位MCU本来就不多的内存更加捉襟见肘, 另一方面增加了生成的固件尺寸. 在FwLib_STC8封装库中, 大量使用宏语句对寄存器操作进行封装, 并且控制方法间的层级调用深度, 有效节省了固件体积和堆栈占用.

以下介绍在Windows下Keil55开发环境的搭建

前提

1. 已经安装完成Keil5, 并配置好STC的插件, 如果未完成, 请自行搜索网上的教程和说明
2. (可选)本机安装了Git并且可以在命令行下使用git命令

1. 创建项目目录

在文件浏览器中, 创建项目目录, 建议目录路径中不要有中文和空格, 例如本例使用路径
2022-01-05_001.png

2. 创建Keil5项目

打开Keil5, 点击 Project -> New uVision Project, 在弹出的对话框中, 选择刚才创建的目录, 填入项目名称, 点击保存
2022-01-05_002.png

3. 选择MCU型号

刚才的保存点击后, 会弹出MCU选择对话框, 在里面选择STC MCU Database,
2022-01-05_003.png

在下面的列表中选择自己型号的那款, 点击OK保存. 如果没有完全匹配的型号, 则选择同样系列中, 内存数量一致的型号, 例如我使用的是STC8H3K32S2, 在列表中没有此项, 就选用同样是STC8H系列3K内存的STC8H3K64S4
2022-01-05_004.png

会弹出一个对话框问是否复制STARTUP.A51,  点Yes
2022-01-05_005.png

4. Keil5 项目结构

Keil5项目就已经创建完成, 这时候其实就已经可以添加官方的头文件, 直接用寄存器进行开发了
2022-01-05_006.png

项目的目录结构为

  1. stc8h_demo/
  2. |
  3. │  STARTUP.A51
  4. │  stc8h_demo.uvproj
  5. ├─Listings
  6. └─Objects
复制代码

5. 下载FwLib_STC8


可以通过git clone导出项目代码, 或者直接下载zip包解压

**方式一: 通过git导出**  
在命令行下执行
  1. # github
  2. git clone https://github.com/IOsetting/FwLib_STC8.git FwLib_STC8
  3. # 或者giteee
  4. git clone https://gitee.com/iosetting/fw-lib_-stc8.git FwLib_STC8
复制代码
2022-01-05_007.png

**方式二: 下载zip包后解压**
访问这篇文章顶部的项目链接, 在页面上, 点击"克隆/下载" 下载ZIP, 并解压成目录

6. 将FwLib_STC8放入项目目录

将上一步得到的目录, 复制到Keil5项目的目录下, 复制完成后的项目目录结构如下
  1. stc8h_demo/
  2. |
  3. │  STARTUP.A51
  4. │  stc8h_test003.uvproj
  5. ├─FwLib_STC8
  6. │  ├─demo
  7. │  ├─include
  8. │  └─src
  9. ├─Listings
  10. └─Objects
复制代码

在文件系统中的目录列表
2022-01-05_008.png

7. 在Keil5中添加封装库库

通过菜单点开Project -> Manage -> Project Items, 或者直接从图标栏点击对应的图标,
   2022-01-05_009.png

打开文件管理对话框, 在Groups中增加一项, 名称"FwLib_STC8", 这个可以根据需要自己改成别的名称也可以, 点中这个新增加的Group, 在右侧那列点击下面的Add Files, 会弹出一个文件选择对话框
2022-01-05_010.png

在文件选择对话框中浏览到FwLib_STC8\src, 全选全部c文件(可以使用Ctrl+A), 点Add, 然后点Close,
   2022-01-05_011.png

可以看到文件都已经添加进来了
2022-01-05_012.png

8. 在Keil5中添加演示用例

保持上一步的窗口不动, 点击选中Source Group 1, 在右侧那列点击下面的Add Files, 会弹出一个文件选择对话框
2022-01-05_013.png

浏览到 FwLib_STC8\demo\uart, 选中uart1_timer1_tx.c, 这是一个用定时器1做波特率时钟源的串口1测试样例
2022-01-05_014.png

添加之后, 可以看到增加了对应的文件, 点击OK保存
2022-01-05_015.png

可以看到, 刚才添加的文件都已经出现在项目树结构中
2022-01-05_016.png

9. 在Keil5中对项目进行配置

直接对刚才的项目结构进行编译是不行的, 还需要配置一下环境变量, 通过菜单点开Project -> Options for Target ... , 或者直接从图标栏点击项目选项图标
2022-01-05_017.png

打开选项对话框
2022-01-05_018.png

如上图, 选中C51标签页, 在"2"标识的输入框中, 输入
  1. __CX51__, __CONF_MCU_MODEL=MCU_MODEL_STC8H3K32S2,__CONF_FOSC=36864000UL
复制代码

对上面各项的说明
* `__CX51__` 是将当前编译环境配置为C51
* `__CONF_MCU_MODEL`, 这里设置对应的MCU型号, 当前使用的型号为`MCU_MODEL_STC8H3K32S2`, 如果你的芯片不是这个, 需要修改成对应的型号, 具体的型号可以在FwLib_STC8/include/fw_conf.h中查找. 注: STC8G只列了大型号, 只需要填大型号即可.
* `__CONF_FOSC` 是这个程序运行时将使用的振荡频率, 取决于你用STC-ISP烧录时会用什么频率, 在这里填入对应的数字, 最后的`UL`代表这个数字是无符号长整数

然后点击"3", 在弹出的对话框中, 选中FwLib_STC8/include 目录, 这里是配置封装库的头文件路径.
   2022-01-05_019.png

配置完成后,
   2022-01-05_020.png

再选中Output标签页, 在上面勾选 Create HEX File, 这一步是为了编译后生成用于烧录的hex文件
2022-01-05_020A.png

上面完成后, 点击OK保存

10. 调整代码并编译

因为Windows下使用STC-ISP可以直接设置时钟频率, 所以代码中不需要对MCU时钟进行调整, 这里要打开样例的代码, 如下图所示, 将`SYS_SetClock();`这行注释掉, 或删掉, 然后保存文件
2022-01-05_021.png

点击"3"标识的按钮编译项目, 如果要完整编译, 按右边的按钮, 平时用左边的按钮就可以, 或者使用快捷键`F7`
2022-01-05_022.png

因为封装库中很多方法未使用, 编译会提示warning, 这些可以忽略, 只要Errors数量为0

11. 用STC-ISP烧录

STC-ISP中选中对应的芯片信号, 点击"打开程序文件", 选中刚才生成的hex文件, 文件位置在项目的Objects目录下. 然后点击"下载/编程", 给芯片重新上电后, 就会下载并运行.

12. 观察串口输出

使用任意串口工具, 使用波特率115200连接对应的串口, 可以看到间隔1秒输出的"T40UString".

13. 运行其他用例

如果需要运行其他用例, 将刚才的用例文件从项目树中移除, 再按照前面的流程, 重新添加其他的用例文件就可以了.
2022-01-05_023.png

也可以自行创建文件编写代码

结束

以上就是针对Keil5环境, 使用FwLib_STC8封装库进行环境配置和运行演示用例的说明, 如果有问题请留言


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:319585 发表于 2022-1-7 19:36 来自触屏版 | 显示全部楼层
这个感觉不错,应该比直接用要简单一些吧。
回复

使用道具 举报

ID:915491 发表于 2022-6-19 08:33 | 显示全部楼层
太实用了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表