stm32HAL库-GPIO

一 什么是 GPIO:
GPIO(general porpose intput output), 通用输入输出端口 .
二 我们先认识芯片控制 GPIO 输出控制。
2.1LED 硬件原理如图:
当电流从这根电线流通, LED 亮。当电流不通过这根电线, LED 灭。
上面 PF** ,芯片电压为低, LED 亮。为高时,不亮。
上面 PE** ,芯片电压为高, LED 亮。为低时,不亮。
(可以见得,我们的嵌入式工程师编码与硬件工程师密切相关)
还可以结论:电流的高低输出,程序决定的。芯片侧 程序决定 给这根电线供电、
或者断电。芯片外侧接 LED 灯,我们肉眼观察 led 的亮灭。判断我们控制手段是
否达成。
2.2.3.1 ;流程图第一步时钟使能函数:

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph,NewState);
RCC_AHB2PeriphClockCmd(RCC_AHB2Periph, NewState);
RCC_AHB3PeriphClockCmd(RCC_AHB3Periph,NewState);
RCC_APB1PeriphClockCmd( RCC_APB1Periph, NewState);
RCC_APB2PeriphClockCmd(RCC_APB2Periph, NewState);
选择: RCC_AHB1PeriphClockCmd RCC_AHB1Periph_GPIOF ENABLE ;
函数解释:让第 F 组成员都有时钟控制。没有这个时钟信号,都无法工作。
参数 1:RCC_AHB1Periph_GPIOF, 选择第几组。
参数 2 DISABLE/ENABLE
2.2.3.2 流程图第二部 GPIO 基本配置:
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
函数解释:让程序决定第几组第几根引脚,如何工作。
参数 1 GPIOx :第几组,
GPIOA/GPIOB/GPIOC/GPIOD/GPIOE/GPIOF/GPIOG/GPIOH/GPIOI/GPIOJ/GPI
OK
说明:查看确认引脚号,例如 PF9, 对应组为: GPIOF
参数 2 :第几根,如何干活。
GPIO_InitTypeDef 结构体名字;
结构体名字 .GPIO_Pin = 引脚号 ; GPIO_Pin_0/....GPIO_Pin_15/GPIO_Pin_ALL
结构体名字 .GPIO_Mode = 输入输出类型 ; GPIO_Mode_IN/GPIO_Mode_OUT/
结构体名字 .GPIO_Speed = 速度 ; GPIO_Low_Speed/...GPIO_High_Speed
结构体名字 .GPIO_OType = 类型 ; GPIO_OType_PP/GPIO_OType_OD
结构体名字 .GPIO_PuPd = 上下拉电阻 ; GPIO_PuPd_UP /GPIO_PuPd_DOWN
2.2.3.3 流程图第三步 GPIO 基本操控:
GPIO_SetBits(GPIOF, GPIO_Pin_9); PF9 输出高电平,根据硬件原理图, LED
GPIO_ResetBits(GPIOF, GPIO_Pin_9);PF9 输出低电平,根据硬件原理图, LED
整体编码整体如下:
// 时钟使能
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
//GPIO 基本参数配置
GPIO_InitTypeDef led_gpio_initstruct;
led_gpio_initstruct.GPIO_Mode = GPIO_Mode_OUT;
led_gpio_initstruct.GPIO_OType = GPIO_OType_PP;
led_gpio_initstruct.GPIO_Pin = GPIO_Pin_9;
led_gpio_initstruct.GPIO_Speed = GPIO_High_Speed;
GPIO_Init(GPIOF,&led_gpio_initstruct);
while(1)
{
//gpio 的基本操控
GPIO_SetBits(GPIOF, GPIO_Pin_9);
GPIO_ResetBits(GPIOF, GPIO_Pin_9);
// Bit_RESET Bit_SET
//GPIO_WriteBit(GPIOF,GPIO_Pin_9,1);
//GPIO_Write(GPIOF,0X0200);
}

 第三:请对于GPIO的基本操控进行改写。要求LED灯会一闪一闪的。

流程: 1 打开 LED 2 延时, 3 关闭 LED 4 延时。重复执行四个步骤
延时函数实现: delay() { uint32_t t = 50000;while(t--)}
while(1)
{
GPIO_SetBits(GPIOF,GPIO_Pin_10);
delay(time);
GPIO_ResetBits(GPIOF, GPIO_Pin_10);
delay(5000-time);
time++;
if(time == 5000) break;
}
while(1)
{
GPIO_SetBits(GPIOF,GPIO_Pin_10);
delay(time);
GPIO_ResetBits(GPIOF, GPIO_Pin_10);
delay(5000-time);
time--;
if(time == 0) break;
}

