OpenEdv-开源电子网

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

想要用中断捕获输入信号的第一次下降沿,为什么没反应??

[复制链接]

6

主题

24

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2013-7-24
在线时间
3 小时
发表于 2013-8-4 19:48:09 | 显示全部楼层 |阅读模式
#include "exti.h"
#include "led.h"
#include "delay.h"
#include "usart.h"
#include "lcd.h"

u32 T1,T2,T3,T4;

char num;

void EXTI1_IRQHandler(void)
{
EXTI->R=1<<1;
LED0=!LED0;
T1=TIM2->CNT;
EXTI->IMR=0<<1;//屏蔽外部中断
num++;
// LCD_ShowNum(30,50,T1,5,16);

}
void EXTI2_IRQHandler(void)
{
EXTI->R=1<<2;
// LED1=!LED1;
  T2=TIM2->CNT;
// LCD_ShowNum(30,70,T2,5,16);
EXTI->IMR=0<<2;//屏蔽外部中断
num++;
}
void EXTI3_IRQHandler(void)
{
EXTI->R=1<<3;
// LED0=!LED0;
// LED1=!LED1;
T3=TIM2->CNT;
// LCD_ShowNum(30,90,T3,5,16);
EXTI->IMR=0<<3;//屏蔽外部中断
num++;
}
void EXTI4_IRQHandler(void)
{
EXTI->R=1<<4;
T4=TIM2->CNT;
EXTI->IMR=0<<4;//屏蔽外部中断
num++;
// LCD_ShowNum(30,110,T4,5,16);
}

void EXTIX_Init(void)
{
RCC->APB2ENR|=1<<2;     //使能PORTA时钟
JTAG_Set(JTAG_SWD_DISABLE);//关闭JTAG和SWD   

GPIOA->CRL&=0XFFF0000F;//PA1-4设置成输入  
GPIOA->CRL|=0X00088880;   
  
GPIOA->ODR|=1<<1;   //PA1-4上拉
GPIOA->ODR|=1<<2;   //
GPIOA->ODR|=1<<3;   //PA1-4上拉
GPIOA->ODR|=1<<4;   //

Ex_NVIC_Config(GPIO_A,1,FTIR);//下降沿触发
Ex_NVIC_Config(GPIO_A,2,FTIR);//下降沿触发
Ex_NVIC_Config(GPIO_A,3,FTIR);//下降沿触发
Ex_NVIC_Config(GPIO_A,4,FTIR);//下降沿触发
MY_NVIC_Init(2,2,EXTI1_IRQChannel,2);//抢占2,子优先级2,组2
MY_NVIC_Init(2,2,EXTI2_IRQChannel,2);//抢占2,子优先级1,组2   
MY_NVIC_Init(2,1,EXTI3_IRQChannel,2);//抢占2,子优先级1,组2   
MY_NVIC_Init(2,1,EXTI4_IRQChannel,2);//抢占2,子优先级1,组2   
}

void display(void)
{
LCD_ShowNum(30,50,T1,5,16);
LCD_ShowNum(30,70,T2,5,16);
LCD_ShowNum(30,90,T3,5,16);
LCD_ShowNum(30,110,T4,5,16);
EXTI->IMR=1<<1; //开启外部中断
EXTI->IMR=1<<2;
EXTI->IMR=1<<3;
EXTI->IMR=1<<4;
}
void panduan(void)
{
if(num==4)
{
TIM2->CR1&=0xFE; //关闭TIM2
TIM2->CNT=0; //清零TIM2
num=0;
display();
}
}


int main(void)
{
  Stm32_Clock_Init(9); //系统时钟设置
delay_init(72);      //延时初始化
uart_init(72,9600);   //串口初始化 
LED_Init();   //初始化与LED连接的硬件接口
KEY_Init(); //按键初始化
LCD_Init();
POINT_COLOR=RED;
EXTIX_Init(); //外部中断初始化
Timer2_Init(9999,7199);//Tout=((arr+1)*(psc+1))/Tclk    5000*7200/72000000=0.5ms //Tout=1s
while(1)
{  
panduan();
}  
}


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

使用道具 举报

109

主题

1606

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
发表于 2013-8-4 19:59:59 | 显示全部楼层
捕获寄存器当中有数据了嘛?
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复 支持 反对

使用道具 举报

6

主题

24

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2013-7-24
在线时间
3 小时
 楼主| 发表于 2013-8-4 20:33:23 | 显示全部楼层
回复【2楼】ST-FAE-SALE:
---------------------------------
似乎PA4能够循环中断,别的只能计算一次中断。。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-4 22:45:46 | 显示全部楼层
EXTI->IMR=0<<4;//屏蔽外部中断

你这种写法,把所有的中断都给屏蔽了...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

24

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2013-7-24
在线时间
3 小时
 楼主| 发表于 2013-8-4 23:54:53 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
就是检测一次中断后就屏蔽,满足条件后,在循环里面开启啊。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-15 18:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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