资讯
HOME
资讯
正文内容
gpio模拟nand STM32的GPIO(通用输入输出)有什么用?
发布时间 : 2024-10-07
作者 : 小编
访问数量 : 23
扫码分享至微信

STM32的GPIO(通用输入输出)有什么用?

STM32的GPIO(通用输入/输出)支持多种工作模式,每种模式都有其特定的应用场景。下面将详细讲解STM32 GPIO的几种主要工作模式及其运行方式:

模拟输入 (GPIO_Mode_AIN): 在此模式下,GPIO引脚关闭了TTL肖特基触发器,不接上、下拉电阻,经由另一线路把电压信号传送到片上外设模块,如传送至ADC模块,由ADC采集电压信号。使用ADC外设时,必须设置为模拟输入模式。浮空输入 (GPIO_Mode_IN_FLOATING): 配置成此模式时,芯片内部既没有接上拉,也没有接下拉电阻,经由TTL肖特基触发器输入。由于其输入阻抗较大,一般把这种模式用于标准的通信协议如I2C、USART的接收端。下拉输入 (GPIO_Mode_IPD): 在此模式下,I/O端口的电平信号通过TTL肖特基触发器后,进入输入数据寄存器。在I/O端口悬空(无信号输入)的情况下,输入端的电平可以保持在低电平;并且在I/O端口输入为高电平时,输入端的电平则为高电平。上拉输入 (GPIO_Mode_IPU): 在此模式下,I/O端口的电平信号通过TTL肖特基触发器后,进入输入数据寄存器。但是在I/O端口悬空(无信号输入)的情况下,输入端的电平可以保持在高电平;并且在I/O端口输入为低电平时,输入端的电平则为低电平。开漏输出 (GPIO_Mode_Out_OD): 在此模式下,上方的P-MOS管完全不工作。控制输出为0(低电平)时,N-MOS管导通,使输出接地。控制输出为1(高电平)时,P-MOS管和N-MOS管都关闭,所以引脚既不输出高电平,也不输出低电平,为高阻态。正常使用时必须外部接上拉电阻。推挽输出 (GPIO_Mode_Out_PP): 在此模式下,输入高电平时,上方的P-MOS导通,下方的N-MOS关闭,对外输出高电平;而输入低电平时,N-MOS管导通,P-MOS关闭,对外输出低电平。推挽输出的低电平为0V,高电平为3.3V。复用开漏输出 (GPIO_Mode_AF_OD): 类似于开漏输出模式,但输出的高低电平的来源不是CPU直接写输出数据寄存器,而是利用片上外设模块的复用功能输出来决定的。复用推挽输出 (GPIO_Mode_AF_PP): 类似于推挽输出模式,但输出的高低电平的来源不是CPU直接写输出数据寄存器,而是利用片上外设模块的复用功能输出来决定的。

AT32F403A407407A 通用输入输出GPIO配置介绍

一、简介

二、功能描述

1.GPIO结构

2.GPIO 复位状态

2.通用功能输入配置

3.模拟 输入/ 输出

4.通用功能输出配置

5.I/O 端口 保护

三、GPIO寄存器

1. GPIO 配置 低寄存器 (GPIOx_CFGLR )(x=A..E )

2. GPIO 配置高寄存器 (GPIOx_CFGHR )(A..E )

3. GPIO 输入数据寄存器 (GPIOx_IDT )(x=A..E )

4. GPIO 输出数据寄存器 (GPIOx_ODT )(x=A..E)

5. GPIO 设置/ 清除寄存器 (GPIOx_SCR )(x=A..E )

6. GPIO 清除寄存器 (GPIOx_CLR )(x=A..E )

7. GPIO 写保护 寄存器 (GPIOx_WPR )(x=A..E)

8. GPIO 极大电流推动/ 吸入能力 切换控制寄存器(GPIOx_HDRV )(x=A..E )

四、GPIO编程实例

1. 按键输入GPIO配置

2. LED灯输出配置

3. 模拟量输入配置

一、简介

AT32F403A/407/407A 支持多达 80 个双向 I/O 管脚,这些管脚分为 5 组,分别为 PA、PB、PC、PD 和

PE,每组最多包含 16 个管脚,每个管脚都可以实现与外部的通讯、控制以及数据采集的功能。

每个管脚都支持通用功能输入输出(GPIO)或复用功能输入输出(IOMUX)。本章节详细介绍 GPIO 功

能,IOMUX 功能详见复用功能输入输出章节。

每个管脚都可以软件配置成浮空输入、上拉/下拉输入、模拟输入/输出、通用推挽/开漏输出、复用推挽/开

漏输出。

每个管脚都可以软件配置输出驱动能力以及输出信号斜率。

每个管脚都可以配置为外部中断输入。

每个管脚都支持配置锁定功能。

二、功能描述

