STM32F10xGPIO.docx

上传人:b****5 文档编号:11958691 上传时间:2023-04-16 格式:DOCX 页数:33 大小:25.16KB
下载 相关 举报
STM32F10xGPIO.docx_第1页
第1页 / 共33页
STM32F10xGPIO.docx_第2页
第2页 / 共33页
STM32F10xGPIO.docx_第3页
第3页 / 共33页
STM32F10xGPIO.docx_第4页
第4页 / 共33页
STM32F10xGPIO.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

STM32F10xGPIO.docx

《STM32F10xGPIO.docx》由会员分享,可在线阅读,更多相关《STM32F10xGPIO.docx(33页珍藏版)》请在冰豆网上搜索。

STM32F10xGPIO.docx

STM32F10xGPIO

GPIO寄存器结构.............................................................120

GPIO库函数.................................................................122

No

函数名

描述

1

GPIO_DeInit

将外设GPIOx寄存器重设为缺省值

2

GPIO_AFIODeInit

将复用功能(重映射事件控制和EXTI设置)重设为缺省值

3

GPIO_Init

根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器

4

GPIO_StructInit

把GPIO_InitStruct中的每一个参数按缺省值填入

5

GPIO_ReadInputDataBit

读取指定端口管脚的输入

6

GPIO_ReadInputData

读取指定的GPIO端口输入

7

GPIO_ReadOutputDataBit

读取指定端口管脚的输出

8

GPIO_ReadOutputData

读取指定的GPIO端口输出

9

GPIO_SetBits

设置指定的数据端口位

10

GPIO_ResetBits

清除指定的数据端口位

11

GPIO_WriteBit

设置或者清除指定的数据端口位

12

GPIO_Write

向指定GPIO数据端口写入数据

13

GPIO_PinLockConfig

锁定GPIO管脚设置寄存器

14

GPIO_EventOutputConfig

选择GPIO管脚用作事件输出

15

GPIO_EventOutputCmd

使能或者失能事件输出

16

GPIO_PinRemapConfig

改变指定管脚的映射

17

GPIO_EXTILineConfig

选择GPIO管脚用作外部中断线路

10通用输入/输出(GPIO)

GPIO驱动可以用作多个用途,包括管脚设置,单位设置/重置,锁定机制,从端口管脚读入或者向端口管

脚写入数据。

SectionGPIO寄存器结构描述了固件函数库所使用的数据结构,Section固件库函数介绍了函数库里的所有函数。

GPIO寄存器结构

GPIO寄存器结构,GPIO_TypeDef和AFIO_TypeDef,在文件“中定义如下:

typedefstruct

{

vu32CRL;vu32CRH;vu32IDR;vu32ODR;

vu32BSRR;

vu32BRR;

vu32LCKR;

}GPIO_TypeDef;

typedefstruct

{

vu32EVCR;vu32MAPR;

vu32EXTICR[4];

}AFIO_TypeDef;

Table178.例举了GPIO所有寄存器

Table178.GPIO寄存器

寄存器

描述

CRL

端口配置低寄存器

CRH

端口配置高寄存器

IDR

端口输入数据寄存器

ODR

端口输出数据寄存器

BSRR

端口位设置/复位寄存器

BRR

端口位复位寄存器

LCKR

端口配置锁定寄存器

EVCR

事件控制寄存器

MAPR

复用重映射和调试I/O配置寄存器

EXTICR

外部中断线路0-15配置寄存器

五个GPIO外设声明于文件:

...

#definePERIPH_BASE((u32)0x)

#defineAPB1PERIPH_BASEPERIPH_BASE

#defineAPB2PERIPH_BASE(PERIPH_BASE+0x10000)

#defineAHBPERIPH_BASE(PERIPH_BASE+0x20000)

...

#defineAFIO_BASE(APB2PERIPH_BASE+0x0000)

#defineGPIOA_BASE(APB2PERIPH_BASE+0x0800)#defineGPIOB_BASE(APB2PERIPH_BASE+0x0C00)#defineGPIOC_BASE(APB2PERIPH_BASE+0x1000)#defineGPIOD_BASE(APB2PERIPH_BASE+0x1400)#defineGPIOE_BASE(APB2PERIPH_BASE+0x1800)

#ifndefDEBUG

...

#ifdef_AFIO

#defineAFIO((AFIO_TypeDef*)AFIO_BASE)

#endif/*_AFIO*/

#ifdef_GPIOA