3.1GPIO 的结构图,从电器特性来看代码:
1. 保护二极管:保护电压数值,不超过 VDD.
流程: 1 打开 LED 2 延时, 3 关闭 LED 4 延时。重复执行四个步骤
延时函数实现: delay() { uint32_t t = 50000;while(t--)}
while(1)
{
GPIO_SetBits(GPIOF,GPIO_Pin_10);
delay(time);
GPIO_ResetBits(GPIOF, GPIO_Pin_10);
delay(5000-time);
time++;
if(time == 5000) break;
}
while(1)
{
GPIO_SetBits(GPIOF,GPIO_Pin_10);
delay(time);
GPIO_ResetBits(GPIOF, GPIO_Pin_10);
delay(5000-time);
time--;
if(time == 0) break;
} 2. 可调节电阻,上方接通,为高电平。下方接通为低电平。
3. 施密特触发器。三角形的宽的一端有电压数值,尖端会输出 1 。反之为 0
4. 两个三极管,上方导通,输出的是高信号对应高电平。下方导通,输出的低电
平对应的 0 信号。
GPIO_InitTypeDef led_gpio_initstruct; led_gpio_initstruct.GPIO_Mode =
GPIO_Mode_OUT; 决定是输入 , 输出 , 复用 , 模拟 led_gpio_initstruct.GPIO_OType
= GPIO_OType_PP; 决定是推挽还是开漏 led_gpio_initstruct.GPIO_Pin =
GPIO_Pin_9; 决定哪一个引脚 led_gpio_initstruct.GPIO_Speed =
GPIO_High_Speed; 决定最大输出速度 GPIO_Init(GPIOF,&led_gpio_initstruct);

