找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4515|回复: 2
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
介绍
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. 创建项目目录

在文件浏览器中, 创建项目目录, 建议目录路径中不要有中文和空格, 例如本例使用路径


2. 创建Keil5项目

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


3. 选择MCU型号

刚才的保存点击后, 会弹出MCU选择对话框, 在里面选择STC MCU Database,


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


会弹出一个对话框问是否复制STARTUP.A51,  点Yes


4. Keil5 项目结构

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


项目的目录结构为

  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
复制代码


**方式二: 下载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
复制代码

在文件系统中的目录列表


7. 在Keil5中添加封装库库

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

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


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

可以看到文件都已经添加进来了


8. 在Keil5中添加演示用例

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


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


添加之后, 可以看到增加了对应的文件, 点击OK保存


可以看到, 刚才添加的文件都已经出现在项目树结构中


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

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


打开选项对话框


如上图, 选中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 目录, 这里是配置封装库的头文件路径.
  

配置完成后,
  

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


上面完成后, 点击OK保存

10. 调整代码并编译

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


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


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

11. 用STC-ISP烧录

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

12. 观察串口输出

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

13. 运行其他用例

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


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

结束

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


评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:319585 发表于 2022-1-7 19:36 来自手机 | 只看该作者
这个感觉不错,应该比直接用要简单一些吧。
回复

使用道具 举报

板凳
ID:915491 发表于 2022-6-19 08:33 | 只看该作者
太实用了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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