初级会员

- 积分
- 51
- 金钱
- 51
- 注册时间
- 2011-11-2
- 在线时间
- 0 小时
|

楼主 |
发表于 2011-11-4 20:05:17
|
显示全部楼层
仿真执行到中断就只能停止了……工程文件如下:
exti.h代码:
#ifndef _EXTI_H
#define _EXTI_H
void exti_init(void);
#endif
exti.c代码:
#include"exti.h"
#include"led.h"
#include"key.h"
#include"delay.h"
#include"usart.h"
void EXTI0_IRQHander(void) //PA0(wake键)触发的外部中断服务函数
{
delay_ms(10); //消抖
if(key_wake==0)
{
led1=!led1;
led2=!led2;
}
EXTI-> R=1<<0; //清除line0中断线上的中断标志位
}
void EXTI19_5_IRQHand(void) //PA8(user1键)触发的外部中断服务函数
{
delay_ms(10);
if(key0==0)
led1=!led1;
EXTI-> R=1<<8;
}
void EXTI3_IRQHandler(void) //PD3(user2键)触发的外部中断服务函数
{
delay_ms(10);
if(key1==0)
led2=!led2;
EXTI-> R=1<<3;
}
void exti_init(void)
{
RCC->APB2ENR|=1<<2; //使能portA时钟
RCC->APB2ENR|=1<<5; //使能portD时钟
JTAG_Set(JTAG_SWD_DISABLE);
//KEY0设置
GPIOA->CRH&=0XFFFFFFF0; //PA8设置成输入模式
GPIOA->CRH|=0X00000008; //PA8进一步设置成上下拉输入模式
//KEY1设置
GPIOA->CRL&=0XFFFFFFF0; //PA0设置成输入模式
GPIOA->CRL|=0X00000008; //PA0进一步设置成上下拉输入模式
//wake_up设置
GPIOD->CRL&=0XFFFF0FFF; //PD3设置成输入模式
GPIOD->CRL|=0X00008000; //PD3进一步设置成上下拉输入模式
GPIOA->ODR|=1<<0; //PA0上拉
GPIOA->ODR|=1<<8; //PA8上拉,PA0下拉(默认)
GPIOD->ODR|=1<<3; //PD3上拉
Ex_NVIC_Config(GPIO_A,8,FTIR);
Ex_NVIC_Config(GPIO_D,3,FTIR);
Ex_NVIC_Config(GPIO_A,0,FTIR);
MY_NVIC_Init(2,1,EXTI9_5_IRQChannel,2); //user1键(PA8)中断初始化
MY_NVIC_Init(2,1,EXTI3_IRQChannel,2); //user2键(PD3)中断初始化
MY_NVIC_Init(2,2,EXTI0_IRQChannel,2); //key_wake键(PA0)中断初始化
}
test.c代码:
#include<stm32f10x_lib.h>
#include"sys.h"
#include"usart.h"
#include"delay.h"
#include"led.h"
#include"key.h"
#include"exti.h"
int main()
{
Stm32_Clock_Init(9);
delay_init(72);
uart_init(72,9600);
led_init();
exti_init();
while(1)
{
printf("ok ");
delay_ms(1000);
}
}
整个工程编译通过,没贴出来的led.h等都调试通过了,系统代码用的您的。麻烦老师再帮忙看一下。 |
|