LCD ILI9341求助

2019-08-18 19:30发布

例程里用的PB0~15作为LCD的数据端口。我现在需要让PB0~7作为数据低8位,PE8~15作为数据高8位。
原例程的LCD.h和LCD.c是这样写的(部分代码):

/***lcd.h***/
//PB0~15,作为数据线
#define DATAOUT(x)     GPIOB->ODR=x; //数据输出
#define DATAIN     GPIOB->IDR;   //数据输入  

/***lcd.c***/
u16 LCD_RD_DATA(void)
{            
u16 t;
  GPIOB->CRL=0X88888888; //PB0-7  上拉输入
GPIOB->CRH=0X88888888; //PB8-15 上拉输入
GPIOB->ODR=0X0000;     //全部输出0
LCD_RS_SET;
LCD_CS_CLR;
//读取数据(读寄存器时,并不需要读2次)
LCD_RD_CLR;
if(lcddev.id==0X8989)delay_us(2);//FOR 8989,延时2us        
t=DATAIN;  
LCD_RD_SET;
LCD_CS_SET;
GPIOB->CRL=0X33333333; //PB0-7  上拉输出
GPIOB->CRH=0X33333333; //PB8-15 上拉输出
GPIOB->ODR=0XFFFF;    //全部输出高
return t;  
}
......

void LCD_Init(void)
{
  RCC->APB2ENR|=1<<3;//先使能外设PORTB时钟
  RCC->APB2ENR|=1<<4;//先使能外设PORTC时钟
RCC->APB2ENR|=1<<0;    //开启辅助时钟
JTAG_Set(SWD_ENABLE);  //开启SWD
            
//PORTC6~10复用推挽输出  
GPIOC->CRH&=0XFFFFF000;
GPIOC->CRH|=0X00000333;
GPIOC->CRL&=0X00FFFFFF;
GPIOC->CRL|=0X33000000;  
GPIOC->ODR|=0X07C0;   

//PORTB 推挽输出  
GPIOB->CRH=0X33333333;
GPIOB->CRL=0X33333333;   
GPIOB->ODR=0XFFFF;
......

/*******************************************************************/

我修改为:

/***lcd.h***/
//PB0~7,PE8~15 作为数据线
#define DATAOUT(x)    {GPIOB->ODR=(GPIOB->ODR&0XFF00)|(x&0X00FF);GPIOE->ODR=(GPIOE->ODR&0X00FF)|(x&0XFF00);}
#define DATAIN    (GPIOB->IDR&0X00FF)|(GPIOE->IDR&0XFF00)

/***lcd.c***/
u16 LCD_RD_DATA(void)
{            
u16 t;
  GPIOB->CRL=0X88888888; //PB0-7  上拉输入
GPIOE->CRH=0X88888888; //PE8-15 上拉输入
GPIOB->ODR&=0XFF00;     //全部输出0
GPIOE->ODR&=0X00FF;
LCD_RS_SET;
LCD_CS_CLR;
//读取数据(读寄存器时,并不需要读2次)
LCD_RD_CLR;
if(lcddev.id==0X8989)delay_us(2);//FOR 8989,延时2us        
t=DATAIN;  
LCD_RD_SET;
LCD_CS_SET;
GPIOB->CRL=0X33333333; //PB0-7  上拉输出
GPIOE->CRH=0X33333333; //PE8-15 上拉输出
GPIOB->ODR|=0X00FF;    //全部输出高
GPIOE->ODR|=0XFF00;

return t;  
}
......

void LCD_Init(void)
{
  RCC->APB2ENR|=1<<3;//先使能外设PORTB时钟
  RCC->APB2ENR|=1<<4;//先使能外设PORTC时钟
RCC->APB2ENR|=1<<6;//ENABLE PORTC

RCC->APB2ENR|=1<<0;    //开启辅助时钟
JTAG_Set(SWD_ENABLE);  //开启SWD
            
//PORTC6,7,11,12,10,复用推挽输出  
GPIOC->CRH&=0XFFF000FF;
GPIOC->CRH|=0X00033300;
GPIOC->CRL&=0X00FFFFFF;
GPIOC->CRL|=0X33000000;
GPIOC->ODR|=0X1CC0;

//PORTB,E 推挽输出
GPIOB->CRL=0X33333333;
GPIOE->CRH=0X33333333;
GPIOB->ODR|=0X00FF;
GPIOE->ODR|=0XFF00;
......


这两个文件里其他涉及到寄存器操作的地方我都一样的改了,但是LCD不正常工作。
求大神指点!!!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。