STM32 GPIO设置
0b)。
5.软件重新映射I/O复用功能:为了使不同器件封装的外设I/O 功能的数量达到最优,可以把一些复用功能重新映射到其他一些脚上。这可以通过软件配置相应的寄存器来完成。这时,复用功能就不再映射到它们的原始引脚上了
;
6.GPIO锁定机制:当在一个端口位上执行了所定(LOCK)程序,在下一次复位之前,将不能再更改端口位的配置。
GPIO基本设置
GPIOMode_TypeDef GPIO mode 定义及偏移地址
GPIO_Mode_AIN = 0x0, //模拟输入
GPIO_Mode_IN_FLOATING = 0x04, //悬空输入
GPIO_Mode_IPD = 0x28, //下拉输入
GPIO_Mode_IPU = 0x48, //上拉输入
GPIO_Mode_Out_OD = 0x14, //开漏输出
GPIO_Mode_Out_PP = 0x10, //推挽输出
GPIO_Mode_AF_OD = 0x1C, //开漏复用
GPIO_Mode_AF_PP = 0x18 //推挽复用
GPIO输入输出速度选择:
typedef enum
{
GPIO_Speed_10MHz = 1,
GPIO_Speed_2MHz,
GPIO_Speed_50MHz
}
GPIOSpeed_TypeDef;
#define IS_GPIO_SPEED(SPEED) ((SPEED == GPIO_Speed_10MHz) ||
(SPEED == GPIO_Speed_2MHz) || (SPEED == GPIO_Speed_50MHz))
做一个GPIO输出的试验
当I/O 端口被配置为推挽模式输出时:输出寄存器上的0 激活N-MOS,而输
出寄存器上的1 将激活P-MOS。
用这段程序实现:GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
int main(void)
{
#ifdef DEBUG
debug();
#endif
/* 设置系统时钟 */
RCC_Configuration();
/* 嵌套中断设置*/
NVIC_Configuration();
/* 激活GPIOC clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
/* Configure PC.04, PC.05, PC.06 and PC.07 as Output push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 |
GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
while (1)
{
/*本试验仅能实现LED1亮、熄功能*/
GPIO_SetBits(GPIOC, GPIO_Pin_4); //设置PC.04 pin为高电平,点亮
LED1
Delay();
GPIO_ResetBits(GPIOC, GPIO_Pin_4); //设置PC.04 pin为低电平,熄灭
LED1
Delay();
}
}
做一个GPIO输入的试验:以EK-STM32F中LCDdemo做例子
这个试验中把GPIO的PD.04做为按键输入,当下降沿来临时触发。
LCDdemo中的例程如下:首先配置按键PD.03, PD.04为按键输入接口。
void Button_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Enable GPIOD clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
/* Configure PD.03, PD.04 as output push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
下面为按键作用是启动外部中断
GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource3);
EXTI_InitStructure.EXTI_Line = EXTI_Line3; //设定外部中断3
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //设定中断模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //设定下降沿触
发模式
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
/*******************************************************************************
设置GPIO基本参数
*******************************************************************************/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4| GPIO_Pin_5 ;
//设置的IO为pin4与pin5
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/* GPIO_Speed 描述
GPIO_Speed_10MHz 最高输出速率10MHz
GPIO_Speed_2MHz 最高输出速率2MHz
GPIO_Speed_50MHz 最高输出速率50MHz
*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING ;
/*
GPIO_Speed 描述
GPIO_Mode_AIN 模拟输入
GPIO_Mode_IN_FLOATING 浮空输入
GPIO_Mode_IPD 下拉输入
GPIO_Mode_IPU 上拉输入
GPIO_Mode_Out_OD 开漏输出
GPIO_Mode_Out_PP 推挽输出
GPIO_Mode_AF_OD 复用开漏输出
GPIO_Mode_AF_PP 复用推挽输出通常有5种方式使用某个引脚功能,
它们的配置方式如下:
1)作为普通GPIO输入:
根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,
同时不要使能该引脚对应的所有复用功能模块。
2)作为
STM32GPIO设 相关文章:
- STM32的GPIO设置(12-03)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)