一、GPIO的8种输入输出模式:
1. 输入:
GPIO_Mode_AIN // 模拟输入:用于ADC
GPIO_Mode_IN_FLOATING //浮空输入
GPIO_Mode_IPD //下拉输入
GPIO_Mode_IPU //上拉输入
2. 输出:
GPIO_Mode_Out_OD //开漏输出
GPIO_Mode_Out_PP //推挽输出
GPIO_Mode_AF_OD //复用开漏输出
GPIO_Mode_AF_PP //复用推挽输出
RCC时钟使能:
void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState); //AHB
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); //APB2
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); //APB1
GPIO:
void GPIO_DeInit(GPIO_TypeDef* GPIOx); //GPIO复位
void GPIO_AFIODeInit(void); //AFIO复位
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); //GPIO初始化
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct); //结构体变量给初始值
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //读取输入某一位寄存器的值
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); //读取输入整个寄存器的值
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //读取输出某一位寄存器的值
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx); //读取输入整个寄存器的值
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //高电平
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //低电平
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
LED点灯:
GPIO_InitTypeDef GPIO_InitTypeDefStructure;
GPIO_InitTypeDefStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出
GPIO_InitTypeDefStructure.GPIO_Pin=GPIO_Pin_1; //PA1
GPIO_InitTypeDefStructure.GPIO_Speed=GPIO_Speed_50MHz; //速度
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能APB2时钟
GPIO_Init(GPIOA,&GPIO_InitTypeDefStructure); //GPIOA初始化
GPIO_SetBits(GPIOA,GPIO_Pin_1);
按键控制LED点亮:
按键Key.c:
void Key_Init(void){
GPIO_InitTypeDef GPIO_InitTypeDefStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDefStructure.GPIO_Mode=GPIO_Mode_IPD;
GPIO_InitTypeDefStructure.GPIO_Pin=GPIO_Pin_11;
GPIO_InitTypeDefStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitTypeDefStructure);
}
uint8_t Key_Out(void){
uint8_t KeyNum = 0;
if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0){ //防抖动
Delay_us(10);
while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0);
Delay_us(10);
KeyNum = 1;
}
return KeyNum;
}
main.c:
KeyNum=Key_Out();
if(KeyNum==1){
GPIO_SetBits(GPIOA,GPIO_Pin_1);
}
标签:1.2,Pin,void,STM32,Mode,GPIO,InitTypeDefStructure,RCC From: https://www.cnblogs.com/yangbz2003-cn/p/17649586.html