STM32 GPIO的基础实现

2023-11-18


什么是GPIO

  GPIO 英文全称 general porpose intput output 即,通用输入输出端口。 顾名思义,芯片最基本的输入输出接口。
  STM32或其它单片机芯片的GPIO引脚可以与外部设备连接起来,可以实现与外部设备通讯、控制或者数据采集的功能。除了电源类引脚(VDD、VSS、VREF+、VREF-、VSSA、VDDA)、 晶振引脚(OSC_IN、OSC_OUT )复位管引脚NRST、BOOT 引脚(BOOT0 、BOOT1),其它一般都是GPIO引脚 , 取名 PA1、PA2…PB1、PB2…PC1、PD1… 等等。
  作为输出时,可以控制为外设的高低电平,控制LED、 输出PWM、输出时钟等等,作为输入可以用作ADC、DAC、电平检测、中断等功能。


STM32中GPIO的基础实现

  GPIO最为最基础的实现也就是将端口作为高低电平来使用。

1、初始化

  下面的代码stm32的GPIO初始化,其中GPIO_Output_Init_PE5(void)是初始化PE5口为输出的GPIO口,将端口的初始化结构体赋值并将其设置为高电平。其中GPIO_Input_Init(void)是将PA5设置为输入的GPIO口。
  


//GPIO 输出初始化
void GPIO_Output_Init_PE5(void)
{    	 
	GPIO_InitTypeDef  GPIO_InitStructure;	
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);//使能GPIOE时钟	
	//GPIO初始化设置
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//指定pin脚
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//无上下拉
	GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化	
	GPIO_SetBits(GPIOE,GPIO_Pin_5);//设置高电平
}

//GPIO 输入初始化
void GPIO_Input_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //指定pin脚
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//指定输入模式
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
	GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化
}

2、控制输出

  前面如果已经初始化好了输出模式,那么我们就可以将该口的输出就可以任由我们控制了。通过GPIO_ResetBits函数可以将指定口的电平置低,而通过GPIO_SetBits则可以将指定的端口置高。

//输出低
GPIO_ResetBits(GPIOE,GPIO_Pin_5);//设置PE5为低电平
//输出高
GPIO_SetBits(GPIOE,GPIO_Pin_5);//设置PE5为高电平

3、控制输入

   如果已经初始化好了输入模式,那我们就可以将该口用来检测输入和打印效果,见下面的程序实现。

//##############  输入电平测试  ############//
void  GpioLevelTest()
{ 
    if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5))//返回为1,检测为高电平
	{
		printf("------->1\r\n");
	}
	else
	{
		printf("------->0\r\n");
	}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32 GPIO的基础实现 的相关文章