1.GPIO结构

``

每个管脚可以由软件配置成四种输入模式(输入浮空、输入上拉、输入下拉、模拟输入)和四种输出模式

(开漏输出、推挽式输出、推挽式复用、开漏复用)。

每个 I/O 端口对应的寄存器不允许半字或字节访问,必须按 32 位字被访问,每个 I/O 端口位可以自由编

程。

下图给出了一个 I/O 端口位的基本结构。

2.GPIO 复位状态

系统上电或复位后,所有管脚除了 JATG 相关管脚以外,都被配置为浮空输入模式,JTAG 相关管脚则配

置为:PA15/JTDI 、PA13/JTMS 和 PB4/JNTRST 为输入上拉模式,PA14/JTCK 为输入下拉模式,

PB3/TDO 为浮空输入模式。

2.通用功能输入配置

当管脚配置为输入时:

 管脚状态可通过对输入数据寄存器的读访问得到

 可配置管脚为浮空输入、上拉输入或下拉输入

 施密特触发器有效

 不能对该管脚进行输出。

注意: 如果是浮空输入模式,为避免复杂环境下,没有使用的管脚有干扰,导致漏电,建

议,如管脚不使用,则配置为模拟输入模式。

3.模拟 输入/ 输出

当 GPIO 端口被配置为模拟输入配置时:

 施密特触发无效

 不能对该管脚进行数字输入输出

 对应的管脚,无任何上拉/下拉电阻。

4.通用功能输出配置

当 GPIO 端口被配置为输出时:

 施密特触发器有效

 可通过输出寄存器让对应管脚输出

 上拉和下拉电阻不能被使用

 在开漏模式时,可强输出 0,可用上拉电阻输出 1。

 在推挽模式时,可通过输出寄存器输出数字 0/1。

 CONF = 10 或 11 时,为复用输出,详情请参考 IOMUX 章节

5.I/O 端口 保护

为了防止误操作导致 GPIO 功能混乱,提供每个对应管脚的的锁定机制。一旦锁定,在下次复位或者上电

之前都不能进行对应管脚的 GPIO 配置。

三、GPIO寄存器

下面列出了 GPIO 寄存器映射和复位数值。

必须以字(32 位)的方式操作这些外设寄存器。

表 6-1 GPIO寄存器地址映射和复位值

1. GPIO 配置 低寄存器 (GPIOx_CFGLR )(x=A…E )

注意:有些端口寄存器复位值不同,比如 PA 有些管脚默认是 JTAG/SWD 有上拉输入管脚。

2. GPIO 配置高寄存器 (GPIOx_CFGHR )(A…E )

注意:有些端口寄存器复位值不同,比如 PB 有些管脚默认是 JTAG/SWD 有上拉输入管脚

3. GPIO 输入数据寄存器 (GPIOx_IDT )(x=A…E )

4. GPIO 输出数据寄存器 (GPIOx_ODT )(x=A…E)

5. GPIO 设置/ 清除寄存器 (GPIOx_SCR )(x=A…E )

6. GPIO 清除寄存器 (GPIOx_CLR )(x=A…E )

7. GPIO 写保护 寄存器 (GPIOx_WPR )(x=A…E)

8. GPIO 极大电流推动/ 吸入能力 切换控制寄存器(GPIOx_HDRV )(x=A…E )

四、GPIO编程实例

以最新的AT32F403A_407_Firmware_Library-v2.0.9库为例

1. 按键输入GPIO配置

头文件宏定义

/******************* define button *******************/

typedef enum

{

USER_BUTTON = 0,

NO_BUTTON = 1

} button_type;

#define USER_BUTTON_PIN GPIO_PINS_0

#define USER_BUTTON_PORT GPIOA

#define USER_BUTTON_CRM_CLK CRM_GPIOA_PERIPH_CLOCK

源文件程序按键输入配置

/**

* @brief configure button gpio

* @param button: specifies the button to be configured.

* @retval none

*/

void at32_button_init(void)

