STC8H8K64U 库函数学习笔记 —— GPIO 点灯

2024-04-13 02:52

本文主要是介绍STC8H8K64U 库函数学习笔记 —— GPIO 点灯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

STC8H8K64U 库函数学习笔记 —— GPIO 点灯

环境说明:
芯片:STC8H8K64U
软件:

  1. KeilC51 μVersion V5.38.00
  2. STCAI-ISP (V6.94)

不得不说,Keil 是我用过的 IDE 中,最让人头疼的事情,写代码就像是在记事本里编写一样。

对于我这个烦恼,分享以下文心一言给我的回答:

Keil uVision 在默认情况下确实可能不提供像一些现代IDE那样的实时代码提示或代码补全功能。然而,这并不意味着你不能在Keil中有效地编写代码。以下是一些建议和方法,可以帮助你在没有实时代码提示的情况下更高效地使用Keil uVision:

  1. 熟悉API和函数库:对于你正在使用的STC芯片和相关库函数,你需要熟悉它们提供的API和函数。这样,即使没有代码提示,你也知道应该调用哪些函数。
  2. 查阅文档:STC芯片和相关库函数的文档是你最好的朋友。当你不确定某个函数的参数或返回值时,查阅文档会是一个很好的选择。
  3. 使用代码片段:你可以创建自己的代码片段库,将常用的代码块保存起来,并在需要时快速插入。这可以大大提高你的编程效率。
  4. 更新Keil版本:确保你使用的是最新版本的Keil uVision。新版本可能包含了对代码提示和补全功能的改进。
  5. 安装插件或扩展:虽然Keil本身可能没有强大的代码提示功能,但可能有第三方插件或扩展可以增强这个功能。你可以查看Keil的插件市场或相关社区,看看是否有适合你的插件。
  6. 使用其他编辑器:如果你发现Keil的代码提示功能不能满足你的需求,你可以考虑使用其他编辑器(如Visual Studio Code、Sublime Text等)来编写代码,然后再将代码导入到Keil中进行编译和调试。这种方法可以充分利用现代编辑器的代码提示和补全功能,同时保留Keil的编译和调试能力。

尽管Keil uVision可能在代码提示方面不如一些现代IDE,但它仍然是嵌入式系统开发领域非常受欢迎的工具之一。通过熟悉API、查阅文档、使用代码片段等方法,你可以有效地在Keil中编写嵌入式代码。

接下来,记录下创建项目的步骤

  1. 点击菜单 Project -> New μVersion Project
    New μVersion Project

  2. 在弹出来的对话中选择基于目标芯片的设备。
    Use Extend Linker (LX51) instead of BL51

附加说明,我这里勾选了 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中更改链接器,您通常需要在项目的配置或设置中进行选择。这通常涉及指定要使用的链接器命令行工具或选择预定义的链接器配置。

  1. 右键 Source Group 1 ,选择 Add New Iitem to ....
    Add New Iitem

  2. 选中 C File,并命名为 main,点击 Add 按钮
    选择 C 文件

  3. Keil C 并不会为新建的 C 文件自动生成 main 函数代码,所以,需要自己手动补充。补充完代码后,点击工具栏的 Rebuild 按钮。可以在 Build Output 面板中看到没有 Error 信息,则说明一切顺利。
    编写代码并编译

  4. 但是我们的工程是需要生成 .Hex 文件后便于烧录工具执行烧录操作,所以,需要修改下配置项。点击工具栏的魔术棒(Options for target)
    Options for target

  5. 在弹出的对话框中,选择 Output 选项卡,然后勾选 Create HEX file 即可。
    Create HEX file

  6. 再次点击工具栏的 Rebuild 按钮。可以看在 Build Output 面板中看到创建 HEX 文件的 信息,则说明配置成功。
    从当前工程创建 HEX 文件

  7. 也可以打开工程中的 Objects 目录,可以找到该文件,记住这个文件的位置,后面我们需要到该目录下找到该文件用于烧录的。
    在这里插入图片描述

  8. 接下来就是需要将 STC8H 的库文件拷贝到工程中了,我习惯在工程目录下新建一个 Lib 目录,因为我不想把这些库文件跟当前工程中的已有源代码文件混在一起。
    新建 Lib 目录

  9. 启动 STC-ISP 软件,依次点击 资料下载 -> 软件库函数 -> STC8G-STC8H库函数,当然了,也可以直接点击https://www.stcmcudata.com/STC8F-DATASHEET/STC8G-STC8H-LIB-DEMO-CODE.zip 进行下载。
    下载库文件

  10. 解压下载下来的 zip 包,后如下所示,库函数目录就是我们需要的库函数文件了。
    STC8G-STC8H-LIB-DEMO-CODE

  11. 将库函数中如下四个文件拷贝到我们的工程中建好的 Lib 目录中。
    拷贝库函数

  12. 右键 Source Group 1 ,选择 Add Existing Files to Group .... 菜单,然后将 Lib 目录中的 STC8G_H_GPIO.c 文件加入到工程。
    在这里插入图片描述

  13. 再次点击工具栏的 Rebuild 按钮。可以看在 Build Output 面板中看到没有 Error 信息,则说明一切顺利。
    加入库文件后重新编译

  14. 在第 10 步的时候有说过,我不想把这些库文件跟当前工程中的已有源代码文件混在一起。所以,可以通过项目文件管理,来重新调整 Keil C 左侧栏的视觉效果。按下图所示,打开 Manage Project Item 对话框。
    在这里插入图片描述

  15. 把默认的 Source Group 1 更名为 Source,并将该组下的刚刚加入到工程中的 STC8G_H_GPIO.c 文件移除,再新增一个名为 Lib 的组,并将 STC8G_H_GPIO.c 文件加入到这个组。
    修改项目中的呈现结构

  16. 再次点击工具栏的 Rebuild 按钮。可以看在 Build Output 面板中看到没有 Error 信息,则说明一切顺利。
    调整之后的结构

再次声明下,第 16 步和 17 步不是必须的,只是我个人有强迫症,不想把这些库文件跟当前工程中的已有源代码文件混在一起。

  1. 从实际目录结构来说,库文件实际是在 main.c 文件的下一级目录中,故而,在使用包含指令的时候,需要考虑该因素。代码如下:
#include "lib/Config.h"
#include "lib/STC8G_H_GPIO.h"void main() {while(1);
}
  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);
}

这篇关于STC8H8K64U 库函数学习笔记 —— GPIO 点灯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/898954

相关文章

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用