#defineGPIOA((GPIO_TypeDef*)GPIOA_BASE)

#endif/*_GPIOA*/

#ifdef_GPIOB

#defineGPIOB((GPIO_TypeDef*)GPIOB_BASE)

#endif/*_GPIOB*/

#ifdef_GPIOC

#defineGPIOC((GPIO_TypeDef*)GPIOC_BASE)

#endif/*_GPIOC*/

#ifdef_GPIOD

#defineGPIOD((GPIO_TypeDef*)GPIOD_BASE)

#endif/*_GPIOD*/

#ifdef_GPIOE

#defineGPIOE((GPIO_TypeDef*)GPIOE_BASE)

#endif/*_GPIOE*/

...

#else/*DEBUG*/

...

#ifdef_AFIO

EXTAFIO_TypeDef*AFIO;

#endif/*_AFIO*/

#ifdef_GPIOA

EXTGPIO_TypeDef*GPIOA;

#endif/*_GPIOA*/

#ifdef_GPIOB

EXTGPIO_TypeDef*GPIOB;

#endif/*_GPIOB*/

#ifdef_GPIOC

EXTGPIO_TypeDef*GPIOC;

#endif/*_GPIOC*/

#ifdef_GPIOD

EXTGPIO_TypeDef*GPIOD;

#endif/*_GPIOD*/

#ifdef_GPIOE

EXTGPIO_TypeDef*GPIOE;

#endif/*_GPIOE*/

...

#endif

使用Debug模式时,初始化指针AFIO,GPIOA,GPIOB,GPIOC,GPIOD和GPIOE

于文件:

#ifdef_GPIOA

GPIOA=(GPIO_TypeDef*)GPIOA_BASE;

#endif/*_GPIOA*/

#ifdef_GPIOB

GPIOB=(GPIO_TypeDef*)GPIOB_BASE;

#endif/*_GPIOB*/

#ifdef_GPIOC

GPIOC=(GPIO_TypeDef*)GPIOC_BASE;

#endif/*_GPIOC*/

#ifdef_GPIOD

GPIOD=(GPIO_TypeDef*)GPIOD_BASE;

#endif/*_GPIOD*/

#ifdef_GPIOE

GPIOE=(GPIO_TypeDef*)GPIOE_BASE;

#endif/*_GPIOE*/

#ifdef_AFIO

AFIO=(AFIO_TypeDef*)AFIO_BASE;

#endif/*_AFIO*/

为了访问GPIO寄存器,_GPIO,_AFIO,_GPIOA,_GPIOB,_GPIOC,_GPIOD和_GPIOE必须在文件中定义如下:

#define_GPIO

#define_GPIOA

#define_GPIOB

#define_GPIOC

#define_GPIOD

GPIO库函数

Table179.例举了GPIO的库函数【见首页】

函数GPIO_DeInit

Table180.函数GPIO_DeInit

函数名

GPIO_DeInit

函数原形

voidGPIO_DeInit(GPIO_TypeDef*GPIOx)

功能描述

将外设GPIOx寄存器重设为缺省值

输入参数

GPIOx:

x可以是A,B,C,D,E,来选择GPIO外设

输出参数

返回值

先决条件

被调用函数

RCC_APB2PeriphResetCmd()

例:

/*ResetstheGPIOAperipheralregisterstotheirdefaultresetvalues*/

GPIO_DeInit(GPIOA);

函数原型如下:

voidGPIO_DeInit(GPIO_TypeDef*GPIOx)

{

/*Checktheparameters*/

assert_param(IS_GPIO_ALL_PERIPH(GPIOx));

switch(*(u32*)&GPIOx)

{

caseGPIOA_BASE:

RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA,ENABLE);函数GPIO_AFIODeInit

函数名

GPIO_AFIODeInit

函数原形

voidGPIO_AFIODeInit(void)

功能描述

将复用功能(重映射事件控制和EXTI设置)重设为缺省值

输入参数

输出参数

返回值

先决条件

被调用函数

RCC_APB2PeriphResetCmd()

例:

/*ResetstheAlternatefunctionsregisterstotheirdefaultresetvalues*/

GPIO_AFIODeInit();

函数原型如下:

voidGPIO_AFIODeInit(void)

{

RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO,ENABLE);函数GPIO_Init

函数名

GPIO_Init

函数原形

voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct)

功能描述

根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器

输入参数1

GPIOx:

x可以是A,B,C,D,E,来选择GPIO外设

