STM32入门教程-2023版【3-2】点亮LED灯之库函数介绍

关注 + 点赞   不错过精彩内容

图片

大家好,我是硬核王同学,最近在做免费的嵌入式知识分享,帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作! 

二、正式点亮一个LED灯

操作STM32的GPIO需要三个步骤:

  1.使用RCC打开GPIO的时钟;

  2.使用GPIO_Init函数初始化GPIO;

  3.使用输出或输入函数来控制GPIO口

这里涉及了GPIORCC两个外设,可以看看这两个外设有哪些库函数

(1)RCC的库函数

首先是RCC,我们可以在Library中找到rcc.h这个文件,双击打开,在这个.h文件的最下面,一般都是库函数所有函数的声明

图片

在这里我们可以看到RCC有很多的库函数,但实际上这里的大部分函数我们都不会用到,我们最常用的只有这三个函数,RCC_AHB外设时钟控制、RCC_APB2外设时钟控制、RCC_APB1外设时钟控制

图片

右键点击函数名,跳转到函数定义,但此时跳转不过去,是因为刚才我们把中间文件给删掉了,那么重新编译一下再跳转就可以跳转成功了。这时就来到了RCC的.c文件里的函数定义

图片

选中的这部分有这个函数的介绍,这个AHB外设时钟控制的函数就是使能或者失能AHB外设时钟的

图片

第一个参数就是选择哪一个外设

图片

STM32互联型的设备可以在这个列表选择

图片

其他设备再这个选中的部分选则

图片

接着第二个参数就是ENABLE或者DISABLE

图片

下面的APB2外设时钟控制和APB1外设时钟控制都是一样的操作方法

第一个参数选择外设,第二个参数使能或失能

图片

如果你不清楚哪个外设是连接在哪个总线上的,还可以在这个函数的上面的列表找一下

列表中出现了就肯定是这个总线的外设

图片

RCC函数到这里就介绍完了,最主要的还是这三个函数,其他的基本上用不到,需要用到的时候再看详细介绍~

图片

(2)GPIO的库函数

GPIO的库函数,我们可以在Library中打开GPIO.h这个文件,在这个.h文件的最后,就是GPIO的全部库函数了

目前可以先了解前面的一些库函数,后面的库函数以后需要用到了再了解

图片

第一个就是GPIO_Delnit,参数可以写GPIOA、GPIOB等等

调用这个函数之后,所指定的GPIO外设就会被复位

void GPIO_DeInit(GPIO_TypeDef* GPIOx);

第二个AFIODeinit也是一样,可以复位AFIO外设,这个AFIO我们后面再讲

void GPIO_AFIODeInit(void);

第三个GPIO_Init是一个非常重要的函数,这个函数的作用是,用结构体的参数来初始化GPIO口

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

我们需要先定义一个结构体变量,再给结构体赋值,最后调用这个函数,这个函数内部就会自动读取结构体的值,自动把外设的各个参数配置好

这种init函数在STM32中基本所有的外设都有,一般我们初始化外设都是使用这个init函数来完成的

第四个是GPio_StructInit函数,这个函数可以把结构体变量赋一个默认值

void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);

接下来这四个就是GPIO的读取函数了

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

再下面跟着的四个就是GPIO的写入函数,这些函数就可以实现读写GPIO口的功能

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

剩下的这些函数我们暂时不会用到,这里面重要的函数就是上面的GPIO Init和这8个读写函数

图片

下面(下一篇)我们就来试试,用这些函数来操作GPIO吧

作 者 :硬核王同学

------- END ------

关注公众号回复“加群”按规则加入技术交流群  回复“1024”查看更多内容

图片

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

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

相关文章

基于策略模式和简单工厂模式实现zip、tar、rar、7z四种压缩文件格式的解压

推荐语 这篇技术文章深入探讨了基于策略模式和简单工厂模式实现四种常见压缩文件格式的解压方法。通过阅读该文章,你将了解到如何利用这两种设计模式来实现灵活、可扩展的解压功能,同时适应不同的压缩文件格式。如果你对设计模式和文件处理感兴趣或刚好…

算法题Python常用内置函数、方法、技巧汇总(其八:推导式)

文章目录 推导式列表推导式元组推导式集合推导式字典推导式 华为OD算法/大厂面试高频题算法练习冲刺训练 推导式 python中的推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列。可以简单理解为for循环语句(if条件语句)的简写版本&#xff…

Springboot配置http-Only

项目框架 jdk1.8、springboot2.5.10 情况一 项目中未使用(权限认证框架:Sa-Token) application.yml文件内增加配置 server.servlet.session.cookie.http-onlytrueserver.servlet.session.cookie.securetrue (此条配置建议也加上) 情况二…

Flink去重计数统计用户数

1.数据 订单表,分别是店铺id、用户id和支付金额 "店铺id,用户id,支付金额", "shop-1,user-1,1", "shop-1,user-2,1", "shop-1,user-2,1", "shop-1,user-3,1", "shop-1,user-3,1", "shop-1,user…

课题学习(十八)----捷联测试电路设计与代码实现(基于MPU6050和QMC5883L)

