li_yongcun 发表于 2010-4-17 11:35:29

关于STM32F103VET6 GPIO不稳定原因

请各位大虾帮忙分析一下,芯片是STM32F103VET6用来驱动12864点阵液晶
硬件连接图为PB13--->LCD_RS           PB14--->LCD_RW          PB15--->LCD_E
                      PC6--->LCD_CS1          PC7--->LCD_CS2           PC8--->LCD_RET
                     PD8~PD15接到LCD_DB0~LCD_DB7
然后我用这几个GPIO驱动LED发光二极管
 PB0  PB1  PC5  PD0~PD5 PD7
系统滴答中断程序为////////////////////////////系统滴答/////////////////////////////////
void SysTick_Handler(void)
{
 TimeVar++;
 if(TimeVar%2==0)
  {
   GPIO_SetBits(GPIOB,GPIO_Pin_0);//GPIOB->ODR = (GPIOB->ODR & 0xFFFFFFFC);    //B0 B1
   GPIO_SetBits(GPIOB,GPIO_Pin_1);
   GPIO_SetBits(GPIOC,GPIO_Pin_5);//GPIOC->ODR = (GPIOC->ODR & 0xFFFFFFDF);    //C5
   GPIO_SetBits(GPIOD,GPIO_Pin_0);//GPIOD->ODR = (GPIOD->ODR & 0xFFFFFF40);    //D1 D2 D3 D4 D5 D7
   GPIO_SetBits(GPIOD,GPIO_Pin_1);
   GPIO_SetBits(GPIOD,GPIO_Pin_2);
   GPIO_SetBits(GPIOD,GPIO_Pin_3);
   GPIO_SetBits(GPIOD,GPIO_Pin_4);
   GPIO_SetBits(GPIOD,GPIO_Pin_5);
   GPIO_SetBits(GPIOD,GPIO_Pin_7);
 //  GPIOE->ODR = (GPIOE->ODR & 0x00FF);
  }
 else
  {GPIO_ResetBits(GPIOB,GPIO_Pin_0);//GPIOB->ODR = (GPIOB->ODR & 0xFFFFFFFC);    //B0 B1
   GPIO_ResetBits(GPIOB,GPIO_Pin_1);
   GPIO_ResetBits(GPIOC,GPIO_Pin_5);//GPIOC->ODR = (GPIOC->ODR & 0xFFFFFFDF);    //C5
   GPIO_ResetBits(GPIOD,GPIO_Pin_0);//GPIOD->ODR = (GPIOD->ODR & 0xFFFFFF40);    //D1 D2 D3 D4 D5 D7
   GPIO_ResetBits(GPIOD,GPIO_Pin_1);
   GPIO_ResetBits(GPIOD,GPIO_Pin_2);
   GPIO_ResetBits(GPIOD,GPIO_Pin_3);
   GPIO_ResetBits(GPIOD,GPIO_Pin_4);
   GPIO_ResetBits(GPIOD,GPIO_Pin_5);
   GPIO_ResetBits(GPIOD,GPIO_Pin_7);
 //  GPIOE->ODR = (GPIOE->ODR | 0xFF00);
  }  
}
液晶接口初始化程序为#define di               (   1 ODR & ~cs1) | (x ? cs1 : 0);
//#define LCD_CS2(x)             GPIOC->ODR = (GPIOC->ODR & ~cs2) | (x ? cs2 : 0);
//#define LCD_RET(x)             GPIOC->ODR = (GPIOC->ODR & ~reset) | (x ? reset : 0);
/* Reading DATA pins                                                          */
//#define LCD_DATA_IN           //(GPIOD->IDR  >> 8)
/* Writing value to DATA pins                                                 */
#define LCD_DATA_OUT(x)       GPIOD->ODR = (GPIOD->ODR & ~PINS_DATA) | (x CRH = (GPIOB->CRH & 0x000FFFFF) | 0x11100000; \
         GPIOC->CRL = (GPIOC->CRL & 0x00FFFFFF) | 0x11000000; \
         GPIOD->CRH = (GPIOD->CRH & 0x00000000) | 0x11111111;
/* Setting DATA pins to input mode                                            */
#define LCD_DATA_DIR_IN       GPIOD->CRH = (GPIOD->CRH & 0x00000000) | 0x88888888;
问题是,液晶显示正常,但系统滴答中断中的LED显示有时候不正常,LED应该是亮,但却熄灭了,或应该熄灭却亮了
如果我把液晶显示程序屏蔽掉,系统滴答中断里的LED指示灯就会正常工作,请问是什么问题呢,液晶和LED我都是单独设置的GPIO口
状态啊,可为什么LCD工作还是会影响到LED工作呢???
页: [1]
查看完整版本: 关于STM32F103VET6 GPIO不稳定原因