STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解)
介绍
FwLib_STC8 是一个针对STC8G, STC8H系列MCU的C语言封装库, 适用于基于这些MCU的快速原型验证.
- 项目地址: Gitee FwLib_STC8
- 镜像地址: GitHub FwLib_STC8
为避免之前STC12封装库存在的问题, 这个封装库在以下方面进行了改进
- 兼容SDCC和Keil C51
FwLib_STC12封装库只支持SDCC编译, 并且寄存器命名与官方不同, 使得基于FwLib_STC12的项目代码与其他Keil开发的项目代码无法兼容. 在FwLib_STC8的开发上, 采用了与官方库文件一致的命名, 并且增加了对Keil C51和SDCC的适配. 基于FwLib_STC8的项目, 可以在Linux下使用SDCC编译, 也可以在Windows下使用Keil C51环境进行编译. - 减小代码尺寸
FwLib_STC12封装库较多采样函数方式对寄存器进行封装, 而函数与函数间的层级调用都会增加栈开支, 这样一方面容易对8位MCU的内存造成占用, 另一方面增加了固件尺寸. 在FwLib_STC8封装库中, 尽可能使用宏的方式对寄存器操作进行封装, 控制方法间的层级调用深度, 相比较FwLib_STC12, 在固件体积和堆栈占用上有很大提升.
以下介绍在Windows下Keil55开发环境的搭建
配置Keil5开发环境运行演示用例
前提:
- 已经安装完成Keil5, 并配置好STC的插件, 如果未完成, 请自行搜索网上的教程和说明
- 本机安装了Git并且可以在命令行下使用git命令,
- 如果无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 https://github.com/IOsetting/FwLib_STC8.git FwLib_STC8
# 或者giteee
git clone https://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封装库进行环境配置和运行演示用例的说明, 如果有问题请留言