1.2 STM32的GPIO

GPIO的8种输入输出模式:

输入:

  • GPIO_Mode_AIN // 模拟输入:用于ADC
  • 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 //复用推挽输出

img

img

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);

}
posted @ 2023-08-22 20:51  狴泽犴  阅读(19)  评论(0编辑  收藏  举报