STM32学习系列----STM32之GPIO
来源:互联网 发布:万达电商 淘宝别 编辑:程序博客网 时间:2024/04/29 16:21
STM32之GPIO
欢迎转载,转载请注明原作者
1.GPIO解释
GPIO英文全称是General-purpose input/ouput,即通用型输入输出,GPIO根据配置可以作为通用输入(GPI),通用输出(GPO)或是通用输入输出(GPIO)
2.GPIO工作模式
GPIO共有八种工作模式,其中包括4种输入模式和4种输出模式。其中输出模式有3种输出速率
输入模式
- 上拉输入
- 下拉输入
- 浮空输入
- 模拟输入
1.上拉输入:配置为上拉输入模式时,内部上拉电阻连接;若无高低电平输入时,检测该管脚电平为高电平。
2.下拉输入:配置为下拉输入模式时,内部下拉电阻连接;若无高低电平输入时,检测该管脚电平为低电平。
3.浮空输入:配置为浮空输入模式时,内部上拉电阻与下拉电阻均不连接;若无高低电平输入时,检测该管脚电平未知。
4.模拟输入:配置为模拟输入模式时,输入信号不再经过TTL肖特基触发器1,直接输入到芯片内部检测,一般用于ADC等模拟量信号采集。
输出模式
- 开漏输出
- 推挽输出
- 复用开漏输出
- 复用推挽输出
输出模式实质是两种模式,一是开漏输出,一是推挽输出
1.开漏输出:输出信号“0”时会激活N-MOS,N-MOS导通,输出管脚与VSS连通,输出低电平;输出信号“1”时不激活P-MOS,同时N-MOS也不导通,输出管脚为高阻态。因此一般开漏输出管脚与外部上拉电阻连接,输出信号“1”时管脚会被外部上拉电压钳高,该模式可以需要用于匹配电平的场合。
2.推挽输出:输出信号“0”时会激活N-MOS,N-MOS导通,输出管脚与VSS连通,输出低电平。输出信号“1”时会激活P-MOS,P-MOS导通,输出管脚与VDD连通,输出高电平电平。这个模式输出高低电平时会分别导通一个MOS管,既提高电路负载能力,又提高开关速度2。
3.复用开漏输出:实质上是和开漏模式一样,在GPIO复用功能时使用
4.复用推挽输出:实质上是和推挽模式一样,在GPIO复用功能时使用
输出速度
输出模式下,有3种输出速度可选(2MHz,10mHz和50MHz),这个速度是指IO口驱动电路的响应速度而不是输出信号的速度。通过选择速度来选择不同的驱动输出模块,达到最佳的噪声控制和降低功耗的目的。
高频信号输出会带来功耗增加和噪声增大;低频信号输出可能会带来信号失真,因此需要根据实际需要来选择合适的速度输出3。
3.GPIO配置寄存器
每个GPIO端口有7个寄存器,其中包括
-2个32位端口配置寄存器(CRL,CRH)
分别控制端口低8位和高8位的工作模式(即8种工作模式和输出速度):在这2个寄存器中每一管脚(Pin)有4bit对应:CNF[1]-CNF[0];MODE[1]-MODE[0]
-32位端口输入数据寄存器(IDR)
低16位使用,这些位只读,而且只能以字(16bit)的形式读出,读出值对应管脚(Pin)状态。
-32位端口输出数据寄存器(ODR)
低16位使用,这些位可读可写,只能以字(16bit)的形式操作。
-32位端口设置/清除寄存器(BSRR)
低16位为设置位BSy,这些位只写,而且只能以字(16bit)的形式写入,写0不影响ODRy,写1设置对应ODRy为1;
高16位为清除位BRy,这些位只写,而且只能以字(16bit)的形式写入,写0不影响ODRy,写1设置对应ODRy为0。
如果同时设置了BSy和BRy的对应位,则BSy起作用
-32位端口清除寄存器(BRR)
低16位为清除位BSy,这些位只写,而且只能以字(16bit)的形式写入,写0不影响ODRy,写1设置对应ODRy为04;
-32位端口配置锁定寄存器(LCKR)
该寄存器用于锁定端口管脚
bit16是锁键位LCKK,该位为0代表锁键未激活,为1代表锁键已激活;锁键激活需要向锁键位写入特定的写入序列(写1->写0->写1->读0->读1)(最后一次读指令可以取消)
bit[0:15]为锁位LCKy,这些位可读可写,但只能在LCKK为0(锁键未激活)时写入,该位为0代表不锁定,为1代表锁定。
4.基于V3.5库函数的GPIO配置函数(野火开发板教程)
void GPIO_configuration(void){ //定义结构体 GPIO_InitTypeDef GPIO_InitStructure; //开启端口C的时钟 RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE); //选择需要控制的管脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7; //选择推挽输出模式 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //输出速度为50MHz GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //初始化GPIOC GPIO_Init(GPIOC, &GPIO_InitStructure); //置高各个管脚 GPIO_SetBits(GPIOC, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7); }
- 肖特基触发器是一种阈值开关电路,具有突变输入——输出特性的门电路。这种电路被设计成阻止输入电压出现微小变化(低于某一阈值)而引起的输出电压的改变 ↩
- http://bbs.elecfans.com/infocenter.php?mod=space&uid=961328&do=blog&id=242993 ↩
- http://blog.csdn.net/dldw8816/article/details/51450833 ↩
- 既可以通过ODRy设置管脚(Pin),也可以通过BSy和BRy设置,但是通过ODRy设置管脚(Pin)需要首先读取保存ODRy数据,再进行设置管脚(Pin)在这个过程中有可能被中断影响—–引用http://www.cnblogs.com/shangdawei/p/4723941.html ↩
- STM32学习系列----STM32之GPIO
- STM32学习系列----STM32之USART
- 【2015-1-15】STM32学习之GPIO
- STM32学习笔记之GPIO配置问题
- 寒假学习之STM32(1)----GPIO
- stm32学习笔记之GPIO配置
- STM32学习记录之GPIO篇
- STM32 GPIO入门学习
- STM32-GPIO学习笔记
- STM32--GPIO学习
- STM32 GPIO IIC学习
- STM32学习---GPIO
- STM32 GPIO的学习
- STM32之GPIO笔记
- STM32之GPIO
- STM32之GPIO&AFIO
- STM32之GPIO
- STM32之GPIO
- 运维请注意:”非常危险“的Linux命令大全
- cfq_init
- 【BZOJ 1858】【SCOI 2010】序列操作【区间线段树】
- Android应用中去掉标题栏方法总结(Eclipse+Android Studio)
- Spring基于xml文件的方式配置AOP
- STM32学习系列----STM32之GPIO
- virtualbox安装centos后无法上网解决办法
- 318. Maximum Product of Word Lengths
- android蓝牙控制PC——PC端代码
- 最长回文子串第一部分(leetcode)
- Activity之间startActivityForResult传递和接受数据
- 《谍影重重5》中的黑科技
- ZOJ 1003Crashing Balloon
- LightOJ