yly

stm32 中断实验

exti.c文件内容
#include “exti.h”
#include “delay.h”
#include “led.h”
#include “usart.h”
#include “key.h”
void EXTI0_IRQHandler(void)
{
delay_ms(1);
if(KEY0= =0)
{
LED1=!LED1;
printf(“exti0\r\n”);
}
EXTI->PR=1<<0;
}
void EXTI15_10_IRQHandler(void)
{
delay_ms(1);
if(KEY1==0)
{
LED0=!LED0;
printf(“exti1\r\n”);
}
EXTI->PR=1<<13;
}
//初始化PA0/PE2/PE3/PE4为中断输入.
void EXTIX_Init(void)
{
KEY_Init();
Ex_NVIC_Config(GPIO_E,0,FTIR); //上升沿触发
Ex_NVIC_Config(GPIO_C,13,FTIR);
MY_NVIC_Init(2,2,EXTI0_IRQn,2); //抢占2,子优先级3,组2
MY_NVIC_Init(2,1,EXTI15_10_IRQn,2);
}

exti.h文件内容
#ifndef __EXTI_H
#define __EXIT_H
#include “sys.h”
void EXTIX_Init(void);//外部中断初始化
#endif

key.c文件内容
#include “key.h”
#include “delay.h”
void KEY_Init(void)
{
RCC->APB2ENR|=1<<6;
RCC->APB2ENR|=1<<4;
GPIOE->CRL&=0XFFFFFFF0;
GPIOE->CRL|=0X00000008;
GPIOE->ODR|=1<<0;
GPIOC->CRH&=0XFF0FFFFF;
GPIOC->CRH|=0X00800000;
GPIOC->ODR|=1<<13;
}
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;//按键按松开标志
if(mode)key_up=1; //支持连按
if(key_up&&(KEY00||KEY10))
{
delay_ms(10);//去抖动
key_up=0;
if(KEY00)return 1;
else if(KEY1
0)return 2;
}else if(KEY01&&KEY11)key_up=1;
return 0;// 无按键按下
}

key.h文件内容
#ifndef __KEY_H
#define __KEY_H
#include “sys.h”
#define KEY0 PEin(0) //PE4
#define KEY1 PCin(13) //PE3
#define KEY_DOWN 2
#define KEY_RIGHT 1
void KEY_Init(void);//IO初始化
u8 KEY_Scan(u8); //按键扫描函数
#endif

led.c文件内容
include “led.h”
void LED_Init(void)
{
RCC->APB2ENR|=1<<5;
GPIOD->CRH&=0xf00fffff;
GPIOD->CRH|=0X03300000;
GPIOD->ODR|=0X00006000;
}

led.h文件内容
#ifndef __LED_H
#define __LED_H
#include “sys.h”
#define LED0 PDout(13)// DS0
#define LED1 PDout(14)// DS1
void LED_Init(void);//初始化
#endif

main.c文件内容
#include “sys.h”
#include “usart.h”
#include “delay.h”
#include “led.h”
#include “beep.h”
#include “key.h”
#include “exti.h”
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
uart_init(72,9600); //串口初始化为9600
delay_init(72); //延时初始化
LED_Init(); //初始化与LED连接的硬件接口
BEEP_Init(); //初始化蜂鸣器端口
KEY_Init(); //初始化与按键连接的硬件接口
EXTIX_Init(); //外部中断初始化
LED0=0; //点亮LED0
while(1)
{
printf(“OK\r\n”);
delay_ms(1000);
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值