文章目录[隐藏]
GPIO结构框图
推挽输出(0-3.3):
在该结构中输入高电平时,上方的P-MOS导通,下方的N-MOS截止,对外输出高电平 。
而在该结构中输入低电平时,N-MOS管导通,P-MOS截止,对外输出低电平。
当引脚高低电平切换时,两个管子轮流导通,P管负责灌电流,N管负责拉电流,使其负载能力和开关速度都比普通的方式有很大的提高。推挽输出的低电平为0伏,高电平为3.3伏。
开漏输出(0-5):
在开漏输出模式时,上方的P-MOS管始终处于截止状态。当输入低电平时,P-MOS管截止,N-MOS管导通,对外输出低电平。
若控制输入为高电平 ,则P-MOS管关闭,N-MOS管处于截止状态,所以引脚既不输出高电平,也不输出低电平,为高阻态。如需要输出高电平(5V),必须在外部接一个上拉电阻。
它具有“线与”特性。也就是说,若有很多个开漏模式引脚连接到一起时,只有当所有引脚都输出高阻态,才由上拉电阻提供高电平,此高电平的电压为外部上拉电阻所接的电源的电压。若其中一个引脚为低电平,那线路就相当于短路接地,使得整条线路都为低电平,0伏。
输出数据寄存器:
前面提到的双MOS管结构电路的输入信号,是由GPIO“输出数据寄存器“GPIOx_ODR”提供的,因此我们通过修改输出数据寄存器的值就可以修改GPIO引脚的输出电平。
复用功能输出
“复用功能输出”中的“复用”是指STM32的其他片上外设对GPIO引脚进行控制,此时GPIO引脚用作该外设的一部分,算第二用途。从其他外设引出来的“复用功能输出信号”与GPIO本身的数据寄存器都连接到双MOS管结构中,通过途中梯形结构作为开关切换选择。
例如我们使用USART串口通讯时,需要用到某个GPIO引脚作为通讯发送引脚,这个时候就可以把该GPIO引脚配置成USART串口复用功能,由串口外设控制该引脚,发送数据。
相关寄存器配置
STM32F10x共有7组GPIO(从A到G),每组GPIO有16个端口(从0到15)。
每组GPIO端口有以下7个寄存器,每组寄存器可以控制16个I/O口。
GPIOx_CRL :端口配置低寄存器
GPIOx_CRH:端口配置高寄存器
GPIOx_IDR:端口输入寄存器
GPIOx_ODR:端口输出寄存器
GPIOx_BSRR:端口位设置/清除寄存器
GPIOx_BRR :端口位清除寄存器
GPIOx_LCKR:端口配置锁存寄存器
根据数据手册中列出的每个I/O端口的特定硬件特征, GPIO端口的每个位可以由软件分别配置 成多种模式。
─ 输入浮空 ─ 输入上拉 ─ 输入下拉 ─ 模拟输入 ─ 开漏输出 ─ 推挽式输出
─ 推挽式复用功能 ─ 开漏复用功能
寄存器配置(以低寄存器配置为例)
范例:(以库函数为例)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(GPIOC, GPIO_Pin_13);
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
版权声明:本文为CSDN博主「让记忆定格1024」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_60996380/article/details/122913775
暂无评论