随机推荐

  • kafka消费的三种模式_快速认识Kafka

    1 Kafka是什么 简单的说 Kafka是由Linkedin开发的一个分布式的消息队列系统 Message Queue kafka的架构师jay kreps非常喜欢franz kafka 觉得kafka这个名字很酷 因此将linkedin
  • 【TypeScript(一)】TypeScript的变量类型及声明

    TypeScript的变量类型及声明 TS和JS最大的区别就是在其中给变量引入了类型的概念 比如像之前我们使用JS的时候 var a 10 这时a是数据类型 但当如果我们后面要使用a 我们也可以a hello 这时a就变成了一个字符串类型
  • 微信小程序开发设置获取权限管理,摄像头权限,位置权限,用户信息权限等

    在小程序开发的时候 我们总会遇到很多权限问题 比如摄像头权限 位置权限 用户信息权限等 如果不加以判断 很难给用户一个好的体验 有一天 小明来参观一个拍照微信小程序 他很感兴趣 看着精美的页面 忍不住点击了拍照按钮 然而 他太兴奋了 以至于
  • linux 系统调用列表 /usr/include/asm/unistd.h

    一 进程控制 fork 创建一个新进程 clone 按指定条件创建子进程 execve 运行可执行文件 exit 中止进程 exit 立即中止当前进程 getdtablesize 进程所能打开的最大文件数 getpgid 获取指定进程组标识
  • pybind 传递指针

    编码h264可以参考 https blog csdn net jacke121 article details 87484745 python部分 先接收指针vp 再调用 是可以的 coding utf 8 import binddemo
  • 连接db2的客户端工具(原创)

    最近在用友做项目 用得数据库是db2 以前从来没用过 但是对于写程序来说 啥数据库都一样 都是那几个语句 能执行就行 说是这样说 但是真用上就发现问题了 最大的就是没有好的客户端工具 网上搜了很多 什么toad quest都用了 感觉用着都
  • pytorch入门day5-卷积神经网络实战

    目录 LeNet网络实战 ResNet 训练函数 LeNet网络实战 import torch from torch utils data import DataLoader from torchvision import datasets
  • IDEA集成Git及相关操作详解

    IDEA集成Git 一 环境准备 1 配置Git忽略文件 2 Git程序定位 二 Git集成及相关操作 1 Git本地库初始化 2 文件 或目录 添加暂存区及添加本地库 3 查看历史版本及版本切换 4 创建及切换分支 5 合并分支 一 环境
  • JavaScript 设计模式 – 通过示例进行解释

    大家好 在本文中 我将解释什么是设计模式以及它们为何有用 目录 什么是设计模式 创意设计模式 单例模式 工厂方法模式 抽象工厂模式
  • CORS on Nginx

    https enable cors org server nginx html Wide open CORS config for nginx location if request method OPTIONS add header Ac
  • 麒麟V10编译安装GCC9.3

    在麒麟V10 arm64架构 桌面版系统上编译安装gcc9 3版本 麒麟V10自带的gcc版本是5 4 根据以下步骤顺序执行即可安装成功 1 下载解压gcc wget https mirrors tuna tsinghua edu cn g
  • 软件外包开发的原型图工具

    在软件开发中需要用到原型图工具来将需求转化为图形界面 这样可以更好更准确的表达需求的实现方式 与传统的需求文档相比 原型图的表达更直接 不但可以画出UI 也支持UI之间的跳转连接 与最终的实现效果基本是一样的 今天和大家分享几个原型图工具
  • python-jinja2模板引擎

    文章目录 1 什么是Jinja2模板引擎 2 语法 1 Jinja2变量显示语法 变量名 过滤器 如何自定义过滤器 2 for循环 3 if语句 4 宏的操作 相当于函数 5 include包含操作 6 模板的继承 一般网站的导航栏和底部不
  • Array.splice()--删除数组中重复的数据

    Array splice 删除数组中重复的数据 splice方法从一个数组中移除一个或多个元素 如果必要 在所移除元素的位置上插入新元素 返回所移除的元素 用法 my array splice start deleteCount value
  • Seata1.4.2+Nacos搭建使用

    Seata1 4 2 Nacos搭建使用 前言 一 搭建seata1 4 2服务端 1 下载seata1 4 2 2 创建相关数据库和表 3 配置Seata 1 4 2 4 启动seata1 4 2 二 客户端使用seata1 4 2 1
  • 蓝桥杯题目练习(星际交流)

    算法训练VIP 星际交流 原题链接 星际交流 题目描述 人类终于登上了火星的土地并且见到了神秘的火 星人 人类和火星人都无法理解对方的语言 但是我们的科学家发明了一种用数字交流的方法 这种交流方法是这样 的 首先 火星人把一个非常大的数字告
  • 深度CV基础——图像噪声和滤波

    一 图像噪声 1 图像噪声的概念 图像噪声是图像在获取或是传输过程中受到随机信号干扰 妨碍人们对图像理解及分析处理的信号 很多时候将图像噪声看做多维随机过程 因而描述噪声的方法完全可以借用随机过程的描述 也就是使用随机过程的描述 也就是用它
  • SQL Server 修改字段属性信息报错

    当表创建好以后再次修改表信息保存会出现 选择Tools gt Options 选中勾掉点OK就可以了
  • docker-compose单机容器编排的神器

    docker compose和docker兼容表 简介 docker所制作的容器多半需要大量的依赖 有些可能依赖于其他容器的启动 比方说一个springboot的项目 它需要rabbitMQ和esearch什么的 有些没装数据库的机器需要m
  • STM32 GPIO的基础实现

    什么是GPIO GPIO 英文全称 general porpose intput output 即 通用输入输出端口 顾名思义 芯片最基本的输入输出接口 STM32或其它单片机芯片的GPIO引脚可以与外部设备连接起来 可以实现与外部设备通讯