STM32F103ZET6 GPIO常用库函数

头文件:stm32f10x_gpio.h
源文件:stm32f10x_gpio.c

【 1. 使能函数 】

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx,ENABLE);

【 2. 初始化函数 】

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
  • 作用
    初始化一个或多个IO口(同一组)的工作方式。
    该函数主要是操作GPIO_CRL(CRH)寄存器,在上拉或者下拉的时候有设置BSRR或者BRR寄存器
  • 范例
 GPIO_InitTypeDef  GPIO_InitStructure;	 //定义GPIO参数结构体
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;    //选择要配置的IO口
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
 GPIO_Init(GPIOB, &GPIO_InitStructure);	 //根据设定参数初始化GPIOB.5

【 3. 读取输入电平 】

uint8_t  GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t  GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
  • 作用
    读取GPIO的输入电平。实际操作的是GPIOx_IDR寄存器。
  • 范例
GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5);//读取PA^5的输入电平
GPIO_ReadInputData(GPIOA);//读取GPIOA组中所有IO口输入电平

【 4. 读取输出电平 】

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
 //读取GPIOx组下某个引脚电平
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx); //读取GPIOx该组所有引脚输出电平
  • 作用
    读取GPIO的输出电平。实际操作的是GPIO_ODR寄存器。
  • 范例
GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_5);//读取GPIOA.5的输出电平
GPIO_ReadOutputData(GPIOA);//读取GPIOA组中所有io口输出电平

【 5. 设置输出电平 】

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //输出置1
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//输出置0
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);//不常用
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal); //不常用
  • 作用
  1. void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
    设置某个IO口输出为高电平1。实际操作BSRR寄存器
  2. void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
    设置某个IO口输出为低电平0。实际操作的BRR寄存器。
  3. void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
    void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
    这两个函数不常用,也是用来设置IO口输出电平。

【 6. 范例 】

//实现两个灯的交替闪烁
#include "stm32f10x.h"
 void Delay(u32 count)
 {
     
   u32 i=0;
   for(;i<count;i++);
 }
 int main(void)
 {
     	
  GPIO_InitTypeDef  GPIO_InitStructure;
	 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);	    //使能PB,PE端口时钟
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;			    //LED0-->PB.5 端口配置
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 	 //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 //IO口速度为50MHz
  GPIO_Init(GPIOB, &GPIO_InitStructure);			     //初始化GPIOB.5
  GPIO_SetBits(GPIOB,GPIO_Pin_5);					//PB.5 输出高
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;	            //LED1-->PE.5推挽输出
  GPIO_Init(GPIOE, &GPIO_InitStructure);	  	       //初始化GPIO
  GPIO_SetBits(GPIOE,GPIO_Pin_5); 			 //PE.5 输出高 	  
  while(1)
	{
     
	  GPIO_ResetBits(GPIOB,GPIO_Pin_5);
	  GPIO_SetBits(GPIOE,GPIO_Pin_5);
		Delay(3000000);
		GPIO_SetBits(GPIOB,GPIO_Pin_5);
		GPIO_ResetBits(GPIOE,GPIO_Pin_5);
		Delay(3000000);
	}
 }

你可能感兴趣的:(STM32F103ZET6 GPIO常用库函数)