一、 电路设计 本周主要工作是在项目上,抽空做了一个跟本课题相关的电路板,之前用开发板来做测试,MPU6050和QMC5883L都是用杜邦线连接的,导致接线很乱,也不美观,当然也不符合“捷联”的定义。   下面是电…

哈希表基础

设计意义: 查找性能快,比搜索二叉树更快 二叉树查找速度O(log2N),哈希表一般可以达到O(1) 构建方法: 数组下标,关键字x通过哈希函数f(x)转换为下标 哈希函数: 根据关键字设计,主要原理是根据数组大小…

【领域驱动设计】模式--通用语言(Ubiquitous language)

一.前言 有道无术术可求,有术无道止于术。方法论的形成都是为了让我们能够更高效,系统的解决问题,而不至于遇到问题不知所措。 二.通用语言的必要性 相信大家在实际的软件开发流程过程中,经常会遇到参照 Prd原型 编码出的系统与实…

SSM驾校预约管理系统----计算机毕业设计

项目介绍 本项目分为管理员、教练、学员三种角色, 管理员角色包含以下功能: 学员管理、教练管理、车辆管理、关系管理、车辆维修管理、个人中心等功能。 教练角色包含以下功能: 我的课程、我的学员、车辆中心、个人中心等功能。 学员角色包…

zabbix添加监控主机(agent)并告警

一、添加监控主机 总体来说,在被监控主机上安装部署zabbix-agent,并修改配置文件(zabbix_agentd.conf)的参数。然后在zabbix 服务端zabbix-get检查是否可以监控。如果可以了,就可以在web页面添加了,要监控…

Vue3.2 自定义指令详解与实战

一、介绍 在Vue3中,自定义指令为开发者提供了一种灵活的方式来扩展Vue的HTML模板语法,使其能够执行特定的DOM操作或组件逻辑。不同于Vue2.x中的全局和局部指令注册方式,Vue3引入了Composition API,这使得自定义指令的编写和使用更…

Ubuntu16.04 安装Anaconda

步骤 1: 去官网下载安装包,链接如下: https://repo.anaconda.com/archive/ 找到对应版本下载至本地电脑,并上传至服务器。 步骤2: 通过命令解压 sh Anaconda3-2023.03-0-Linux-x86_64.sh 一路选择yes或则回车,直到安装成功出现下面画面&…

Spring高手之路-@Autowired和@Resource注解异同点

目录 相同点 不同点 1.来源不同。 2.包含的属性不同 3.匹配方式(装配顺序)不同。 ​编辑 4.支持的注入对象类型不同 5.应用地方不同 相同点 都可以实现依赖注入,通过注解将需要的Bean自动注入到目标类中。都可以用于注入任意类型的Bean…

如何使用ChatGPT来提高编程效率

如何使用ChatGPT来提高编程效率 在软件开发的世界中,时间就是金钱。程序员常常在寻找新方法和工具来提高他们的编程效率。而现代技术中,人工智能(AI)已经成为了一个不可或缺的助手。特别是OpenAI的大型语言模型,即ChatGPT,它的出现为编程领域带来了翻天覆地的变化。本文…

Docker六 | Docker Compose容器编排

目录 Docker Compose 基本概念 使用步骤 常用命令 Docker Compose Docker-Compose是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Compose可以管理多个Docker容器组成一个应用。 需要定义一个YAML格式的配置文件docker-compose.yml,…

win安装scoop,并配置环境

安装 PowerShell 非管理员权限运行下面三条命令。 Set-ExecutionPolicy RemoteSigned -scope CurrentUseriwr -useb scoop.201704.xyz -outfile install.ps1.\install.ps1 -ScoopDir D:\Scoop -ScoopGlobalDir D:\Scoop\GlobalApps更新scoop scoop install gitscoop bucket …

[NOIP2006 提高组] 金明的预算方案

[NOIP2006 提高组] 金明的预算方案 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置&#xff0…

vue如何实现局部刷新?

应用场景&#xff1a; 比如你要切换tap栏实现刷新下面form表单等&#xff0c;相当于刷新页面。 如何使用如下&#xff1a; <div v-if"isReloadData"> 比如你想刷新那个位置就把 v-if"isReloadData"写到那个标签上 </div> 在data中定义刷新标…

如何本地搭建FastDFS文件服务器并实现远程访问【内网穿透】

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…

User maven 通过什么命令能查到那个包依赖了slf4j-simple-1.7.36.jar

要在 Maven 项目中查找哪个包依赖了 slf4j-simple-1.7.36.jar&#xff0c;您可以使用 Maven 的依赖树命令 mvn dependency:tree。这个命令会展示项目所有依赖的层次结构&#xff0c;包括传递依赖&#xff08;即一个依赖的依赖&#xff09;。然后&#xff0c;您可以搜索或过滤输…

基于零和收益的DEA模型研究python实现

传统的DEA模型往往假设相关的是相互独立的,此时DEA模型只能计算出相对效率,无法进行效率的调整。如在碳排放分配问题上,碳排放总量保持不变,利用DEA模型只能计算出每个省份分配的相对效率,这在讨论固定资源下的碳排放配额分配问题时具有明显的局限性。在这种情况下,利用Z…