GPIO输出方式: 选推挽输出,因为它可以实现强上拉下拉,(开漏输出需要外部电阻来决定,不合适).
需要的头文件:stm32f4xx_gpio.h
源文件:stm32f4xx_gpio.c
1个初始化函数:
void GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct);
作用:初始化一个或者多个IO口(同一组)的工作模式,输出类型,速度以及上下拉方式。也就是一组IO口的
4个配置寄存器。GPIOx->MODER,GPIOx->OSPEEDR,GPIOx->OTYPER,GPIOx->PUPDR)
2个读取输入电平函数:
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx, uint16_tGPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef*GPIOx);
2个读取输出电平函数:
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef*GPIOx, uint16_tGPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef*GPIOx);
4个设置输出电平函数:
void GPIO_SetBits(GPIO_TypeDef*GPIOx, uint16_tGPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef*GPIOx, uint16_tGPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef*GPIOx, uint16_tGPIO_Pin,BitActionBitVal);
void GPIO_Write(GPIO_TypeDef*GPIOx, uint16_tPortVal);
步骤:
1.使能IO的时钟,调用函数RCC_AHB1PeriphClockCmd();
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//使能IO组A
2.初始化IO口模式。调用函数GPIO_Init();
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; //定义IO口
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; //定义为输出
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; //定义为推挽 GPIO_OType_OD开漏
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; //定义为高电平
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //定义速度
GPIO_Init(GPIOA,&GPIO_InitStruct);//初始化IO组里的端口
3.操作IO口,输出高低电平
GPIO_SetBits(GPIOA,GPIO_Pin_6|GPIO_Pin_7); //置1 高电平
GPIO_ResetBits(GPIOA,GPIO_Pin_6|GPIO_Pin_7); //置0 低电平