STM328种引脚功能和配置解释以及相应使用场合

八种引脚功能分别为:

1.GPIO_Mode_AIN 模拟输入

2.GPIO_Mode_IN_FLOATING浮空输入

3.GPIO_Mode_IPD下拉输入

4.GPIO_Mode_IPU上拉输入

5.GPIO_Mode_Out_OD开漏输出

6.GPIO_Mode_Out_PP推挽输出

7.GPIO_Mode_AF_OD复用开漏输出

8.GPIO_Mode_AF_PP复用推挽输出


模拟输入:GPIO_Mode_AIN     

用作内部AD采样,通常情况下,测量范围0v-3.3v。 悬空的时候任会测量到1.5v左右的电压,这是引脚特性不必担心。只能测量正电压,不能测量交流电压,采样速率可根据1/(采样时间+12.5)/AD时钟频来计算.


浮空输入:GPIO_Mode_IN_FLOATING

在该模式下,引脚悬空时IO电平状态不确定,可能导致状态误判。在使用的时候完全由外部输入决定,为了解决这一问题,个人感觉使用该模式的时候不要悬空,最好外接上拉或者下拉电阻,这样可以使用时确切知道当前引脚状态是什么。该模式通常用于外部按键输入。


下拉输入和上拉输入  GPIO_Mode_IPD  GPIO_Mode_IPU

这两个很好理解  IO内部下拉 上拉电阻输入,根据需求进行选择。


开漏输出:GPIO_Mode_Out_OD      

 IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才可以实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样的io口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的io双向功能.


推挽输出:GPIO_Mode_Out_PP   

一般只用于输出高低电平  IO输出0,接GND    IO 输出1,接VCC ,读输入是未知的


复用推挽输出 :  GPIO_Mode_AF_PP

主要用在片内外设功能 如I2C的scl和 sda


复用开漏输出:GPIO_Mode_AF_OD  

主要用在片内外设功能(TX1,MOSI,MISO.SCK.SS)

(对于复用这一块还是有点迷糊,我得再找找资料)

关于库函数调用及其说明

