STM32F407的GPIO设置流程、和相关寄存器及内部电路的理解及总结

目录

GPIO设置流程

GPIO相关寄存器

GPIO的内部电路

I/O端口位的基本结构

上拉与下拉(作用于输入)

推挽与开漏(输出)


GPIO设置流程

void LED_Init(void)
{    	 

    //1.定义结构体变量
    GPIO_InitTypeDef  GPIO_InitStructure;

    
    //2.使能GPIOF端口的时钟
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);



    //3.结构体成员初始化设置
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//选择GPIOF引脚        
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式     (模式寄存器)
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出类型  (输出类型寄存器)
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//输出速度100MHz  (输出速度寄存器)
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉   (上拉/下拉寄存器)
    
    //4.结构体成员数据全部传入配置函数
    GPIO_Init(GPIOF, &GPIO_InitStructure);//结构体成员的数据打包传入函数中进行配置
	
    
    //5.引脚电平设置为高或低
    GPIO_SetBits(GPIOF,GPIO_Pin_9 );//设置GPIOF9高电平,灯灭
    delay_ms(1000);延迟1秒
    GPIO_ResetBits(GPIOF,GPIO_Pin_9);//设置GPIOF9低电平,灯亮

}

总结:

设置流程:

1.定义结构体变量

2.使能GPIOF端口的时钟

3.结构体成员初始化设置

4.结构体成员数据全部传入配置函数

5.引脚电平设置为高或低

使用到的库函数的包含文件

stm32f4xx_gpio.h(gpio端口设置)

stm32f4xx_rcc.c(开时钟)

GPIO相关寄存器

32位寄存器寄存器名称说明
 配置寄存器

模式寄存器(GPIOx_MODER

用于配置GPIO端口方向或功能,每2位控制1个引脚,低位0到高位31控制0-15引脚,有4种模式

(高位:低位):

输入(00)、输出(01)、复用(10)、模拟(11)

输出类型寄存器(GPIOx_OTYPER)

寄存器高16位保留复位时状态,低位0-15用1/0设置对应引脚两种输出模式:

推挽(复位状态)(0)、开漏(1)

大多使用推挽,驱动强。

输出速度寄存器(GPIOx_OSPEEDR)

用于配置GPIO输出速度,每2位控制1个引脚,低位0到高位31控制0-15引脚,输出速度有4种:

(高位:低位):

2MHz(00)、25MHz(01)、

50MHz(10)、100MHz(11)

上拉/下拉寄存器(GPIOx_PUPDR)

每2位控制1个引脚,低位0到高位31控制0-15引脚,有4种类型

无上拉或下拉(00)、上拉(01)、

 下拉( 10)、保留(11 )。

数据寄存器
输入数据寄存器(GPIOx_IDR)

高16位(16-31)保留,低16位(0-15)有效

16个GPIO引脚中某个引脚输入高电平,则寄存器低16位对应位置1,反之,置0.

输出数据寄存器(GPIOx_ODR)除了是GPIO是输出功能,其他结构和功能同上
置位 / 复位寄存器
置位 / 复位寄存器 (GPIOx_BSRR)

 高16位为复位寄存器,低16位为置位寄存器

注意:两者都是位写0无效,写1有效,若两者同时置1,置位寄存器优先级更高

置位/复位寄存器的输出是连接输出数据寄存器的,对置位/复位寄存器操作,会改变数据输出寄存器的内容,从而改变GPIO引脚的输出作用。

锁定寄存器
配置锁定寄存器(GPIOx_LCKR)

高15位保留且必须保持复位值、编号16位(第17位)为端口配置锁定键(相当于使能),0未激活锁定,1激活锁定。

低16位为GPIO对应引脚的配置锁定,0未锁定,1锁定

注意:锁定的是配置寄存器、复位功能选用这两类的寄存器,引脚电平还是可更改的,所以数据寄存器和置位/复位寄存器不会锁定。

复用功能选择寄存器
复用功能选择寄存器
GPIOx_AFRH GPIOx_AFRL

用于配置GPIO复用功能,分高位和低位两个32位的寄存器,每个寄存器中每4位控制一个引脚,所以一个寄存器控制8个引脚,低位寄存器控制引脚(0-7),高位寄存器控制引脚(8-15)。

每一个引脚用4位选择16种类型(有些引脚可能没有16种)的复用功能,具体功能需要查询手册。

GPIO的内部电路

在Cortex-M3里,对于GPIO的配置种类有8种:

(1)GPIO_Mode_AIN 模拟输入

(2)GPIO_Mode_IN_FLOATING 浮空输入

(3)GPIO_Mode_IPD 下拉输入

(4)GPIO_Mode_IPU 上拉输入

(5)GPIO_Mode_Out_OD 开漏输出

(6)GPIO_Mode_Out_PP 推挽输出

(7)GPIO_Mode_AF_OD 复用开漏输出

(8)GPIO_Mode_AF_PP 复用推挽输出

I/O端口位的基本结构

上拉与下拉(作用于输入)

上下拉的时候一般在输入的时候设置。

没有上拉/下拉电阻,在没有外界输入的情况下输入端是悬空的,它的电平是未知的无法保证的,上拉/下拉确保了默认电平为固定值。

上拉

上拉电路接高电平后,默认是高电平状态,将不确定的信号通过一个电阻钳位在高电平,电阻同时起限流作用,上拉就是如果没有输入信号则此时I/O状态为1,下拉相反

下拉

下拉电路与上拉电路相反,电路接高电平后,默认是低电平状态,将不确定的信号通过一个电阻钳位在低电平,电阻同时起限流作用,上拉就是如果没有输入信号则此时I/O状态为0。

推挽与开漏(输出)

P-MOS基极小于一定电压值导通(NPN)----------------》基极负电压导通

N-MOS基极大于一定电压值导通(PNP)----------------》基极正电压导通

推挽

推挽输出的最大特点是可以真正能真正的输出高电平和低电平,在两种电平下都具有驱动能力。

优点:电流驱动强,输出电压基本与电源无压差,电平转换速度快(IO输出)。

注意:两个推挽电路的输出不能线与,否则,当一个P-MOS导通,另一个N-MOS管导通,会导致电源与地短路,烧毁器件。

推挽输出模式时:

  • 若向该结构中输入高电平,经过反向后,上方的P-MOS导通,下方的N-MOS关闭,对外输出高电平;
  • 若向该结构中输入低电平时,经过反向后,下方的N-MOS管导通,上方的P-MOS关闭,对外输出低电平。
  • 当引脚高低电平切换时,两个MOS管轮流导通,P管负责灌电流,N管负责拉电流,使其负载能力和开关速度都比普通的方式有很大的提高。**推挽输出的低电平为0V,高电平为3.3V**。

开漏(适用于IIC)

开漏输出无法真正输出高电平,即高电平(0V)时没有驱动能力,需要借助外部上拉电阻完成对外驱动,外部没有上拉电阻时只能输出低电平(负)或0。

学习心得:

1.初学STM32需要C语言函数和结构体的基础知识,C语言基础知识是很多东西的基础。

2.对于推挽和开漏的理解需要回头复习模电的相关知识,要深入对PMOS管和NMOS管的理解。

3.以写知识总结的方式确实能加强自己的学习驱动力,对于知识的理解也比单纯看书深入很多,同时能加强自己的总结能力。

4.学会查找库函数很重要,记住一些函数名称、结构体、模块功能在哪个源文件/头文件,直接查找复制过来加以修改,能大大减少工作量。

5.加油!!!

本文记录本人学习STM32的知识,便于以后复习所用,如有不妥之处,欢迎留言指正,共同进步!

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值