OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1959|回复: 1

自己试着写的外部中断实验

[复制链接]

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
158
金钱
158
注册时间
2019-6-1
在线时间
26 小时
发表于 2019-6-9 23:30:52 | 显示全部楼层 |阅读模式
本帖最后由 zxx1320 于 2019-6-9 23:37 编辑

#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);              
        delay_init(72);                       
        LED_Init();                              
        BEEP_Init();               
        KEY_Init();               
        EXTIX_Init();                        
        LED0=0;                                      
        while(1)
        {            
                printf("OK\r\n");        
                delay_ms(1000);         
        }
}
//////////////////////////////////////////////////////////////////////////////////  
# include "led.h"
void LED_Init(void)
{
RCC->APB2ENR|=1<<5;
GPIOD->CRH&=0xf00fffff;
GPIOD->CRH|=0X03300000;

GPIOD->ODR|=0X00006000;
}
//////////////////////////////////////////////////////////////////////////////////
#ifndef __LED_H
#define __LED_H         
#include "sys.h"

//LED端口定义
#define LED0 PDout(13)// DS0
#define LED1 PDout(14)// DS1        

void LED_Init(void);//初始化                                                     
#endif

//////////////////////////////////////////////////////////////////////////////////  
# 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;
}
//按键处理函数
//返回按键值
//mode:0,不支持连续按;1,支持连续按;

u8 KEY_Scan(u8 mode)
{         
        static u8 key_up=1;
        if(mode)key_up=1;              
        if(key_up&&(KEY0==0||KEY1==0))
        {
                delay_ms(10);
                key_up=0;
                if(KEY0==0)return 1;
                else if(KEY1==0)return 2;
        }else if(KEY0==1&&KEY1==1)key_up=1;            
         return 0;
}

//////////////////////////////////////////////////////////////////////////////////            
#ifndef __KEY_H
#define __KEY_H         
#include "sys.h"

#define KEY0 PEin(0)        
#define KEY1 PCin(13)      
#define KEY_DOWN        2
#define KEY_RIGHT        1

void KEY_Init(void);
u8 KEY_Scan(u8);                                                
#endif

//////////////////////////////////////////////////////////////////////////////////   
//外部中断0服务程序
#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;
}
//外部中断2服务程序

void EXTI15_10_IRQHandler(void)
{
delay_ms(1);
        if(KEY1==0)
        {
LED0=!LED0;
                printf("exti1\r\n");
}
EXTI->PR=1<<13;
}

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);      
        MY_NVIC_Init(2,1,EXTI15_10_IRQn,2);
}

//////////////////////////////////////////////////////////////////////////////////  
#ifndef __EXTI_H
#define __EXIT_H         
#include "sys.h"
void EXTIX_Init(void);                                                         
#endif



实验5 外部中断实验.rar

780.13 KB, 下载次数: 9

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

143

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2019-5-30
在线时间
4 小时
发表于 2019-6-10 14:38:41 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 00:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表