各位大虾,我最近调试触摸屏,发现很奇怪的问题,请各位大虾帮忙看一下。。程序运行的结果是:最开始白屏,然后一有触摸,就触发中断,然后就红、蓝、白三色快速交替全屏出现,好像就是一直在中断函数里转,没有跳出到Touch_Adjust()里面的while(1)大循环里。
#include <sys.h>
#include <stm32f10x_lib.h>
#include <SSD1289.h>
#define DIN1 GPIOC->ODR|=(1<<11)
#define DIN0 GPIOC->ODR&=~(1<<11)
#define DOUT GPIOC->ODR&=(1<<10)
#define CS1 GPIOD->ODR|=(1<<2)
#define CS0 GPIOD->ODR&=~(1<<2)
#define CLK1 GPIOC->ODR|=(1<<12)
#define CLK0 GPIOC->ODR&=~(1<<12)
#define PEN (GPIOC->IDR&(1<<3)) //PC3 中断信号 有触摸时低电平,否则高电平
u8 k=0;
void Touch_Init()
{
RCC->APB2ENR|=1<<4; //PC时钟使能
RCC->APB2ENR|=1<<0; //使能io复用时钟
AFIO->MAPR|=(1<<26); //关闭JTAG-DP,关闭SW-DP
GPIOC->CRL&=0XFFFF0FFF;//PC3输入
GPIOC->CRL|=0X00008000;//PC3上拉输入
GPIOC->ODR|=(1<<3); //上拉
GPIOC->CRH&=0XFFF000FF;
GPIOC->CRH|=0X00033800;
GPIOC->ODR|=0X1C00;
GPIOD->CRL&=0XFFFFF0FF;
GPIOD->CRL|=0X00000300;
GPIOD->ODR|=0X0004;
AFIO->EXTICR[0]|=0X2000; //EXTI3映射到PC.3
MY_NVIC_Init(2,0,EXTI3_IRQChannel,2);
EXTI->IMR|=1<<3; //开启line3上的中断
EXTI->EMR|=1<<3; //不屏蔽line3上的事件
EXTI->FTSR|=1<<3; //line3上事件下降沿触发
}
void EXTI3_IRQHandler(void)
{
EXTI->IMR&=~(1<<3); //关闭line3上的中断
k++;
if(k==1)
LCD_Clear(RED);//清屏红色
else if(k==2)
LCD_Clear(BLUE);//清屏蓝色
else if(k==3)
LCD_Clear(WHITE);//清屏白色
}
void Touch_Adjust()
{
LCD_Clear(WHITE);//清屏白色
while(1)
{
if(k==1)
{
while(PEN == 0);
delay_ms(300);
EXTI->PR=1<<3; //清除中断标志位
EXTI->IMR|=1<<3; //开启line3上的中断
}
else if(k==2)
{
while(PEN == 0);
delay_ms(300);
EXTI->PR=1<<3; //清除中断标志位
EXTI->IMR|=1<<3; //开启line3上的中断
}
else if(k==3)
{
while(PEN == 0);
delay_ms(300);
EXTI->PR=1<<3; //清除中断标志位
EXTI->IMR|=1<<3; //开启line3上的中断
}
else if(k==4)
{
while(PEN == 0);
delay_ms(300);
EXTI->PR=1<<3; //清除中断标志位
EXTI->IMR|=1<<3; //开启line3上的中断
break;
}
}
}
int main()
{
Stm32_Clock_Init(9);
delay_init(72);
LCD_Init();
Touch_Init();
LCD_Clear(WHITE);
Touch_Adjust();
while(1);
}
|