GPIO工作原理
作者:互联网
一、
4种输入模式:
- 输入浮空
- 输入上拉
- 输入下拉
- 模拟输入
4种输出模式:
- 开漏输出
- 开漏复用功能
- 推挽式输出
- 推挽式复用功能
3种最大翻转速度:
- -2MHZ
- -10MHz
- -50MHz
推挽输出:
可以输出强高低电平,连接数字器件。
开漏输出:
只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极.要得到高电平状态需要上拉电阻才行.适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)
二、
每组GPIO端口的寄存器包括:
- 两个32位配置寄存器(GPIOx_CRL , GPIOx_CRH) ,
- 两个32位数据寄存器(GPIOx IDR和GPIOX_ODR),
- 一个32位置位/复位寄存器(GPIOx_ BSRR),
- 一个16位复位寄存器(GPIOX_ BRR),
- 一个32位锁定寄存器(GPIOx_LCKR)。
每个I/O端口位可以自由编程,然而I/O端口寄存器必须按32位字被访问(不允许半字或字节访问)。
提示:CRL/CRH每四个位控制一个IO口,CRL控制标号0-7的口,CRH控制标号8-15的口。
三、
四、
#include "stm32f10x.h"
void Delay(u32 count)
{
u32 i=0;
for(;i<count;i++);
}
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|
RCC_APB2Periph_GPIOE, ENABLE); //使能PB,PE端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->PB.5 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIOB.5
GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1-->PE.5推挽输出
GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化GPIO
GPIO_SetBits(GPIOE,GPIO_Pin_5); //PE.5 输出高
while(1)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_5);//GPIO_ResetBits()输出低电平
GPIO_SetBits(GPIOE,GPIO_Pin_5);//GPIO_SetBits()输出高电平
Delay(3000000);
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOE,GPIO_Pin_5);
Delay(6000000);
}
}
1. 首先使能对应IO的时钟 RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)使能时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //使能PB,PE端口时钟
2.初始化IO口,调用 GPIO_Init(); 函数
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIOB.5
3.操作IO口,输出高低电平
GPIO_ResetBits(GPIOB,GPIO_Pin_5);//GPIO_ResetBits()输出低电平
GPIO_SetBits(GPIOE,GPIO_Pin_5);//GPIO_SetBits()输出高电平
标签:输出,Pin,寄存器,GPIOB,工作,原理,GPIO,SetBits 来源: https://blog.csdn.net/m0_52509303/article/details/122563470