输入参数2

GPIO_InitStruct:

指向结构GPIO_InitTypeDef的指针,包含了外设GPIO的配置信息

输出参数

返回值

先决条件

被调用函数

GPIO_InitTypeDefstructure定义于文件“”:

typedefstruct

{

u16GPIO_Pin;

GPIOSpeed_TypeDefGPIO_Speed;

GPIOMode_TypeDefGPIO_Mode;

}GPIO_InitTypeDef;

GPIO_Pin:

该参数选择待设置的GPIO管脚,使用操作符可以一次选中多个管脚。

可以使用下表中的任意组合。

Table183.GPIO_Pin值

参数GPIO_Pin值

描述

#define

GPIO_Pin_None

无管脚被选中

0x0000

GPIO_Pin_0

选中管脚0

0x0001

GPIO_Pin_1

选中管脚1

0x0002

GPIO_Pin_2

选中管脚2

0x0004

GPIO_Pin_3

选中管脚3

0x0008

GPIO_Pin_4

选中管脚4

0x0010

GPIO_Pin_5

选中管脚5

0x0020

GPIO_Pin_6

选中管脚6

0x0040

GPIO_Pin_7

选中管脚7

0x0080

GPIO_Pin_8

选中管脚8

0x0100

GPIO_Pin_9

选中管脚9

0x0200

GPIO_Pin_10

选中管脚10

0x0400

GPIO_Pin_11

选中管脚11

0x0800

GPIO_Pin_12

选中管脚12

0x1000

GPIO_Pin_13

选中管脚13

0x2000

GPIO_Pin_14

选中管脚14

0x4000

GPIO_Pin_15

选中管脚15

0x8000

GPIO_Pin_All

选中全部管脚

0xFFFF

【备注】:

如下寄存器可用本表:

IDR[输入数据]、ODR[输出数据]、BSRR[位设置/复位]、BRR[位复位]、LCKR[锁定管脚]。

GPIO_Speed:

用以设置选中管脚的速率。

Table184.给出了该参数可取的值

Table184.GPIO_Speed值

参数GPIO_Speed值

描述/GPIOx_CRL/H

定义值

端口意义

--

--

0

输入模式

GPIO_Speed_10MHz

最高输出速率10MHz

1

输出频率

GPIO_Speed_2MHz

最高输出速率2MHz

2

GPIO_Speed_50MHz

最高输出速率50MHz

3

GPIO_Mode:

用以设置选中管脚的工作状态。

Table185.给出了该参数可取的值

Table185.GPIO_Mode值

参数GPIO_Mode参数

描述/CRL/H

定义值

备注1

备注2

输入模式:

0b00

GPIO_Mode_AIN

模拟输入

0x00

AnalogInput

GPIO_Mode_IN_FLOATING

浮空输入

0x04

FloatingInput

直接输入[复位默认]

GPIO_Mode_IPD

下拉输入

0x28

Pull_DownInput

输入端与电源间接有电阻

GPIO_Mode_IPU

上拉输入

0x48

Pull_UpInput

输入端与地间接有电阻

输出模式:

>0b00

GPIO_Mode_Out_PP

推挽输出

0x10

Pull_PushOutput

PNP_C极和NPN_C极相连输出

GPIO_Mode_Out_OD

开漏输出

0x14

OpenDrainOutput

漏极不接电源,作为输出端

GPIO_Mode_AF_PP

复用推挽输出

0x18

AFPull_PushOutput

GPIO_Mode_AF_OD

复用开漏输出

0x1C

AFOpenDrainOutput

【注意】:

当某管脚设置为上拉或者下拉输入模式,使用寄存器Px_BSRR和PxBRRGPIO_Mode允许同时设置GPIO方向(输入/输出)和对应的输入/输出设置:

位[7:

4]对应GPIO方向,位[4:

0]对应配置。

GPIO方向有如下索

-GPIO输入模式=0x00

-GPIO输出模式=0x01

Table186.给出了所有GPIO_Mode的索引和编码

Table186.GPIO_Mode的索引和编码

GPIO方向

索引

模式

寄存器设置

模式代码

备注

GPIOInput

0x00

GPIO_Mode_AI

0x00

0x00

CNF=0b00

GPIO_Mode_IN_FLOATING

0x04

0x04

CNF=0b01[复位默认]

GPIO_Mode_IPD

0x08

0x28

CNF=0b10

0b11此时保留

GPIO_Mode_IPU