/******************************************************************************

GPIO_DeInit(GPIO_TypeDef*GPIOx);

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

参数:GPIOx:x 可以是A,B ,C ,D 或者E,来选择GPIO外设

例子:GPIO_DeInit(GPIOA);

*******************************************************************************

/******************************************************************************

GPIO_AFIODeInit(void);

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

参数:无

例子:GPIO_AFIODeInit();

*******************************************************************************

/******************************************************************************

GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef* GPIO_InitStruct);

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

参数:GPIOx:x 可以是A,B ,C ,D 或者E,来选择GPIO外设

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

例子:GPIO_InitTypeDefGPIO_InitStructure;

     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;

     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

     GPIO_Init(GPIOA, &GPIO_InitStructure); //Configure all the GPIOA inInput Floating mode

*******************************************************************************

/******************************************************************************

GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);

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

参数:GPIO_InitStruct:指向结构 GPIO_InitTypeDef 的指针,待初始化

例子:GPIO_InitTypeDefGPIO_InitStructure;

     GPIO_StructInit(&GPIO_InitStructure); //Initialize the GPIO InitStructure parameters

*******************************************************************************

/****************************************************************************

GPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx,u16 GPIO_Pin);

功能:读取指定端口管脚的输入

参数:GPIOx :x 可以是A,B ,C ,D 或者E,来选择GPIO外设

     GPIO_Pin:待读取的端口位

返回值: 输入端口管脚值

例子:ReadValue=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);

//Readsthe seventh pin of the GPIOB and           store it in ReadValue variable

*******************************************************************************

/******************************************************************************

 GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

功能:读取指定的GPIO端口输入

参数:GPIOx:x 可以是A,B ,C ,D 或者E,来选择GPIO外设

返回值: GPIO输入数据端口值

例子:u16ReadValue;

ReadValue=GPIO_ReadInputData(GPIOA);//Readthe GPIOC input data port and store it in ReadValue  variable

*******************************************************************************

/******************************************************************************

GPIO_ReadOutputDataBit();

功能:读取指定端口管脚的输出

参数:GPIOx :x 可以是A,B ,C ,D 或者E,来选择GPIO外设

     GPIO_Pin:待读取的端口位

返回值:输出端口管脚值

例子:u8ReadValue;

    ReadValue=GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_0);//Reads the seventhpin of the GPIOB and      store it inReadValue variable

*******************************************************************************

/******************************************************************************

 GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

功能:读取指定的GPIO端口输出

参数:GPIOx :x 可以是A,B ,C ,D 或者E,来选择GPIO外设

返回值:GPIO输出数据端口值

例子:u16ReadValue;

ReadValue=GPIO_ReadOutputData(GPIOC);//Readthe GPIOC output data port and store it in ReadValue

         variable

*******************************************************************************

/******************************************************************************

GPIO_SetBits(GPIO_TypeDef*GPIOx, u16 GPIO_Pin);

功能:设置指定的数据端口位

参数:GPIOx :x 可以是A,B ,C ,D 或者E,来选择GPIO外设

    GPIO_Pin:待设置的端口位

例子:GPIO_SetBits(GPIOA,GPIO_Pin_10 | GPIO_Pin_15);//Set the GPIOA port pin 10 and pin 15

*******************************************************************************

/******************************************************************************GPIO_ResetBits(GPIO_TypeDef*GPIOx, u16 GPIO_Pin);

功能:清除指定的数据端口位

参数:GPIOx :x 可以是A,B ,C ,D 或者E,来选择GPIO外设

     GPIO_Pin:待清除的端口位

例子:GPIO_ResetBits(GPIOA,GPIO_Pin_10 | GPIO_Pin_15);//Clears the GPIOA port pin 10 and pin 15

*******************************************************************************

/******************************************************************************

GPIO_WriteBit(GPIO_TypeDef*GPIOx, u16 GPIO_Pin, Bit Action Bit Val);

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

参数:GPIOx :x 可以是A,B ,C ,D 或者E,来选择GPIO外设

     GPIO_Pin:待设置或者清除指的端口位

     Bit Val: 该参数指定了待写入的值 该参数必须取枚举Bit Action 的其中一个值

Bit RESET: 清除数据端口位

     Bit SET: 设置数据端口位

例子:GPIO_WriteBit(GPIOA,GPIO_Pin_15, Bit SET);//Set the GPIOA port pin 15

*******************************************************************************

/******************************************************************************

GPIO_Write(GPIO_TypeDef*GPIOx, u16 PortVal);

功能:向指定GPIO数据端口写入数据

参数:GPIOx :x 可以是A,B ,C ,D 或者E,来选择GPIO外设

    PortVal:  待写入端口数据寄存器的值 

例子:GPIO_Write(GPIOA,0x1101); //Write data to GPIOA data port

*******************************************************************************

/******************************************************************************

GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, u16GPIO_Pin);

功能:锁定GPIO管脚设置寄存器

参数:GPIOx :x 可以是A,B ,C ,D 或者E,来选择GPIO外设

     GPIO_Pin:待锁定的端口位 该参数可以取GPIO_Pin_x(x 可以是 0-15)的任意组合

例子:GPIO_PinLockConfig(GPIOA,GPIO_Pin_0 | GPIO_Pin_1); //Lock GPIOA Pin0 and Pin1

*******************************************************************************

/******************************************************************************

GPIO_EventOutputConfig(u8 GP IO_PortSource,u8 GPIO_PinSource)

功能:选择GPIO管脚用作事件输出

参数:GPIO_PortSource:  选择用作事件输出的 GPIO端口

    GPIO_PinSource :事件输出的管脚 ,该参数可以取GPIO_PinSourcex(x可以是 0-15) 

例子:GPIO_EventOutputConfig(GPIO_PortSourceGPIOE,GPIO_PinSource5); //Selects the GPIOE pin 5 for       EVENT output

*******************************************************************************

/******************************************************************************

GPIO_EventOutputCmd(FunctionalStateNewState) ;

功能:使能或者失能事件输出

参数:NewState: 事件输出的新状态 这个参数可以取:ENABLE 或者DISABLE

例子:GPIO_EventOutputConfig(GPIO_PortSourceGPIOC,GPIO_PinSource6);

 

GPIO_EventOutputCmd(ENABLE);//Enable Event Ouput to the GPIOC pin 6

 

*******************************************************************************

 

/******************************************************************************

GPIO_PinRemapConfig(u32GPIO_Remap, FunctionalState NewState) ;

 

功能:改变指定管脚的映射

 

参数:GPIO_Remap: 选择重映射的管脚

 

      NewState: 管脚重映射的新状态 这个参数可以取:ENABLE 或者DISABLE

 

例子:GPIO_PinRemapConfig(GPIO_Remap_I2C1,ENABLE);//I2C1_SCL on PB.08, I2C1_SDA on PB.09

 

*******************************************************************************

 

/******************************************************************************GPIO_EXTILineConfig(u8GPIO _PortSource, u8  GPIO_PinSource) ;

 

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

 

参数:GPIO_PortSource:  选择用作外部中断线源的 GPIO端口

 

      GPIO_PinSource :待设置的外部中断线路

 

例子:GPIO_EXTILineConfig(GPIO_PortSource_GPIOB,GPIO_PinSource8);//Selects PB.08 as EXTI Line 8

 

***********************************




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值