02:HAL库---GPIO

news/2024/4/24 8:27:09/文章来源:https://blog.csdn.net/m0_74739916/article/details/136432553

一:GPIO

1:简历

      

2:模式

输入 : IO向32发送信号, 即外设发送信号

   GPIO_Mode_AIN -----模拟输入
  GPIO_Mode_IN_FLOATING -----浮空输入
  GPIO_Mode_IPD -----下拉输入
  GPIO_Mode_IPU ------上拉输入

GPIO_MODE_INPUT----输入模式

输出 : 32向IO发送信号, 即外设接收信号

输出模式时,可以读取引脚的电平值

F1在输出模式,禁止使用内部上下拉
  GPIO_Mode_Out_OD ----开漏输出

 GPIO_Mode_AF_OD --------复用开漏输出
  GPIO_Mode_Out_PP ------推挽输出
  GPIO_Mode_AF_PP ----复用推挽输出

3:位结构

保护二极管:保护过低的输入或者过高的输入; 

        引脚上的这两个保护二极管可以将引脚外部过高或过低的电压进行钳位,当引脚电压高于VDD_FT 或VDD(3.3V)时,上方的二极管导通吸收这个高电压,当引脚电压低于VSS 时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。水平的检测管脚Pin是受保护的节点。当该点电压超过VDD+VD1(0.7V)时,上面的二极管导通。而当该点电压小于-VD2(-0.7V)时,下面的二极管导通。因此,该点电压被钳制在VDD+VD1到-VD2间。

        尽管STM32 芯片内部有这样的保护,但并不意味着STM32 的引脚就无所不能,从之前的电流特性表中可知,IO口的电流很小,如果直接将引脚连接大功率器件,比如电机,那么要么电机不转,要么烧坏芯片。因此若要驱动一些大功率器件,必须要加大功率及隔离电路驱动。也可以说STM32引脚是用来做控制,而不是做驱动使用的

内部上拉、下拉电阻

        上拉和下拉电阻上都有一个开关,通过配置上下拉电阻开关,可以控制引脚的默认状态电平。当开启上拉时引脚默认电压为高电平,开启下拉时,引脚默认电压为低电平,这样就可以消除引脚不定状态的影响。当然也可以将上拉和下拉的开关都关断,这种状态我们称为浮空模式,一旦配置成这个模式,引脚的电压是不确定的,如果用万用表测量此模式下管脚电压时会发现只有1 点几伏,而且还不时改变,所以一般情况下我们都会给引脚设置成上拉或者下拉模式,使它有一个默认状态。STM32 上下拉及浮空模式的配置是通过GPIOx_CRL 和GPIOx_CRH 寄存器控制的。STM32 内部的上拉其实是一个弱上拉,也就是说通过此上拉电阻输出的电流很小,如果想要输出一个大电流,那么就需要外接上拉电阻了

施密特触发器

P-MOS & N-MOS管

4:八种模式

输入模式

A: 浮空输入

B:下拉输入

C:上拉输入

D:模拟输入 


输出模式

A: 开漏输出

B:复用开漏输出

C:推挽输出

D:复用推挽输出

E: 模式总结 

二:寄存器

一组有16个IO口

PA0~PA15;     PB0~PB15

介绍GPIO相关的寄存器;

A:端口配置低寄存器(CRL)

        注意这个是低寄存器,下面的 B:端口配置高寄存器(CRH)是一个高的寄存器;说明64位控制16个IO口; 也就是说4位控制一个IO

B:端口配置高寄存器(CRH)

    注意这个是高寄存器,下面的 A:端口配置低寄存器(CRL)是一个高的寄存器;说明64位控制16个IO口; 也就是说4位控制一个IO

C:端口输入数据寄存器(IDR)

1位控一个IO口

D:端口输出数据寄存器(ODR)

1位控一个IO口

E:端口位设置/清除寄存器(GPIOx_BSRR)

三:GPIO配置步骤 

__HAL_RCC_GPIOX_CLK_ENABLE在stm32f1xx_hal rcc.h文件夹下面

剩下的4个函数都在stm32f1xx_hal_gpio.h文件里面。

 

只有输入模式才可以选择上下拉; 

 四:实验

1: led闪烁

