STM32四:GPIO

一.概述

1.GPIO基本概念

  • 通用输入输出端口(general purpose intput output),可以做输入也可以做输出,可通过程序配置成输入或者输出。
  • GPIO具有八种工作模式,四种输入和四种输出
    • 四种输入模式:浮空输入,上拉输入,下拉输入,模拟输入
    • 四种输出模式:开漏输出,推挽输出,开漏复用输出,推挽复用输出

2.GPIO基本结构

3.八种模式概述

二.八种模式详解

1.浮空输入

2.上拉输入

3.下拉输入

4.模拟输入

5.开漏输出

6.开漏复用输出

7.推挽输出

8.推挽复用输出

三.相关寄存器

1.介绍

  • stm32f1系列中以16个IO为一组通过7个寄存器控制
  • 复用功能寄存器

(1)7个寄存器

(2)复用寄存器

2.寄存器地址映射

四.程序

1.点亮LED灯

 1 void LED_Init(void){ //LED灯的接口初始化
 2     GPIO_InitTypeDef  GPIO_InitStructure;     // GPIO初始化结构体
 3     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);    //使能APB2总线的GPIO ABC   
 4     GPIO_InitStructure.GPIO_Pin = LED1 | LED2; //选择端口号(0~15或all)                        
 5     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择IO接口工作方式       
 6     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz)    
 7     GPIO_Init(LEDPORT, &GPIO_InitStructure);            
 8 }
 9  
10 /*********************************************************************************************
11  * 杜洋工作室 www.DoYoung.net
12  * 洋桃电子 www.DoYoung.net/YT 
13 *********************************************************************************************/
14 
15 
16 /*
17 选择IO接口工作方式:
18 GPIO_Mode_AIN 模拟输入
19 GPIO_Mode_IN_FLOATING 浮空输入
20 GPIO_Mode_IPD 下拉输入
21 GPIO_Mode_IPU 上拉输入
22 GPIO_Mode_Out_PP 推挽输出
23 GPIO_Mode_Out_OD 开漏输出
24 GPIO_Mode_AF_PP 复用推挽输出
25 GPIO_Mode_AF_OD 复用开漏输出
26 */
 1 int main (void){//主程序
 2     RCC_Configuration(); //时钟设置
 3     LED_Init();
 4     while(1){
 5         
 6         //方法1:
 7         GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1)); //LED1接口输出高电平1
 8         delay_us(50000); //延时1秒
 9         GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0)); //LED1接口输出低电平0
10         delay_us(50000); //延时1秒
11         
12         //方法2:
13 //        GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED1))); //取反LED1
14 //        delay_ms(500); //延时1秒
15 
16         //方法3:
17 //        GPIO_SetBits(LEDPORT,LED1); //LED灯都为高电平(1)
18 //        delay_s(1); //延时1秒
19 //        GPIO_ResetBits(LEDPORT,LED1); //LED灯都为低电平(0)
20 //        delay_s(1); //延时1秒
21 
22         //方法4
23 //        GPIO_Write(LEDPORT,0x0001); //直接数值操作将变量值写入LED
24 //        delay_s(2); //延时1秒
25 //        GPIO_Write(LEDPORT,0x0000); //直接数值操作将变量值写入LED
26 //        delay_s(2); //延时1秒
27 
28     }
29 }

 

posted @ 2022-09-10 19:04  All_just_for_fun  阅读(165)  评论(0编辑  收藏  举报