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

相关文章

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

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

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

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

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件