在线时间0 小时
UID160364
ST金币0
蝴蝶豆0
注册时间2009-11-24
新手上路
- 最后登录
- 1970-1-1
|
a0a.1 0b0c
请各位大虾帮忙分析一下,芯片是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工作呢??? |
|