0x08

0x48

GPIOOutput

0x01

GPIO_Mode_Out_PP

0x00

0x10

CNF=0b00

GPIO_Mode_Out_OD

0x04

0x14

CNF=0b01

GPIO_Mode_AF_PP

0x08

0x18

CNF=0b10

GPIO_Mode_AF_OD

0x0C

0x1C

CNF=0b11

例:

/*ConfigurealltheGPIOAinInputFloatingmode*/

GPIO_InitTypeDefGPIO_InitStructure;

=GPIO_Pin_All;

=GPIO_Speed_10MHz;

=GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA,&GPIO_InitStructure);

函数原型如下:

voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct)

{

u32currentmode=0x00,currentpin=0x00,pinpos=0x00,pos=0x00;

u32tmpreg=0x00,pinmask=0x00;

/*Checktheparameters*/

assert_param(IS_GPIO_ALL_PERIPH(GPIOx));

assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));

assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));

/*--------在使用本函数之前,必须对GPIO_TypeDef结构体的三个参数进行初始化【见上面实例代码】---------*/

/*----------------------------GPIOModeConfiguration-----------------------*/

currentmode=((u32)GPIO_InitStruct->GPIO_Mode)&((u32)0x0F);函数GPIO_StructInit

函数名

GPIO_StructInit

函数原形

voidGPIO_StructInit(GPIO_InitTypeDef*GPIO_InitStruct)

功能描述

把GPIO_InitStruct中的每一个参数按缺省值填入

输入参数

GPIO_InitStruct:

指向结构GPIO_InitTypeDef的指针,待初始化

输出参数

返回值

先决条件

被调用函数

Table188.给出了GPIO_InitStruct各个成员的缺省值

Table188.GPIO_InitStruct缺省值

成员

缺省值

定义值

GPIO_Pin

GPIO_Pin_All

0xFFFF

GPIO_Speed

GPIO_Speed_2MHz

0x2

GPIO_Mode

GPIO_Mode_IN_FLOATING

0x04

例:

/*InitializetheGPIOInitStructureparameters*/

GPIO_InitTypeDefGPIO_InitStructure;

GPIO_StructInit(&GPIO_InitStructure);

函数原型如下:

voidGPIO_StructInit(GPIO_InitTypeDef*GPIO_InitStruct)

{

/*ResetGPIOinitstructureparametersvalues*/

GPIO_InitStruct->GPIO_Pin=GPIO_Pin_All;

GPIO_InitStruct->GPIO_Speed=GPIO_Speed_2MHz;函数GPIO_ReadInputDataBit

函数名

GPIO_ReadInputDataBit

函数原形

u8GPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx,u16GPIO_Pin)

功能描述

读取指定端口管脚的输入

输入参数1

GPIOx:

x可以是A,B,C,D,E,来选择GPIO外设

输入参数2

GPIO_Pin:

待读取的端口位

输出参数

返回值

输入端口管脚值

先决条件

被调用函数

例:

/*ReadstheseventhpinoftheGPIOBandstoreitinReadValuevariable*/

u8ReadValue;

ReadValue=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7);函数GPIO_ReadInputData

函数名

GPIO_ReadInputData

函数原形

u16GPIO_ReadInputData(GPIO_TypeDef*GPIOx)

功能描述

读取指定的GPIO端口输入

输入参数

GPIOx:

x可以是A,B,C,D,E,来选择GPIO外设

输出参数

返回值

GPIO输入数据端口值

先决条件

被调用函数

例:

/*ReadtheGPIOCinputdataportandstoreitinReadValuevariable*/

u16ReadValue;

ReadValue=GPIO_ReadInputData(GPIOC);

函数原型如下:

u16GPIO_ReadInputData(GPIO_TypeDef*GPIOx)

{

/*Checktheparameters*/

assert_param(IS_GPIO_ALL_PERIPH(GPIOx));

return((u16)GPIOx->IDR);函数GPIO_ReadOutputDataBit

函数名

GPIO_ReadOutputDataBit

函数原形

u8GPIO_ReadOutputDataBit(GPIO_TypeDef*GPIOx,u16GPIO_Pin)

功能描述

读取指定端口管脚的输出

输入参数1

GPIOx:

x可以是A,B,C,D,E,来选择GPIO外设

输入参数2

GPIO_Pin:

待读取的端口位

输出参数

返回值

输出端口管脚值

先决条件

被调用函数

例:

/*Readsth

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1