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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用docker-compose创建多项目容器运行

使用docker-compose创建多项目容器运行 按招网友提供方法创建 docker-compose.yml内容(这里改了桥接模式,并且注释放开) version: "3" services:docker_python:image: python:2.7.18container_name: py_appworking_dir: "/r…

Java实现一个简易的布隆过滤器Bloom Filter

目录 什么是布隆过滤器? 作用: 实现一个简单的布隆过滤器: 解析: 什么是布隆过滤器? 布隆过滤器(Bloom Filter)是一种用于快速检查一个元素是否可能存在于一个集合中的数据结构,它…

智能化办公时代来临:AI助你解放双手

文章目录 一、AI在办公领域的广泛应用二、AI助力办公效率提升1.自动化流程减少繁琐任务2.智能分析辅助决策制定3.个性化服务提升用户体验 三、AI提升办公效率的未来趋势1.更加智能化的办公场景2.更高效的团队协作3.更全面的数据安全保护 四、应对AI带来的挑战《AI高效工作一本通…

RabbitMQ3.13.x之九_Docker中安装RabbitMQ

RabbitMQ3.13.x之_Docker中安装RabbitMQ 文章目录 RabbitMQ3.13.x之_Docker中安装RabbitMQ1. 官网2. 安装1 .拉取镜像2. 运行容器 3. 访问 1. 官网 rabbitmq - Official Image | Docker Hub 2. 安装 1 .拉取镜像 docker pull rabbitmq:3.13.0-management2. 运行容器 # lates…

顺序统计量

一、顺序统计量 定义:将长度为 n 的数组按升序排序后,第 i 个位置的数字是该数组的第 i 小的量,称之为第 i 顺序统计量。 则一个数组中的最小值是第1顺序统计量,最大值是第n顺序统计量,中位数是第 (n1)/2 顺序统计量 …

图像识别网络与训练策略——基于经典网络架构训练图像分类模型

基于经典网络架构训练图像分类模型 总体框架 数据预处理部分:- 数据增强:torchvision中transforms模块自带功能,比较实用 - 数据预处理:torchvision中transforms也帮我们实现好了,直接调用即可 - DataLoader模块直接…

@四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!

四年级家长,这条香港优才计划华侨生联考捷径,一定要看! 香港身份的优势有多大?进可参加华侨生联考400分上内地985/211大学,退可参加香港DSE轻松上香港本地大学和海外高校。 但香港身份对子女的教育优势大小&#xff0c…

C++从入门到精通——this指针

this指针 前言一、this指针的引出问题 二、this指针的特性三、例题什么时候会出现编译报错什么时候会出现运行崩溃this指针存在哪里this指针可以为空吗 四、C语言和C实现Stack的对比C语言实现C实现 前言 this指针是一个特殊的指针,在C类的成员函数中使用。它指向调…

PPT 操作

版式 PPT中,巧妙使用母版,可以提高效率。 双击母版,选择其中一个版式,插入装饰符号。 然后选择关闭。 这个时候,在该版式下的所有页面,就会出现新加入的符号。不在该版式下的页面,不会出现新加…

【Redis】Redis的使用

登录redis [roottest2 ~]# redis-cli 127.0.0.1:6379> 或[roottest2 ~]# redis-cli -h 192.168.67.12 -p 6379 192.168.67.12:6379> redis-benchmark 测试工具 redis-benchmark 是官方自带的Redis性能测试工具,可以有效的测试Redis服务的性能 基本的测试语…

2.类与对象(上篇)

1.面向过程和面向对象初步认识 C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 2.类的引入 C**语言结构体中只能定义变量,在C中,结构体内不仅可以定义变量,也可以定…

(三)LTspice学习交流分析

文章目录 前言一、Edit simulation cmd二、添加激励总结 前言 上一节我们学习了LTspice的安装,很简单,无脑安装 (一)LTspice简介 (二)LTspice学习之简介2 今天我们来学习一下LTspice另一个非常重要的仿真功…

血泪教训!程序员副业接单做私活避坑指南!!!

缘起 经常有粉丝朋友向我哭诉留言,告知大白自己兼职被骗的经历: 在大家找兼职踩坑过程中,我总结下来就是以下几点血泪教训: 1. 有没有靠谱兼职推荐? 2. 零基础怎么兼职接单? 3. 怎么渗透?怎么…

C++设计模式:桥模式(五)

1、定义与动机 桥模式定义:将抽象部分(业务功能)与实现部分(平台实现)分离,使他们可以独立地变化引入动机: 由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度,…

2.k8s架构

目录 k8s集群架构 控制平面 kube-apiserver kube-scheduler etcd kube-controller-manager node 组件 kubelet kube-proxy 容器运行时(Container Runtime) cloud-controller-manager 相关概念 k8s集群架构 一个Kubernetes集群至少包含一个控制…

飞书API(3):Python 自动读取多维表所有分页数据的三种方法

上一小节介绍了怎么使用 Python 读取多维表的数据,看似可以成功获取到了所有的数据,但是在实际生产使用过程中,我们会发现,上一小节的代码并不能获取到所有的多维表数据,它只能获取一页,默认是第一页。因为…

MySQL的存储引擎、索引与事务

常见的端口号 MySQL–3306http–80https–443tcp–23fcp–21tomcat–8080ssh–22oracle–1521rockermq–9876 存储引擎 使用指令查看所有引擎: show engines;从图中可以看出MySQL默认的存储引擎是InnoDB;并且在5.7版本所有的存储引擎中只有 InnoDB 是…

亮数据----教你轻松获取数据

文章目录 1. 数据采集遇到的瓶颈1.1 不会造数据?1.2 不会写爬虫代码? 2.IP 代理基础知识2.1 基本概念2.2 作用和分类2.3 IP 代理的配置和使用2.4 安全和合规 3. 为何使用亮数据 IP 代理3.1 拥有丰富的代理网络服务3.2 简单易操作的采集工具3.3 拥有各平台…

路由器对数据包的处理过程分析笔记

虽然TCP-IP协议中传输数据会在各个路由器再次经过物理层、链路层、网络层的解封装、加工、封装、转发,但是对于两个主机间的运输层,在逻辑上,应用进程是直接通信的。 路由器主要工作在网络层,但它也涉及到物理层和链路层的一些功能…

PWM 脉宽跟随方案介绍

1. 前言 数字电源产品在使用桥式电路拓扑或是多路交错控制中,有时会需要滞后臂的 PWM 脉宽严格跟随超前臂的 PWM 脉宽,或从路的 PWM 脉宽严格跟随主路的 PWM 脉宽,本文将介绍如何利用高精度定时器实现 PWM 输出脉宽跟随,一种使用…