赞
踩
目录
- 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(开时钟)
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种)的复用功能,具体功能需要查询手册。
在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状态为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的知识,便于以后复习所用,如有不妥之处,欢迎留言指正,共同进步!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。