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

介绍

FwLib_STC8 是一个针对STC8G, STC8H系列MCU的C语言封装库, 适用于基于这些MCU的快速原型验证.

为避免之前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封装库中, 尽可能使用宏的方式对寄存器操作进行封装, 控制方法间的层级调用深度, 相比较FwLib_STC12, 在固件体积和堆栈占用上有很大提升.

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

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

前提:

  1. 已经安装完成Keil5, 并配置好STC的插件, 如果未完成, 请自行搜索网上的教程和说明
  2. 本机安装了Git并且可以在命令行下使用git命令,
  3. 如果无git, 则需要有zip解压工具

1. 创建项目目录

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

2. 创建Keil5项目

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

3. 选择MCU型号

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

在下面的列表中选择最接近自己型号的那款, 点击OK保存

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

4. Keil5 项目结构

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

项目的目录结构为

stc8h_demo/
|
│  STARTUP.A51
│  stc8h_demo.uvproj
├─Listings
└─Objects

5. 下载FwLib_STC8

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

方式一: 通过git导出
在命令行下执行

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

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

6. 将FwLib_STC8放入项目目录

将上一步得到的目录, 复制到Keil5项目的目录下, 复制完成后的项目目录结构如下

stc8h_demo/
|
│  STARTUP.A51
│  stc8h_test003.uvproj
├─FwLib_STC8
│  ├─demo
│  ├─include
│  └─src
├─Listings
└─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保存

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

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

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

打开选项对话框

如上图, 选中C51标签页, 在”2″标识的输入框中, 输入

__CX51__, __CONF_MCU_MODEL=MCU_MODEL_STC8H3K32S2,__CONF_FOSC=36864000UL

对上面各项的说明

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

然后点击”3″, 在弹出的对话框中, 选中FwLib_STC8/include 目录, 这里是配置封装库的头文件路径.

配置完成后,

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

上面完成后, 点击OK保存

9. 调整代码并编译

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

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

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

10. 用STC-ISP烧录

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

11. 观察串口输出

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

运行其他用例

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

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

结束

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