3.2GPIO 输出模式:
推挽输出 :推出去为推。拉回来为挽。推挽输出可以输出高电平与低电平。
当高电平输出的时候, LED 灭。当低电平输出的时候 LED 亮。局限在于推挽输出
引脚与输入引脚连接后,容易烧坏板子。因此引入开漏输出。不能与数据输入同
时存在。
开漏输出 :开路输出 , 仅仅输出低电平和高阻态,开漏输出会有外部电流供电,
LED 默认为 LED 亮。当输出低电平会产生短路,实现了对于 LED 灭。耗电时间长
的,耗电量大的首选这个。而且,采集信号输出信号可以同时存在。
3.3GPIO 输出开发任务:
任务选择:
开漏输出用例:
推挽输出用例:
LED 灯的代码封装 : 初始化封装, led.c led.h
输出总结:
输出模式: 共计四种输出模式。 开漏输出 推挽输出 开漏复用 * * 推挽复用
两种输出模式仅仅是数据来源来自 复用功能输出而不是输出寄存器。完全可以
参考( 开漏输出和推挽输出

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

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

相关文章

修改Ubuntu远程登录欢迎提示信息

无论何时登录公司的某些生产系统,你都会看到一些登录消息、警告或关于你已登录服务器的信息,如下所示。 修改方式 1.打开ubuntu终端,进入到/etc/update-motd.d目录下面 可以发现目录中的文件都是shell脚本, 用户登录时服务器会自动加载这个目录中的文件…

uni-app - 使用地图功能打包安卓apk的完美流程以及重要的注意事项(带您一次打包成功)

在移动应用开发中,地图功能是一个非常常见且实用的功能,可以帮助用户快速定位并浏览周边信息。而在uni-app开发中,使用地图功能也是一项必备技能。本文将介绍uni-app使用地图功能打包安卓apk的注意事项,帮助开发者顺利完成地图功能…

c#数据库: 5.删除指定年级的学生信息

将成绩为100分的学生信息从学生信息表中删除。删除前的学生信息表如图: using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks;namespace StudentDelete {internal class Progr…

探索设计模式的魅力:主从模式与AI大模型的结合-开启机器学习新纪元

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 ✨欢迎加入探索主从模式与AI大模型之旅✨ 🌟Hey, tech enthusiasts! 你是否还在追…

列表页和表单页:移动UI设计的噩梦,该如何破?

hello,我是大千UI工场,列表页和表单页在网页UI中非常常见,极易处理,如果挪到了移动UI上,简直就是设计的噩梦,本文分析噩梦成因,给出破解之道和实际案例。 一、列表页——移动UI设计的噩梦 列表页…

Macs Fan Control Pro for mac激活版:macOS 平台的风扇控制软件

Macs Fan Control Pro是一款用于 macOS 平台的风扇控制软件,它允许用户监控和调整 Mac 电脑的风扇转速。以下是该软件的一些特点和功能: Macs Fan Control Pro for mac激活版下载 风扇监控:Macs Fan Control Pro 提供实时的风扇转速监控&…

2024.4.29

模板类实现顺序栈 #include <iostream>using namespace std; template <typename T> class Seqlite{T data[30];int len0; public:void head_inst(T date);void head_dele();void show(); }; template <typename T> //头插函数 void S…

Chrome 网络调试程序 谷歌网络调试 network

目录 1.网络面板总览2.概况了解3.Waterfall接口排队等待时间4.关注请求接口的Size,可能是占据内存溢出的接口5.过滤器一栏 fetch/xhr 什么意思6. Stalled 什么意思7.Queueing 什么意思8.Queueing和Stalled之间什么关系9.为什么会有阻塞状态10.Time列是pending 什么意思 1.网络面…

Sublime Vim模式配置:q关闭当前标签页

在Sublime安装目录下的->Packages文件夹下新建User文件夹创建文件Vintage.sublime-commands 路径为Sublime安装目录->Packages->User->Vintage.sublime-commands文件内容如下[{"caption": ":w - Save","command": "save"}…

面试ssss

深拷贝和浅拷贝 深拷贝和浅拷贝是关于对象&#xff08;包括数组&#xff09;复制的两个概念。 浅拷贝在复制对象属性的时候&#xff0c;复制的是指针&#xff08;引用&#xff09;&#xff0c;所以&#xff0c;修改目标对象的属性值会影响到原对象的对应属性值 obj。assign …

Hadoop之路---伪分布式环境搭建

hadoop更适合在liunx环境下运行&#xff0c;会节省后期很多麻烦&#xff0c;而用虚拟器就太占主机内存了&#xff0c;因此后面我们将把hadoop安装到wsl后进行学习,后续学习的环境是Ubuntu-16.04 &#xff08;windows上如何安装wsl&#xff09; 千万强调&#xff0c;创建完hado…

Ansible-Tower安装破解

主机IP地址版本Ansible192.168.169.2042.9.1Tower192.168.169.2043.6.2 基础环境 systemctl disable firewalld --now && setenforce 0 sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config mv /etc/yum.repos.d/CentOS-* /tmp/ curl -o /etc/yum.repo…

JAVA实现easyExcel批量导入

注解类型描述ExcelProperty导入指定当前字段对应excel中的那一列。可以根据名字或者Index去匹配。当然也可以不写&#xff0c;默认第一个字段就是index0&#xff0c;以此类推。千万注意&#xff0c;要么全部不写&#xff0c;要么全部用index&#xff0c;要么全部用名字去匹配。…

Unity 实现原神中的元素反应

一、元素反应 原神中共有七种元素&#xff0c;分别是水、火、冰、岩、风、雷、草。这七种元素能互相作用 Demo下载&#xff1a;Download 元素反应表格图示&#xff0c;可能不够精准 /火水雷冰草岩风绽放原激化火/蒸发超载融化燃烧结晶扩散烈绽放/水蒸发/感电冻结/碎冰绽放结晶…

mysql优化面试总结

mysql优化 和 mysql优化之索引 两篇文章有大量的实验性的内容&#xff0c;我暂时没时间理解&#xff0c;把八股部分总结到这篇文章中&#xff0c;方便记忆 我们为什么要对sql进行优化 我们开发项目上线初期&#xff0c;由于业务数据量相对较少&#xff0c;一些SQL的执行效率对…

计算机服务器中了mkp勒索病毒怎么办,mkp勒索病毒解密数据恢复流程

网络技术的不断应用与发展&#xff0c;为企业的生产运营带来了极大便利&#xff0c;越来越多的企业依赖网络开展各项工作业务&#xff0c;网络也大大提升了企业的生产运营效率&#xff0c;但网络是一把双刃剑&#xff0c;在为企业提供便利的同时&#xff0c;也为企业的数据安全…

泽攸科技无掩膜光刻机在MEMS压力传感器制造中的应用

在当今的科技快速发展时代&#xff0c;微电子机械系统&#xff08;MEMS&#xff09;技术已成为推动现代传感器技术革新的关键力量。MEMS压力传感器&#xff0c;作为其中的重要分支&#xff0c;广泛应用于生物医学、航空航天、汽车工业等多个领域。随着对传感器性能要求的不断提…

后台架构总结

前言 疫情三年&#xff0c;全国各地的健康码成为了每个人的重要生活组成部分。虽然过去一年&#xff0c;但是回想起来任然历历在目。 今天我就通过当时基于小程序的健康码架构&#xff0c;来给大家讲一下如何基于java&#xff0c;springboot等技术来快速搭建一个后台业务系统…

Docker基本操作 挂载数据卷

在创建一个容器的时候让容器挂载到一个数据卷: 命令:docker run --name mn -p 80:80 -v html:/usr/share/nginx/html -d nginx 这里的数据卷如果没有提前创好会自动创建 下边是命令解析 将容器挂载到一个数据卷之后 可以在查看数据卷的目录 在数据卷的目录可以找到容器的内容…

自然语言处理 (NLP) 和文本分析

自然语言处理 (NLP) 和文本分析&#xff1a;NLP 在很多领域都有着广泛的应用&#xff0c;如智能助手、语言翻译、舆情分析等。热门问题包括情感分析、命名实体识别、文本生成等。 让我们一起来详细举例子的分析讲解一下自然语言处理&#xff08;NLP&#xff09;和文本分析的应用…