STM32学习笔记(二)--GPIO通用输入输出口详解

(1)配置步骤
1.使用RCC开启GPIO时钟
2.使用GPIO_Init函数初始化GPIO
3.使用输入或输出的函数等来控制GPIO
其中涉及外设有RCC、GPIO

(2)代码示例
案例1(设置PA0为推挽输出)

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

案例2(设置PB1 PB11为上拉输入)

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);

(3)函数分析

函数1:void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)(stm32f10x_rcc.h)
这个APB2外设时钟控制的函数用于使能或者失能APB2外设时钟的。

序号

名称

参数解释

示例

参数1

RCC_APB2Periph

选择哪个外设,根据列表选择

RCC_APB2Periph_GPIOA

参数2

NewState

使能或者失能

ENABLE、DISABLE

同理RCC_AHBPeriphClockCmd RCC_APB1PeriphClockCmd只是总线上的外设不同

函数2:void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);(stm32f10x_gpio.h) 用结构体的参数来初始化GPIO口,包含配置8种模式的选择、引脚号、引脚速度。

序号

名称

参数解释

示例

参数1

GPIO_TypeDef* GPIOx

可以是A到G任何一个GPIO外设

GPIOB

参数2

GPIO_InitTypeDef* GPIO_InitStruct

结构体指针,该结构体包含了所有GPIO外设的信息

&GPIO_InitStructure

补充:注意GPIO_InitTypeDef结构体中的GPIO_InitStructure.GPIO_Mode,作用是八种模式的选择,如下所示

模式名称

性质

成员变量

特征

浮空输入

数字输入

GPIO_Mode_IN_FLOATING = 0x04

读引脚电平,若悬空则电平不确定

上拉输入

数字输入

GPIO_Mode_IPU = 0x48

可读取引脚电平,内部连接上拉电阻,悬空时默认高电平

下拉输入

数字输入

GPIO_Mode_IPD = 0x28

可读取引脚电平,内部连接下拉电阻,悬空时默认低电平

模拟输入

模拟输入

GPIO_Mode_AIN = 0x0

GPIO无效,引脚进入内部ADC

开漏输出

数字输出

GPIO_Mode_Out_OD = 0x14

可输出引脚电平,高电平为高阻态,低电平接VSS

推挽输出

数字输出

GPIO_Mode_Out_PP = 0x10

可输出引脚电平,高电平接VDD,低电平接VSS

复用开漏输出

数字输出

GPIO_Mode_AF_OD = 0x1C

由片上外设控制,高电平为高阻态,低电平接VSS

服用推挽输出

数字输出

GPIO_Mode_AF_PP = 0x18

由片上外设控制,高电平接VDD,低电平接VSS

函数3:uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)(stm32f10x_gpio.h)

该函数主要是读取指定端口引脚电平状态的作用,返回引脚电平bitstatus。

序号

名称

参数解释

示例

参数1

GPIO_TypeDef* GPIOx

端口号选择

GPIOB

参数2

uint16_t GPIO_Pin

引脚号选择

GPIO_Pin_1

函数4:void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)(stm32f10x_gpio.h)

该函数主要是写指定端口引脚的电平状态。

序号

名称

参数解释

示例

参数1

GPIO_TypeDef* GPIOx

端口号选择

GPIOB

参数2

uint16_t GPIO_Pin

引脚号选择

GPIO_Pin_1

参数3

BitVal

电平状态

0或者1

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

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

相关文章

使用Spring Cloud设计电商系统架构

在当今互联网高速发展的时代,电子商务系统成为了商家与用户互动的主要方式之一。为了能够更好地应对高并发、可扩展性、灵活性等需求,微服务架构逐渐成为设计电商系统的首选方案。Spring Cloud作为一个成熟的微服务框架,为开发人员提供了一整…

后端开发面试题4(附答案)

前言 在下首语言是golang,所以会用他作为示例。 原文参见 @arialdomartini的: Back-End Developer Interview Questions 语言相关问题 1. 告诉我你的首选语言的三个最坏的缺陷。 Golang虽然在很多方面表现出色,但它并非完美无缺,根据已有的讨论和批评,以下是Go语言被广泛…

深入浅出:面向对象软件设计原则(OOD)

