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

news2024/10/7 16:26:47

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);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1589618.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【进阶篇】三、Java Agent实现自定义Arthas工具

文章目录 0、客户端代码1、JMX2、实现:查看内存使用情况3、实现:查看直接内存4、实现:生成堆内存快照5、实现:打印栈信息6、实现:打印类加载器的信息7、实现:打印类的源码8、需求:打印方法的耗时…

OpenHarmony开发学习:【源码下载和编译】

本文介绍了如何下载鸿蒙系统源码,如何一次性配置可以编译三个目标平台(Hi3516,Hi3518和Hi3861)的编译环境,以及如何将源码编译为三个目标平台的二进制文件。 坑点总结: 下载源码基本上没有太多坑&#xff…

HarmonyOS开发实例:【菜单app】

简介 分布式菜单demo 模拟的是多人聚餐点菜的场景,不需要扫码关注公众号等一系列操作,通过分布式数据库可以方便每个人可及时查看到订单详情,数量,总额等;效果如下 demo效果 工程目录 完整的项目结构目录如下 ├…

2024年DeFi的四大主导趋势:Restaking、Layer3、AI和DePin

DeFi(去中心化金融)行业在2024年将继续呈现快速增长的势头,驱动这一增长的主要因素将是四大主导趋势:Restaking、Layer3、AI和DePin。这些趋势将推动DeFi生态系统的发展,为用户提供更多的机会和创新。 趋势1&#xff…

雨云:不只是一阵清风,更是一场暴雨的力量

引言 在网络时代,服务器是任何在线业务的核心。无论你是运营一家小型博客还是承载着数百万用户的大型电商平台,都需要一个稳定、高效的服务器来支持你的业务。然而,在众多服务器提供商中,有一家备受推崇,那就是雨云。 …

【C语言】双向链表详解

文章目录 关于双向链表双向链表的初始化双向链表的打印双向链表方法调用 - 尾删为例双向链表的查找 - 指定位置之后插入为例双向链表结束 - 链表的销毁小结及整体代码实现 关于双向链表 首先链表有8种基本分法 其中在笔者之前文章种详细介绍的 单链表 是不带头单项不循环链表…

快速解锁3D Web渲染引擎HOOPS Communicator轻量化技术

在当今数字化时代,三维模型的使用已经成为许多行业中不可或缺的一部分。然而,随着模型复杂性的增加和数据量的膨胀,如何在Web浏览器中高效加载和渲染这些模型成为了一个挑战。慧都3D Web渲染引擎HOOPS Communicator通过其先进的轻量化技术&am…

测试过程和测试生命周期

软件测试过程是一系列有计划、有组织的活动,旨在识别和解决软件产品中的问题。这个过程通常包括多个阶段,每个阶段都有其特定的目标和方法。 需求分析: 分析软件需求和测试需求,确定测试的目标和范围。理解用户需求和业务目标&…

MM-Grounding-DINO的训练推理(待更新)

1、简单介绍 继前面发布的 GroundingDino 和 Open-GroundingDino的推理 和 Open-GroundingDino的训练实现,作为 GroundingDino延续性的文本检测网络 MM-Grounding-DINO 也发布了较详细的 训练和推理实现教程,而且操作性很强。作为学习内容,也…

我对硬技能与软技能的认知

今天看到一个很有意思的一段话,假设一个人的技能有两种,分别是:硬技能和软技能。 硬技能通常指的是与工作直接相关的、可以通过教育和培训获得的技能,如编程语言、会计知识等,这些技能往往有明确的衡量标准,容易通过考…

java 将 json 数据转为 java 中的对象

一、准备 json 数据 {"name": "mike","age": 17,"gender": 1,"subject": ["math","english"] }二、对应的java对象 package com.demo.controller;import lombok.Data; import java.util.List;Data pu…

鸿蒙TypeScript学习第13天:【元组】

1、TypeScript 元组 我们知道数组中元素的数据类型都一般是相同的(any[] 类型的数组可以不同),如果存储的元素数据类型不同,则需要使用元组。参考文档:qr23.cn/AKFP8k 元组中允许存储不同类型的元素,元组…

【MATLAB第104期】基于MATLAB的xgboost的敏感性分析/特征值排序计算(针对多输入单输出回归预测模型)

【MATLAB第104期】基于MATLAB的xgboost的敏感性分析/特征值排序计算(针对多输入单输出回归预测模型) 因matlab的xgboost训练模型不含敏感性分析算法,本文通过使用single算法,即单特征因素对输出影响进行分析,得出不同…

Python 进度显示工具(tqdm)

tqdm 是一个进度显示工具,当任务执行的等待时间较长时,通过tqdm模块可以模拟出一个进度条,由此可以看到任务执行进度,获得更好的体验。 文章目录 一、tqdm的安装二、tqdm的使用2.1 基于可迭代对象2.2 手动进度更新2.3 命令行模式 …

【SpringBoot】mybatis-plus实现增删改查

mapper继承BaseMapper service 继承ServiceImpl 使用方法新增 save,updateById新增和修改方法返回boolean值,或者使用saveOrUpdate方法有id执行修改操作,没有id 执行新增操作 案例 Service public class UserService extends ServiceImpl<UserMapper,User> {// Au…

mac配置Jmeter环境

mac配置Jmeter环境 一、安装jmeter二、Jmeter目录结构三、汉化Jmeter四、jmeter安装第三方插件 一、安装jmeter 第一步先自行配置好电脑的jdk环境 1、官网下载jar包 https://jmeter.apache.org/download_jmeter.cgi 2、解压到软件安装目录 3、启动Jmeter 启动方式1️⃣&#x…

CSS特效---纯CSS实现点击切换按钮

1、演示 2、一切尽在代码中 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"w…

idea项目编译时报错:GC overhead limit exceeded

问题描述 今天idea构建一个新的项目时报错&#xff1a;GC overhead limit exceeded&#xff0c;错误是发生在编译阶段&#xff0c;而不是运行阶段。 ava: GC overhead limit exceeded java.lang.OutOfMemoryError: GC overhead limit exceededat com.sun.tools.javac.resources…

如何编译OpenHarmony自带APP

作者&#xff1a;王石 概述 OpenHarmony 的主干代码是开源社区的重要学习资源&#xff0c;对于想进行应用开发和熟悉 OpenHarmony 能力的同学主干代码是非常重要的资源&#xff0c;在主干代码的 applications 目录里聚集了很多原生的应用实现&#xff0c;那么如何编译这些代码…

HashMap部分底层源码解析

哈希表的物理结构 HashMap底层都是哈希表&#xff08;也称散列表&#xff09;&#xff0c;线程不安全&#xff0c;其中维护了一个长度为2的幂次方的Entry类型的数组table&#xff0c;数组的每一个索引位置被称为一个桶(bucket)&#xff0c;你添加的映射关系(key,value)最终都被…