stm32 |
您所在的位置:网站首页 › 单片机引脚定义怎么设置 › stm32 |
通过初始化结构体初始化GPIO的常用格式是: GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;//LED0-->PA.8端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz GPIO_Init(GPIOA, &GPIO_InitStructure);//根据设定参数配置GPIO 上面代码的意思是设置GPIOB的第5个端口为推挽输出模式,同时速度为50M。从上面初始化代码可以看出,结构体GPIO_InitStructure的第一个成员变量GPIO_Pin用来设置是要初始化哪个或者哪些IO口;第二个成员变量GPIO_Mode是用来设置对应IO端口的输出输入模式,这些模式是上面我们讲解的8个模式,在MDK中是通过一个枚举类型定义的: typedef enum { 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//复用推挽 }GPIOMode_TypeDef; 第三个参数是IO口速度设置,有三个可选值,在MDK中同样是通过枚举类型定义: typedef enum { GPIO_Speed_10MHz = 1, GPIO_Speed_2MHz, GPIO_Speed_50MHz }GPIOSpeed_TypeDef; 这些入口参数的取值范围怎么定位,怎么快速定位到这些入口参数取值范围的枚举类型,在我们上面章节4.7的“快速组织代码”章节有讲解,不明白的朋友可以翻回去看一下,这里我们就不重复讲解,在后面的实验中,我们也不再去重复讲解怎么定位每个参数的取值范围的方法。 IDR是一个端口输入数据寄存器,只用了低16位。该寄存器为只读寄存器,并且只能以16位的形式读出。该寄存器各位的描述如图6.1.7所示: 在固件库中操作IDR寄存器读取IO端口数据是通过GPIO_ReadInputDataBit函数实现的: uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) 比如我要读GPIOA.5的电平状态,那么方法是: GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5); 返回值是1(Bit_SET)或者0(Bit_RESET); ODR是一个端口输出数据寄存器,也只用了低16位。该寄存器为可读写,从该寄存器读出来的数据可以用于判断当前IO口的输出状态。而向该寄存器写数据,则可以控制某个IO口的输出电平。该寄存器的各位描述如图6.1.8所示: 在固件库中设置ODR寄存器的值来控制IO口的输出状态是通过函数GPIO_Write来实现的: void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal); 该函数一般用来往一次性一个GPIO的多个端口设值。 BSRR寄存器是端口位设置/清除寄存器。该寄存器和ODR寄存器具有类似的作用,都可以用来设置GPIO端口的输出位是1还是0。下面我们看看该寄存器的描述如下图: BRR寄存器是端口位清除寄存器。该寄存器的作用跟BSRR的高16位雷同,这里就不做详细讲解。在STM32固件库中,通过BSRR和BRR寄存器设置GPIO端口输出是通过函数 GPIO_SetBits()和函数GPIO_ResetBits()来完成的。 void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) 在多数情况下,我们都是采用这两个函数来设置GPIO端口的输入和输出状态。比如我们要设置GPIOB.5输出1,那么方法为: GPIO_SetBits(GPIOB, GPIO_Pin_5); 反之如果要设置GPIOB.5输出位0,方法为: GPIO_ResetBits (GPIOB, GPIO_Pin_5); GPIO相关的函数我们先讲解到这里。虽然IO操作步骤很简单,这里我们还是做个概括性的总结,操作步骤为: 1) 使能IO口时钟。调用函数为RCC_APB2PeriphClockCmd()。 2) 初始化IO参数。调用函数GPIO_Init(); 3) 操作IO。操作IO的方法就是上面我们讲解的方法。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |