常规电路(带上拉电阻)
阻值可选3.3/4.7/5.1/10 单位K
偷懒电路
利用GPIO内部的上拉模式
代码(直接拷贝使用)
这是一个外部中断控制变量a增加减少的demo
为了新手方便我直接都写在了main.c文件
#include "stm32f10x.h"
u8 keyflag=0;
u8 a=0;
void KEY_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_InitTypeDef GPIO_in;
GPIO_in.GPIO_Mode=GPIO_Mode_IPU;
GPIO_in.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4;
GPIO_Init(GPIOE,&GPIO_in);
}
void My_EXIT_Init(void)
{
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);
EXTI_InitTypeDef EXTI_in;
EXTI_in.EXTI_Line=EXTI_Line3|EXTI_Line4;
EXTI_in.EXTI_LineCmd=ENABLE;
EXTI_in.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_in.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_Init(&EXTI_in);
}
void KEY_NVIC_CFG(void)
{
NVIC_InitTypeDef nvic_in;
nvic_in.NVIC_IRQChannel=EXTI3_IRQn;
nvic_in.NVIC_IRQChannelCmd=ENABLE;
nvic_in.NVIC_IRQChannelPreemptionPriority=0;
nvic_in.NVIC_IRQChannelSubPriority=0;
NVIC_Init(&nvic_in);
nvic_in.NVIC_IRQChannel=EXTI4_IRQn;
nvic_in.NVIC_IRQChannelCmd=ENABLE;
nvic_in.NVIC_IRQChannelPreemptionPriority=0;
nvic_in.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&nvic_in);
}
//中断函数3
void EXTI3_IRQHandler(void)
{
EXTI_ClearFlag(EXTI_Line3);
keyflag=1;
}
//中断函数4
void EXTI4_IRQHandler(void)
{
EXTI_ClearFlag(EXTI_Line4);
keyflag=2;
}
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
KEY_Init();
My_EXIT_Init();
KEY_NVIC_CFG();
while(1)
{
if(keyflag==1)
{
keyflag=0;
a++;
}
else if(keyflag==2)
{
keyflag=0;
a--;
}
}
}
工程获取
三连后点击下方头像