首页 > 其他分享 >GPIO

GPIO

时间:2023-08-12 21:22:08浏览次数:29  
标签:输出 推挽 GPIOx GPIOC 寄存器 GPIO

 通过编程读写相关寄存器。就可以实现对引脚的控制

 先看两个32位的配置寄存器

假设点亮某个LED灯,需要先设置端口配置高寄存器(GPIOx_CRH) (x=A..E)(配置成推挽输出)

 这个配置就是GPIOC->CRH=0x00300000

PS: 输出速度一般按最低的就行,当然要求不高直接拉满

对应的使用库函数为

    GPIO_InitTypeDef A;
    A.GPIO_Mode=GPIO_Mode_Out_PP  ; //通用推挽输出
    A.GPIO_Pin=GPIO_Pin_13;
    A.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &A );

 

 

为什么用高寄存器,不用低寄存器?

因为要点亮的是GPIOC的13口   (GPIOC有1-15   一共16个口)

0-7口用低寄存器,8-15口用高寄存器  (手册上也有写比如上图的这里)

 

配置好之后就可以配置端口输出数据寄存器(GPIOx_ODR) (x=A..E),自由的输出高低电平

 GPIOC->ODR=0x00002000   (高位在前低位在后)

对应的使用库函数表示就为

GPIO_SetBits(GPIOC,GPIO_Pin_13);

 

GPIO的工作原理

输入电路,输入的是外部的电平信号,入口有二极管防止过高和过低的电压,电压信号通过施密特触发器处理后写入到后面的数据寄存器的某一位,然后单片机读取这个寄存器就可以得到对应的值(电平),模拟输入到ADC,复用到其他外设(串口输入等)

 

可以通过设置端口模式寄存器来选择使用上拉电阻或下拉电阻

 输出电路,输出微控制器内部的控制信号(可关闭,使引脚只有输入功能)

通过输出数据寄存器(整体读写)输出的话,某一位就可以控制某个口的高低电平。 通过置位(1)/复位寄存器(0)可以分别操作输出数据寄存器的某一位,使其置1或置0,同时也不影响其他位,高效便捷。置位/复位寄存器选择哪个位它就为1  。 第三种通过“位带”处理,这段地址映射了RAM和外设寄存器所有的位,可改某一位

PS:见手册8.2.5-6

端口位清除寄存器(GPIOx_BRR)_16与端口位设置/清除寄存器(GPIOx_BSRR)_32的高16位作用相同,分成两个是因为操作方便,一个写0一个写1,需要信号同步同时写0和1的时候可以只用BSRR

 

0

 上图为推挽输出(使用较多),需要考虑单片机引脚的直接驱动能力(毫安级别)

 

 

 开漏输出输出1时,N-MOS闭合,IO口高阻态;输出0时导通,IO口为低,此时只有低电平有驱动能力

需要是输出高电平时需要接上拉电阻,一般工作在电平不匹配的场合(比如使3.3V的单片机输出5V),具有线与特性

 推挽复用输出与推挽输出类似,只是控制源来自片上外设,比如PWM,串口等,开漏复用输出同理(比如I2C等)。

 

标签:输出,推挽,GPIOx,GPIOC,寄存器,GPIO
From: https://www.cnblogs.com/liujinmeng/p/17625357.html

相关文章

  • Zynq7020 SDK 初学篇(3)- PS 端 GPIO Key
    一、开发环境 Zynq7020+Vivado2017.4二、开发背景:会使用Vivado开发工具,不熟悉的可以参考正点原子开发文档三、功能实现,按键控制LED定时闪烁,这里基于上一篇GPIOLED的基础上编写四、实现步骤:1、配置PS端BlockDesignMIO功能,根据配置表编写代码 ......
  • Zynq7020 SDK 初学篇(2)- PS 端 GPIO LED
    一、开发环境 Zynq7020+Vivado2017.4二、开发背景:会使用Vivado开发工具,不熟悉的可以参考正点原子开发文档三、功能实现,LED定时闪烁四、实现步骤:1、配置PS端BlockDesignMIO功能,根据配置表编写代码   2、导出到SDK,编写代码,编译运行#inclu......
  • 01-[Linux][GPIO]GPIO编程示例代码
    基于MTK平台的AndroidLinux驱动1、DTS配置如下gpio_sample:gpio_sample{compatible="mediatek,gpio-sample";input,high-gpio=<&pio77GPIO_ACTIVE_HIGH>;input,low-gpio=<&pio70GPIO_ACTIVE_HIGH>;out......
  • GPIO口的推挽输出与开漏输出
    https://baijiahao.baidu.com/s?id=1609057502892097103&wfr=spider&for=pchttps://zhuanlan.zhihu.com/p/532628463电路中加上拉电阻或下拉电阻的目的是确定某个状态电路中的高电平或者低电平。上、下拉电阻的左右1.提高电路的稳定性,避免引起误操作。如下图......
  • GPIO工作原理
     有FT的引脚,表示可接受5V电压。1.1GPIO工作方式参考帖子:https://blog.csdn.net/k666499436/article/details/123845466?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168957959916800182714620%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D......
  • ESP32 – GPIO 引脚参考大全
     ESP32–GPIO引脚参考大全ESP32模组引脚图ESP32开发板引脚图不建议使用或限制使用的引脚Strapping引脚集成在ESP-WROOM-32的SPIflash引脚仅输入引脚ESP32周边设备:18个模数转换器(ADC)通道4组SPI接口I2C通讯协议PWM数模转换器(DAC)I2S高......
  • STM32笔记 晶振 GPIO 寄存器
    晶振:在各种电路中,产生震荡频率的元器件(频率越高,单片机运行的速度越快)。2个外部:通过晶振高速:HSE--4~16MHz(咱们使用8MHz)--整个单片机提供时钟低速:LSE--32.768KHz--RTC提供(实时时钟)2个内部:通过RC振荡电路高速:HSI--8MHz低速:LSI--40KHz--看门狗定时器GPIO:管......
  • AHB GPIO项目理解
     框架与协议理解1--基本框架  框架与协议理解2--portin和portout的访问maskedbit:只对当前位操作,其他位不变GPIO的portin和portout不是一个配置寄存器,它的写和读有不同含义   【以协议中portout为例】动作为:写入和检测           ......
  • GPIO协议
    GPIO协议定义GPIO(GeneralPurposeInputOutput)通用输入输出口可配置为8种输入输出模式引脚电平:0V~3.3V,部分引脚可容忍5V输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模......
  • 08_调试与使用虚拟的GPIO控制器
    目录资料下载视频观看调试与使用虚拟的GPIO控制器1.硬件功能2.编写设备树文件3.上机实验3.2编译、替换设备树3.3编译、安装驱动程序4.STM32MP157上的bug资料下载coding无法使用浏览器打开,必须用git工具下载:gitclonehttps://e.coding.net/weidongshan/linux/doc_and_sourc......