stm32开发之外部中断(二进制灯)

Proteus和Keils程序下载(百度网盘)

链接:https://pan.baidu.com/s/16d4WXDRUduuw7KPAu1_-mQ
提取码:nbxy

(有一说一,CSDN上传资源就算本来下载积分设成0,也会自己调高,真的难受,还是放链接了)

stm32开发之外部中断(二进制灯)

proteus仿真图

stm32开发之外部中断(二进制灯)_第1张图片

keil程序

#include //单片机工程可以不用

#include //这个头文件一定要包含 ---这个头文件官方帮我们定义好了所有寄存器的地址

int Number = 0x00;

void delay(unsigned int xms)  // xms代表需要延时的毫秒数
{
    unsigned int x,y;
    for(x=xms;x>0;x--)
        for(y=110;y>0;y--);
}



void LEd_Init(void)
{
	//结构体命名
	GPIO_InitTypeDef aaa;
	//对应时钟模块使能
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
	
	//结构体变量数据设置
	aaa.GPIO_Mode = GPIO_Mode_OUT;
	aaa.GPIO_OType = GPIO_OType_PP;
	aaa.GPIO_Pin = 0xff;
	aaa.GPIO_Speed = GPIO_High_Speed;
	
	//写入结构体指针
	GPIO_Init(GPIOC,&aaa);	
	
}



void EXIT_Init(void)
{
	//定义结构体
	GPIO_InitTypeDef aaa;
	EXTI_InitTypeDef eee;
	NVIC_InitTypeDef ccc;
	
	//时钟使能
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
	
	aaa.GPIO_Mode = GPIO_Mode_IN;
	aaa.GPIO_Pin = 0b1110;
	aaa.GPIO_PuPd = GPIO_PuPd_UP;
	
	//写入
	GPIO_Init(GPIOA,&aaa);	
	
	//连接GPIOA 1 2 3 和外部中断EXIT 1 2 3 模块
	SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, 0b1110);
	
	eee.EXTI_Line = 0b1110;
	eee.EXTI_LineCmd = ENABLE;
	eee.EXTI_Mode = EXTI_Mode_Interrupt;
	eee.EXTI_Trigger = EXTI_Trigger_Rising;
	//写入
	EXTI_Init(&eee);

	//中断管理--用户中断,可编程中断  framework----misc.c  misc.h
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断优先级分组  2分组
	
	ccc.NVIC_IRQChannel = EXTI1_IRQn;//去stm32f4xx.h   Line176 找到
	ccc.NVIC_IRQChannelCmd = ENABLE;
	ccc.NVIC_IRQChannelPreemptionPriority = 0;//抢占优先级 第一优先级
	ccc.NVIC_IRQChannelSubPriority = 0;//响应优先级 第二优先级
	NVIC_Init(&ccc);
	
	ccc.NVIC_IRQChannel = EXTI2_IRQn;//去stm32f4xx.h   Line176 找到

	NVIC_Init(&ccc);
	
	ccc.NVIC_IRQChannel = EXTI3_IRQn;//去stm32f4xx.h   Line176 找到
	ccc.NVIC_IRQChannelCmd = ENABLE;
	ccc.NVIC_IRQChannelPreemptionPriority = 0;//抢占优先级 第一优先级
	ccc.NVIC_IRQChannelSubPriority = 0;//响应优先级 第二优先级
	NVIC_Init(&ccc);
	

	
	
}

void EXTI1_IRQHandler(void)
{
	Number += 0x01;

	GPIO_Write(GPIOC, Number);
}

void EXTI2_IRQHandler(void)
{
	Number -= 0x01;
	GPIO_Write(GPIOC, Number);
}	
	
void EXTI3_IRQHandler(void)
{
	Number = 0x00;
	GPIO_Write(GPIOC, Number);
}	
	
int main()
{
	LEd_Init();
	
	GPIO_WriteBit(GPIOC, Number, 1);
	
	EXIT_Init();
	
	while(1)
	{
		
	}
	
	
	return 0;//主函数的返回
}

你可能感兴趣的:(stm32开发)