#include "stm32f1xx_hal.h" 
#include "rcc.h"
#include "led.h"
#include "delay.h"/*LED的一段接在高电平,所以低电平点亮*/
void LED_Init(void)
{__HAL_RCC_GPIOB_CLK_ENABLE() ;GPIO_InitTypeDef GPIO_InitType;GPIO_InitType.Mode=GPIO_MODE_OUTPUT_PP;GPIO_InitType.Pin=GPIO_PIN_5;GPIO_InitType.Pull=GPIO_NOPULL;GPIO_InitType.Speed=GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOB,&GPIO_InitType); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);}	int main(void)
{HAL_Init();                         /* 初始化HAL库 */sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */delay_init(72);                     /* 延时初始化 */LED_Init();                        /* LED初始化 */while(1){
//			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);
//			delay_ms(200);
//			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);
//			delay_ms(200);HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);delay_ms(200);}}

2:按键控制LED

 我们一般采用的是:按键的一段接地;结论---按下低电平,   不按下--高电平

                                按键一段接电源,那就和上面的相反

        判断按键没有按下时是高电平还是低电平,需要根据具体的电路设计和按键的工作原理来确定。

        一般来说,按键电路默认一端接地,另一端与I/O相连。当按键没有被按下时,按键电路处于开路状态,此时I/O口所连接的引脚电平状态取决于电路设计。如果电路设计中,按键未按下时通过电阻连接到高电平(例如3.3V或5V,上拉),那么当按键未按下时,I/O口接收到的就是高电平。反之,如果电路设计中,按键未按下时直接与低电平(例如0V或GND下拉)相连,那么当按键未按下时,I/O口接收到的就是低电平。

#include "stm32f1xx_hal.h"
#include "rcc.h"
/*LED的一段接在高电平,所以低电平点亮*/
void LED_Init(void)
{__HAL_RCC_GPIOB_CLK_ENABLE() ;GPIO_InitTypeDef GPIO_InitType;GPIO_InitType.Mode=GPIO_MODE_OUTPUT_PP;GPIO_InitType.Pin=GPIO_PIN_5;GPIO_InitType.Pull=GPIO_NOPULL;GPIO_InitType.Speed=GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOB,&GPIO_InitType); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);}	
void KEY_Init(void)
{__HAL_RCC_GPIOB_CLK_ENABLE() ;GPIO_InitTypeDef GPIO_InitType;GPIO_InitType.Mode=GPIO_MODE_INPUT;GPIO_InitType.Pin=GPIO_PIN_1;GPIO_InitType.Pull=GPIO_PULLUP; //上拉GPIO_InitType.Speed=GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOB,&GPIO_InitType); 		}	uint8_t KEY_Scan(void)
{		//按下if (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==0){delay_ms(10);if (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==0){while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==0);return 1;}}//按键没有按下return 0;}
int main(void)
{HAL_Init();                         /* 初始化HAL库 */sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */delay_init(72);                     /* 延时初始化 */LED_Init();                        /* LED初始化 */KEY_Init();while(1){if (KEY_Scan()==1){//按下HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);}}}

本视频相关材料

链接:https://pan.baidu.com/s/1eaGxz4OkIzhcatCcs4ZUbg?pwd=5j2p 
提取码:5j2p 
--来自百度网盘超级会员V2的分享

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

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

相关文章

【办公类-21-09】三级育婴师 视频转文字docx(等线小五单倍行距),批量改成“宋体小四、1.5倍行距、蓝色字体”

作品展示: 背景需求: 一、视频处理 1、育婴师培训的现场视频 2、下载视频,将视频换成考题名称 二、音频 视频用格式工厂转成MP3音频 3、转文字doc 把音频放入“网易云见外工作台”转换为“文字" 等待5分钟,音频文字会被写…

目标检测5:采用yolov8, RK3568上推理实时视频流

上一个效果图,海康球机对着电脑屏幕拍,清晰度不好。 RK3568接取RTSP视频流,通过解码,推理,编码,最终并把结果推出RTSP视频流。 RK3568 推理 数据集采用coco的80个种类集,通过从yovo8.pt&#x…

XSS-Labs靶场1---11关

一、XSS环境搭建: [ 靶场环境篇 ] XSS-labs 靶场环境搭建(特别详细)_xss靶场搭建-CSDN博客 (该博主总结的较为详细,若侵权必删) 常用的xss攻击语句: 输入检测确定标签没有过滤后,为了显示存在漏洞&#…

贪心算法(greedy algorithm,又称贪婪算法)详解(附例题)

目录 基本思想一)概念二)找出全局最优解的要求三)求解时应考虑的问题四)基本步骤五)贪心策略选择六)实际应用 1.零钱找回问题2.背包问题3.哈夫曼编码4.单源路径中的Djikstra算法5.最小生成树Prim算法 基本…

从 iPhone 15/15 Pro 恢复丢失数据的 3 种方法

毫无疑问, iPhone 15 是迄今为止最令人印象深刻的 iPhone 。另一方面,我们知道,设备上保存的数据无论多么可靠,在设备使用过程中都可能因各种原因而丢失。 由于这些设备的性质,您在使用 iPhone 15、iPhone 15 Pro 或 …

【Spring底层原理高级进阶】Spring Kafka:实时数据流处理,让业务风起云涌!️

🎉🎉欢迎光临🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟特别推荐给大家我的最新专栏《Spring 狂野之旅:从入门到入魔》 🚀 本…

微服务技术栈SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式(三):Docker

文章目录 一、基本介绍二、环境配置三、Docker基本操作3.1 镜像操作3.2 容器操作3.2.1 演示命令run、ps、logs3.2.2 演示命令exec、rm、exit(退出)3.3 数据卷3.3.1 直接挂载3.3.2 宿主机挂载3.3.3 两种方式的对比 四、Dockerfile自定义镜像五、Docker-Co…

