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不正常工作。
求大神指点!!!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
正点原子
1楼-- · 2019-08-19 00:30
仿真看看16位口正常不正常(逐个位输出1,逐个位输出0,看IO状态)
fghlw
2楼-- · 2019-08-19 01:34
线太多不好接,串行容易调些
Lite
3楼-- · 2019-08-19 05:34
fghlw 发表于 2017-5-22 08:38
线太多不好接,串行容易调些

线检查了没问题。我改的代码没有搓吧?
还有我没接MI MO PEN TCLK TCS 不影响吧?
MrXiong
4楼-- · 2019-08-19 07:00
Lite 发表于 2017-5-22 19:38
线检查了没问题。我改的代码没有搓吧?
还有我没接MI MO PEN TCLK TCS 不影响吧?

不影响的,那些是触屏的接口!
Lite
5楼-- · 2019-08-19 08:18
 精彩回答 2  元偷偷看……
MrXiong
6楼-- · 2019-08-19 10:23
Lite 发表于 2017-5-23 10:01
那我改的那几行代码是对的吗?

像原子哥说的,现在只能一步一步查问题

一周热门 更多>