STC8H8K64U 库函数学习笔记 —— GPIO 点灯
环境说明:
芯片:STC8H8K64U
软件:
- KeilC51 μVersion V5.38.00
- STCAI-ISP (V6.94)
不得不说,Keil 是我用过的 IDE 中,最让人头疼的事情,写代码就像是在记事本里编写一样。
对于我这个烦恼,分享以下文心一言给我的回答:
Keil uVision 在默认情况下确实可能不提供像一些现代IDE那样的实时代码提示或代码补全功能。然而,这并不意味着你不能在Keil中有效地编写代码。以下是一些建议和方法,可以帮助你在没有实时代码提示的情况下更高效地使用Keil uVision:
- 熟悉API和函数库:对于你正在使用的STC芯片和相关库函数,你需要熟悉它们提供的API和函数。这样,即使没有代码提示,你也知道应该调用哪些函数。
- 查阅文档:STC芯片和相关库函数的文档是你最好的朋友。当你不确定某个函数的参数或返回值时,查阅文档会是一个很好的选择。
- 使用代码片段:你可以创建自己的代码片段库,将常用的代码块保存起来,并在需要时快速插入。这可以大大提高你的编程效率。
- 更新Keil版本:确保你使用的是最新版本的Keil uVision。新版本可能包含了对代码提示和补全功能的改进。
- 安装插件或扩展:虽然Keil本身可能没有强大的代码提示功能,但可能有第三方插件或扩展可以增强这个功能。你可以查看Keil的插件市场或相关社区,看看是否有适合你的插件。
- 使用其他编辑器:如果你发现Keil的代码提示功能不能满足你的需求,你可以考虑使用其他编辑器(如Visual Studio Code、Sublime Text等)来编写代码,然后再将代码导入到Keil中进行编译和调试。这种方法可以充分利用现代编辑器的代码提示和补全功能,同时保留Keil的编译和调试能力。
尽管Keil uVision可能在代码提示方面不如一些现代IDE,但它仍然是嵌入式系统开发领域非常受欢迎的工具之一。通过熟悉API、查阅文档、使用代码片段等方法,你可以有效地在Keil中编写嵌入式代码。
接下来,记录下创建项目的步骤
-
点击菜单
Project
->New μVersion Project
-
在弹出来的对话中选择基于目标芯片的设备。
附加说明,我这里勾选了
Use Extend Linker (LX51) instead of BL51
,这不是必须的,需要根据自己需要判断是否需要勾选,勾选该选项后的说明如下:使用Extend Linker (LX51) 而不是 BL51 通常意味着在链接Keil MDK-ARM或其他基于ARM的嵌入式开发环境中的项目时,您希望使用更高级或具有更多功能的链接器。
BL51是Keil的一个早期版本的链接器,它主要用于链接8051系列微控制器的目标文件。然而,随着嵌入式系统的发展和ARM架构的普及,Keil和其他工具链也进行了相应的更新和扩展。
LX51(或称为Extend Linker)是BL51的一个更现代、更强大的版本,它提供了更多的链接选项和功能,特别适用于ARM和其他更复杂的微控制器架构。使用LX51而不是BL51可能允许您执行更复杂的内存布局、符号解析和代码优化。
要在Keil或其他IDE中更改链接器,您通常需要在项目的配置或设置中进行选择。这通常涉及指定要使用的链接器命令行工具或选择预定义的链接器配置。
-
右键
Source Group 1
,选择Add New Iitem to ....
-
选中
C File
,并命名为main
,点击Add
按钮
-
Keil C
并不会为新建的 C 文件自动生成main
函数代码,所以,需要自己手动补充。补充完代码后,点击工具栏的Rebuild
按钮。可以在Build Output
面板中看到没有Error
信息,则说明一切顺利。
-
但是我们的工程是需要生成
.Hex
文件后便于烧录工具执行烧录操作,所以,需要修改下配置项。点击工具栏的魔术棒(Options for target)
-
在弹出的对话框中,选择
Output
选项卡,然后勾选Create HEX file
即可。
-
再次点击工具栏的
Rebuild
按钮。可以看在Build Output
面板中看到创建 HEX 文件的 信息,则说明配置成功。
-
也可以打开工程中的
Objects
目录,可以找到该文件,记住这个文件的位置,后面我们需要到该目录下找到该文件用于烧录的。
-
接下来就是需要将 STC8H 的库文件拷贝到工程中了,我习惯在工程目录下新建一个 Lib 目录,因为我不想把这些库文件跟当前工程中的已有源代码文件混在一起。
-
启动
STC-ISP
软件,依次点击资料下载
->软件库函数
->STC8G-STC8H库函数
,当然了,也可以直接点击https://www.stcmcudata.com/STC8F-DATASHEET/STC8G-STC8H-LIB-DEMO-CODE.zip 进行下载。
-
解压下载下来的
zip
包,后如下所示,库函数目录就是我们需要的库函数文件了。
-
将库函数中如下四个文件拷贝到我们的工程中建好的
Lib
目录中。
-
右键
Source Group 1
,选择Add Existing Files to Group ....
菜单,然后将Lib
目录中的STC8G_H_GPIO.c
文件加入到工程。
-
再次点击工具栏的
Rebuild
按钮。可以看在Build Output
面板中看到没有Error
信息,则说明一切顺利。
-
在第 10 步的时候有说过,我不想把这些库文件跟当前工程中的已有源代码文件混在一起。所以,可以通过项目文件管理,来重新调整 Keil C 左侧栏的视觉效果。按下图所示,打开
Manage Project Item
对话框。
-
把默认的
Source Group 1
更名为Source
,并将该组下的刚刚加入到工程中的STC8G_H_GPIO.c
文件移除,再新增一个名为Lib
的组,并将STC8G_H_GPIO.c
文件加入到这个组。
-
再次点击工具栏的
Rebuild
按钮。可以看在Build Output
面板中看到没有Error
信息,则说明一切顺利。
再次声明下,第 16 步和 17 步不是必须的,只是我个人有强迫症,不想把这些库文件跟当前工程中的已有源代码文件混在一起。
- 从实际目录结构来说,库文件实际是在
main.c
文件的下一级目录中,故而,在使用包含指令的时候,需要考虑该因素。代码如下:
#include "lib/Config.h"
#include "lib/STC8G_H_GPIO.h"
void main() {
while(1);
}
- 最后通过调用 GPIO 来实现点亮 LED,代码如下:
#include "lib/Config.h"
#include "lib/STC8G_H_GPIO.h"
void main() {
GPIO_InitTypeDef init;
init.Mode = GPIO_OUT_PP; // 设置工作模式为:推挽
init.Pin = GPIO_Pin_3; // 设置工作引脚为:3号引脚
GPIO_Inilize(GPIO_P5, &init); // 初始化 P5 端口
P53 = 1; // 为 P5 端口的 3 号引脚赋予高电平
while(1);
}
通过观察 STC8G_H_GPIO.h
文件,可以发现它已经包含了config.h
,而且还提供了很多实用的函数,调整代码如下也可以实现点灯。
#include "lib/STC8G_H_GPIO.h"
void main() {
// 设置 P27 为准双向
P2_MODE_IO_PU(GPIO_Pin_7);
P27 = 0;
while(1);
}