跳转到主要内容

STM32设置IO口输入上拉下拉

cathy 提交于

<strong><font color="#004a85">1、按键分类</font> </strong>

WK_UP按键按下时将高电平信号输入给STM32的IO,即高电平有效;不被按下时,由于干扰,可能高也可能是低信号输入。

KEY0按键按下时将低信号输入给STM32的IO,即低电平有效;不被按下时,由于干扰,可能高也可能是低信号输入。

<center><img src="http://mcu.eetrend.com/files/2021-10/博客/100554550-223871-1.png&quot; alt=“STM32设置IO口输入上拉下拉"></center>

根据实际需要,为保证WK_UP不被按下时,STM32能够确定检测到IO口是低电平,所以设置接入下拉电阻。

<strong><font color="#004a85">2、上拉电阻和下拉电阻</font> </strong>

上拉电阻:保证IO没有外部信号输入时,STM32检测到是高电平,有信号时,跟随信号电平;

下拉电阻:保证IO没有信号输入时,STM32检测到是低电平,有信号时,跟随信号电平。

<center><img src="http://mcu.eetrend.com/files/2021-10/博客/100554550-223872-2.png&quot; alt=“STM32设置IO口输入上拉下拉"></center>
<center><img src="http://mcu.eetrend.com/files/2021-10/博客/100554550-223873-3.png&quot; alt=“STM32设置IO口输入上拉下拉"></center>

<strong><font color="#004a85">3、io口初始化程序设置</font> </strong>

<pre style="overflow-x:auto; background-color:#e9e9e9;">#include "key.h"
#include "delay.h"
//按键初始化函数
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);//使能PORTA,PORTC 时钟
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
//关闭 jtag,使能 SWD,可以用 SWD 模式调试
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;//PA15接KEY1
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化 GPIOA15
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//PC5接KEY0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化 GPIOC5
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//PA0接WK_UP
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 设置成输入,默认下拉
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化 GPIOA.0
}</pre>

<strong><font color="#004a85">4、初始化后效果</font> </strong>

WK_UP被按下,PA0=1;WK_UP不被按下,PA0=0;

KEY0被按下,PC5=0;KEY0不被按下,PC5=1。

参考:STM32不完全手册V3.1--库函数版本--ALIENTEK Mini2 STM32开发板教程

版权声明:本文为CSDN博主「anddeveloper」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43105157/article/details/105880938