【开源】SpringBoot框架开发固始鹅块销售系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 鹅块类型模块2.3 固始鹅块模块2.4 鹅块订单模块2.5 评论管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 鹅块类型表3.2.2 鹅块表3.2.3 鹅块订单表3.2.4 鹅块评论表 四、系统展示五、核心代码5.…

上门服务小程序|上门服务系统成品功能包含哪些?

随着移动互联网的快速发展,上门服务小程序成为了一种创新的家政服务模式。它不仅为用户带来了极大的便利,还能在提高服务效率和质量方面发挥作用。通过上门服务小程序,用户可以轻松预约按摩或理疗服务,无需繁琐操作,只…

QT中使用QProcess执行命令,实时获取数据,例如进度条

前言 因为之前写了一个接收和发送文件的脚本&#xff0c;然后又需要获取进度&#xff0c;同步到进度条中。 效果&#xff1a; 使用正则匹配&#xff0c;获取命令行命令中的以下数据&#xff0c;然后同步到进度条 源码demo&#xff1a; 非完整代码&#xff1a; #include <Q…

2023最新群智能优化算法:巨型犰狳优化算法(Giant Armadillo Optimization,GAO)求解23个基准函数(提供MATLAB代码)

一、巨型犰狳优化算法 巨型犰狳优化算法&#xff08;Giant Armadillo Optimization&#xff0c;GAO&#xff09;由Omar Alsayyed等人于2023年提出&#xff0c;该算法模仿了巨型犰狳在野外的自然行为。GAO设计的基本灵感来自巨型犰狳向猎物位置移动和挖掘白蚁丘的狩猎策略。GAO…

MySQL安装使用(mac)

目录 一、下载MySQL 二、环境变量 三、启动 MySql 四、初始化密码设置 一、下载MySQL 打开 MySql 官方下载页面 我是macOS12&#xff0c;所以选择了8.0.30 下载完成之后&#xff0c;打开安装&#xff0c;一直下一步安装完成&#xff0c;在最后安装完成时&#xff0c;会弹出…

Spring Boot搭建入门

Spring Boot简介 Spring Boot是对Spring进行的高度封装&#xff0c;是对Spring应用开发的高度简化版&#xff0c;是Spring技术栈的综合整合&#xff0c;是J2EE的一站式解决方案。想要精通Spring Boot的前提是需要熟悉Spring整套技术栈原理与内容。 Spring Boot的优点&#xf…

粉嘟嘟的免费wordpress模板

粉色好看的wordpress免费模板&#xff0c;用免费wordpress模板也可以搭建网站。 https://www.wpniu.com/themes/11.html

typescript学习(更新中)

目录 开发环境搭建类型如何声明有哪些类型编译配置文件 开发环境搭建 npm i -g typescripttsc检查是否安装成功 类型如何声明 // 先声明再赋值 let a: number a 1// 直接赋值 let b 1function sum(a: number, b: number): number {return a b } console.log(sum(1, 2))有…

遥感领域的AI革命:ChatGPT与成像光谱的完美结合

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已逐渐渗透到各个领域&#xff0c;为传统行业带来了前所未有的变革。其中&#xff0c;遥感技术作为观测和解析地球的重要手段&#xff0c;正逐渐与AI技术相结合&#xff0c;为地球科学研究与应用提供了全新的…

Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(二)

Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验&#xff08;前导&#xff09; Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验&#xff08;一&#xff09; Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验&#xff08;三&#xff09; 五、实验目的 本次实验使用电脑上的…

锐科达SV-7043VP 网络有源吸顶喇叭 POE供电ip广播吸顶喇叭

锐科达SV-7043VP 网络有源吸顶喇叭 POE供电ip广播吸顶喇叭 该设备配备了10/100M以太网接口&#xff0c;内置了高品质扬声器&#xff0c;通过内置的功放和喇叭输出&#xff0c;可提供高达10W的音效功率。SV-7043VP作为SIP系统的播放终端&#xff0c;适用于各种需要广播播放的场…

【uniapp】uniapp小程序中实现拍照同时打开闪光灯的功能,拍照闪光灯实现

一、需求前提 特殊场景中&#xff0c;需要拍照的同时打开闪光灯&#xff0c;&#xff08;例如黑暗场景下的设备维护巡检功能&#xff09;。 起初我是用的uviewui中的u-upload组件自带的拍照功能&#xff0c;但是这个不支持拍照时打开闪光灯&#xff0c;也不支持从通知栏中打开…

【排序】详解冒泡排序

一、思想 冒泡排序的基本思想是利用两两比较相邻记录的方式&#xff0c;通过一系列的比较和交换操作&#xff0c;使得较大或较小的元素逐渐移动到数列的一端。在每一轮的排序过程中&#xff0c;都会从数列的起始位置开始&#xff0c;对相邻的元素进行比较&#xff0c;如果它们…