目录 前言 1.单一责任原则(SRP) 2.开发封闭原则(OCP) 3.里氏替换原则(LSP) 4.依赖倒置原则(DIP) 5.接口分离原则(ISP) 6.共同封闭原则(CCP&#xff09…

Android替换默认的按键音

替换audio_assets.xml文件 此文件在AudioService.java被调用 <!--文件位置 /frameworks/base/core/res/res/xml/--> <audio_assets version"1.0"><group name"touch_sounds"><asset id"FX_KEY_CLICK" file"Effect…

用idea将java文件打成jar包

一、用idea将java文件打成jar包 1、在idea上选择file—Project Structure 2、Artifacts —点–JAR—From modules with dependencies 3、选择要打包的java文件 4、Build — Build Artifacts 5、找到刚才添加的Artifacts直接Build 6、生成jar包文件

【总结】项目中用过的设计模式

1.单例模式&#xff08;饿汉式 、懒汉式&#xff09; 应用场景&#xff1a;当频繁使用同一个对象&#xff0c;如配置信息、数据库连接池、线程池等时&#xff0c;使用单例模式可以避免重复创建对象&#xff0c;节省资源 线程池 2.工厂模式 应用场景&#xff1a;当需要创建的…

关于 UEditorPlus 和 TinyMCE 编辑器上线 HKCMS 插件市场的通知

亲爱的各位用户&#xff1a; 我们非常高兴地向大家宣布一个重要的消息&#xff01;UEditorPlus 和 TinyMCE 编辑器现已成功上线 HKCMS 插件市场&#xff01; UEditorPlus 以其强大的功能和便捷的操作&#xff0c;为用户提供了卓越的编辑体验。而 TinyMCE 编辑器也一直以其稳定…

C语言 | Leetcode C语言题解之第140题单词拆分II

题目&#xff1a; 题解&#xff1a; struct Trie {int ch[26];bool flag; } trie[10001];int size;void insert(char* s, int sSize) {int add 0;for (int i 0; i < sSize; i) {int x s[i] - a;if (trie[add].ch[x] 0) {trie[add].ch[x] size;memset(trie[size].ch, 0…

C语言 | Leetcode C语言题解之第139题单词拆分

题目&#xff1a; 题解&#xff1a; unsigned long long Hash(char* s, int l, int r) {unsigned long long value 0;for (int i l; i < r; i) {value value * 2333ull;value s[i] - a 1;}return value; } bool query(unsigned long long* rec, int len_rec, unsigned…

【代码随想录】【算法训练营】【第30天 1】 [322]重新安排行程 [51]N皇后

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 30&#xff0c;周四&#xff0c;好难&#xff0c;会不了一点~ 题目详情 [322] 重新安排行程 题目描述 322 重新安排行程 解题思路 前提&#xff1a;…… 思路&#xff1a;回溯。 重点&…

抖音a_bogus爬虫逆向补环境

抖音a_bogus爬虫逆向补环境 写在前面 https://github.com/ShilongLee/Crawler 这是我为了学习爬虫而搭建的爬虫服务器项目&#xff0c;目标是作为一个高性能的可靠爬虫服务器为广大爬虫爱好者和安全工程师提供平台进行学习爬虫&#xff0c;了解爬虫&#xff0c;应对爬虫。现已…

Github 2024-06-13开源项目日报Top10

根据Github Trendings的统计,今日(2024-06-13统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目3非开发语言项目2Shell项目1TypeScript项目1Swift项目1PHP项目1Blade项目1JavaScript项目1从零开始构建你喜爱的技术 创建周期:2156…

C#面:C#面向对象的思想主要包括什么?

C#面向对象的思想主要包括以下几个方面&#xff1a; 封装&#xff08;Encapsulation&#xff09;&#xff1a;封装是将数据和操作数据的方法封装在一起&#xff0c;形成一个类。通过封装&#xff0c;可以隐藏类的内部实现细节&#xff0c;只暴露必要的接口给外部使用。这样可以…

如何在浏览器书签栏设置2个书签实现一键到达网页顶部和底部

本次设置浏览器为&#xff1a;Chrome浏览器&#xff08;其他浏览器可自行测试&#xff09; 1&#xff0c;随便收藏一个网页到浏览器书签栏 2&#xff0c;右键这个书签 3&#xff0c;修改 4&#xff0c;修改名称 5&#xff0c;修改网址&#xff1a; javascript:(function(…

arm64电源管理之PSCI

PSCIPower State Coordination Interface功耗状态协同接口SCPISystem Control and Power Interface系统控制和电源接口SCMISystem Control and Management Interface系统控制和管理接口SMCCCSMC Calling ConventionSMC调用约定 scpi&#xff1b;通过mailbox核间通信&#xff0c…

借助Historian Connector + TDengine,打造工业创新底座

在工业自动化的领域中&#xff0c;数据的采集、存储和分析是实现高效决策和操作的基石。AVEVA Historian (原 Wonderware Historian) 作为领先的工业实时数据库&#xff0c;专注于收集和存储高保真度的历史工艺数据。与此同时&#xff0c;TDengine 作为一款专为时序数据打造的高…

FullCalendar日历组件集成实战(11)

背景 有一些应用系统或应用功能&#xff0c;如日程管理、任务管理需要使用到日历组件。虽然Element Plus也提供了日历组件&#xff0c;但功能比较简单&#xff0c;用来做数据展现勉强可用。但如果需要进行复杂的数据展示&#xff0c;以及互动操作如通过点击添加事件&#xff0…

怎么防止源代码泄露?9种方法教会你!

怎么防止源代码泄露&#xff1f;首先要了解员工可以通过哪些方式将源代码传输出去&#xff01; 物理方法&#xff1a; — 网线直连&#xff0c;即把网线从墙上插头拔下来&#xff0c;然后和一个非受控电脑直连; — winPE启动&#xff0c;通过光盘或U盘的winPE启动&#xff0c;甚…

Maven Dependency Tree:深入理解你的项目依赖

在Java开发领域&#xff0c;Apache Maven作为一款强大的构建和项目管理工具&#xff0c;广泛应用于自动化构建、依赖管理和项目报告生成等场景。当处理大型项目时&#xff0c;管理依赖关系变得尤为关键&#xff0c;因为不透明或冗余的依赖可能导致各种问题&#xff0c;从构建失…

Mybatis save、saveOrUpdate、update的区别

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 1. save方法 Mybatis的save方法用于插入一条新的记录。当数据库中不存在相同的记录时&#xff0c;会执行插入操作&#xff1b;如果已经存在相同的记录&#xff0c;则会抛出异常。 int result sqlSession.insert(&…