{

gpio_init_type gpio_init_struct;

/* enable the button clock */

crm_periph_clock_enable(USER_BUTTON_CRM_CLK, TRUE);

/* set default parameter */

gpio_default_para_init(&gpio_init_struct);

/* configure button pin as input with pull-up/pull-down */

gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;

gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;

gpio_init_struct.gpio_mode = GPIO_MODE_INPUT;

gpio_init_struct.gpio_pins = USER_BUTTON_PIN;

gpio_init_struct.gpio_pull = GPIO_PULL_DOWN;

gpio_init(USER_BUTTON_PORT, &gpio_init_struct);

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

2. LED灯输出配置

头文件定义:

/******************** define led ********************/

typedef enum

{

LED2 = 0,

LED3 = 1,

LED4 = 2

} led_type;

#define LED_NUM 3

#if defined (AT_START_F403A_V1) || defined (AT_START_F407_V1)

#define LED2_PIN GPIO_PINS_13

#define LED2_GPIO GPIOD

#define LED2_GPIO_CRM_CLK CRM_GPIOD_PERIPH_CLOCK

#define LED3_PIN GPIO_PINS_14

#define LED3_GPIO GPIOD

#define LED3_GPIO_CRM_CLK CRM_GPIOD_PERIPH_CLOCK

#define LED4_PIN GPIO_PINS_15

#define LED4_GPIO GPIOD

#define LED4_GPIO_CRM_CLK CRM_GPIOD_PERIPH_CLOCK

#endif

源文件程序LED初始化配置

/**

* @brief configure led gpio

* @param led: specifies the led to be configured.

* @retval none

*/

void at32_led_init(led_type led)

{

gpio_init_type gpio_init_struct;

/* enable the led clock */

crm_periph_clock_enable(led_gpio_crm_clk[led], TRUE);

/* set default parameter */

gpio_default_para_init(&gpio_init_struct);

/* configure the led gpio */

gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;

gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;

gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;

gpio_init_struct.gpio_pins = led_gpio_pin[led];

gpio_init_struct.gpio_pull = GPIO_PULL_NONE;

gpio_init(led_gpio_port[led], &gpio_init_struct);

}

3. 模拟量输入配置

/**

* @brief gpio configuration.

* @param none

* @retval none

*/

static void adc_gpio_config(void)

{

gpio_init_type gpio_initstructure;

crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);

crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);

gpio_default_para_init(&gpio_initstructure);

gpio_initstructure.gpio_mode = GPIO_MODE_ANALOG;

gpio_initstructure.gpio_pins = GPIO_PINS_4 | GPIO_PINS_5 | GPIO_PINS_6 | GPIO_PINS_7;

gpio_init(GPIOA, &gpio_initstructure);

gpio_initstructure.gpio_mode = GPIO_MODE_ANALOG;

gpio_initstructure.gpio_pins = GPIO_PINS_0 | GPIO_PINS_1;

gpio_init(GPIOB, &gpio_

initstructure);

}

相关问答

GPIO模拟 IIC总线?

IIC总线只有两条线(SCL和SDA),IIC协议其实就是这两条线上的数据传输的时序规定。主控制芯片通过向IO口(已经与从芯片的IIC端口SCL和SDA连接)按从芯片提供的...

gpio 四种输出模式?

STM32的四种输入方式:1、上拉输入(GPIO_Mode_IPU)上拉输入就是信号进入芯片后加了一个上拉电阻,再经过施密特触发器转换成0、1信号,读取此时的引脚电平为...

同一组 GPIO 可以部分设置成开漏输出部分设置成推挽输出吗?

单片机的GPIO基本上都可以单独设置输入输出输入输出是单片机GPIO最基本的功能,输出一般可以设置为开漏输出和上拉输出,而输入一般可以设置为上拉输入、下拉输...

gpio 特点?

GPIO(GeneralPurposeInput/Output)即通用输入输出端口,以下简称GPIO。GPIO可提供输入、输出或中断三类功能,是嵌入式领域最常见,最基础的输入输出设备。...

gpio 传输方式?

GPIO支持4种输入模式(浮空输入、上拉输入、下拉输入、模拟输入)和4种输出模式(开漏输出、开漏复用输出、推挽输出、推挽复用输出)。GPIO支持4种输入模式(浮空...

在嵌入式开发中,怎么开发SPI IIC的驱动程序?

IIC可以使用普通GPIO口模...因为每次I2C控制器都会给出一个“标志”,那么就会被“case”……具体如下图所示。看不清可以搜索:http://www.eechina.com/threa...

rtc gpio 是什么?

RTCGPIO一共有18个IO口,这些GPIO管脚具有低功耗RTC性能和模拟功能,并且由ESP32的RTC子系统控制。这些功能不使用IO_MUX和GPIO交换矩阵...

两款芯片硬件都支持SPI通信,如何实现两芯片之间的数据通信啊...

占用单片机的三个GPIO口。三总线SPI的接口连接方式如下图所示。四总线SPI四总...3)CAN通讯,由UART和42675电平转换芯片实现。另外,该接口也可以和蓝牙模块、W...

esp-12引脚功能?

ESP-12是一款基于ESP8266芯片的Wi-Fi模块,其引脚功能如下:1.VCC:电源输入,电压范围为3.3V-3.6V。2.GND:接地。3.RST:复位引脚,用于对模块进行复位。....

gd32 引脚对应功能?

GD32微控制器的引脚功能取决于具体的芯片型号。以下是一些GD32芯片常用的引脚功能对应关系:1.GPIO引脚:通用输入输出引脚,可配置为输入或输出。2.USART引脚...

 天圣  山西村官 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2024  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部