STM32:1.GPIO通用输入输出口

1.1GPIO口输入输出原理

        GPIO(General Purpose Input Output)通用输入输出口 可配置为8种输入输出模式。输出模式 下可控制端口输出高低电平,用以LED、控制蜂鸣器、模拟通信协议输出时序等,输入模式 下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等。

        STM32中,所有的GPIO都挂载在APB2外设总线上。命名方式采用GPIOA、GPIOB、GPIOC…的方式来命名。每个GPIO模块内,主要包括寄存器、驱动器等


I/O端口位的基本结构

        

        输入部分的上、下拉电阻:相应的两个开关可以通过程序进行配置,分别有上拉输入模式(上开关导通&下开关断开)、下拉输入模式(下开关导通&上开关断开)、浮空输入模式(两个开关都断开)。上下拉电阻的作用就是给引脚输入提供一个默认的输入电平,进而避免引脚悬空导致的不确定。都属于弱上拉、弱下拉。

        输入部分的触发器:这里是用肖特基管构成的施密特触发器。作用是对输入电压进行整形,可以消除电压波纹、使电压的上升沿/下降沿更加陡峭。也就是说,stm32的GPIO端口会自动对输入的数字电压进行整形。

        “模拟输入”、“复用功能输入”:都是连接到片上外设的一些端口,前者用于ADC等需要模拟输入的外设,后者用于串口输入引脚等需要数字量的外设。

                               

         输出数据:可以由输出数据寄存器(普通的IO口输出)、片上外设来指定,数据选择器控制数据来源。
        位设置/清除寄存器:单独操作输出数据的某一位,而不影响其他位。
        其中的MOS管:MOS管相当于一种开关,输出信号来控制这两个MOS管的开启状态,进而输出信号。可以选择推挽、开漏、关闭三种输出方式。
        推挽输出模式:两个MOS管均有效,stm32对IO口有绝对的控制权,也称为强推输出模式。
        开漏输出模式:P-MOS无效。只有低电平有驱动能力,高电平输出高阻。
        关闭模式:两个MOS管均无效,端口电平由外部信号控制。

GPIO的八种模式
名称性质特征

上拉输入

数字

空闲状态下,增加高电平的驱动能力;

下拉输入数字

空闲状态下,增加低电平的驱动能力;

模拟输入模拟

检测模拟电压,数据传给ADC做转换;

浮空输入

数字

空闲状态下,不具备高低电平驱动能力,直接输入的电压进行转换;

推挽输出

数字

直接把逻辑值输出成高低电平;

开漏输出

数字

只能输出低电平,输出为1时是高阻态(未知状态,电路上电压由电路来决定);经常应用在总线,需要增加上拉电阻配合使用;具有读取的功能;

复用推挽输出数字由片上外设控制
复用开漏输出数字由片上外设控制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STM32是一款常用的微控制器,GPIO是其中一个非常重要的外设之一。GPIO全称是General Purpose Input/Output,翻译过来就是通用输入/输出。它可以作为输入,也可以作为输出,用于连接外部电路或者读取外部电路的信号。 在STM32中,GPIO有很多种不同的模式和配置。其中最常用的是输出模式,用于控制外部电路的高低电平。一般而言,使用GPIO输出需要先进行如下几个步骤: 1. 配置GPIO的模式:将GPIO模式设置为输出模式,可以使用STM32提供的库函数进行配置; 2. 配置GPIO的速率:可以设置GPIO的速率以达到节约功耗或提高带宽等目的; 3. 控制GPIO的状态:可以通过相应的库函数对GPIO的状态进行设置,如将GPIO设置为高电平或低电平。 以下是一个简单的GPIO输出示例代码: ``` #include "stm32f10x.h" void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //打开GPIOA时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //设置GPIOA.0为输出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置为推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置输出速率为50MHz GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA } int main(void) { GPIO_Configuration(); //配置GPIO while (1) { GPIO_SetBits(GPIOA, GPIO_Pin_0); //将GPIOA.0设置为高电平 Delay(500); //延时 GPIO_ResetBits(GPIOA, GPIO_Pin_0); //将GPIOA.0设置为低电平 Delay(500); //延时 } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值