这个代码是原子09年在ouravr坛上发的,我想改到能在我们的板上跑,但改了几天还是不能工作,只能点亮了屏灯,请原子帮个忙。
由于硬板不相同,所以我以按我们的板重新定义了IO口。
原代码定义如下:
//-----------------TFT端口定义----------------
#define TFT_RS (1<<4) //数据/命令选择端口 C4
#define TFT_CS (1<<5) //片选端口 PC5
#define TFT_LED (1<<8) //TFT背光  B8
#define TFT_RST (1<<7) //硬复位  B7
#define TFT_RD (1<<6) //时钟端口  B6
#define TFT_WR (1<<5) //数据端口  B5
#define TFT_RS_SET(x) GPIOC->ODR=(GPIOC->ODR&~TFT_RS)|(x ? TFT_RS:0)
#define TFT_CS_SET(x) GPIOC->ODR=(GPIOC->ODR&~TFT_CS)|(x ? TFT_CS:0)
#define TFT_LED_SET(x) GPIOB->ODR=(GPIOB->ODR&~TFT_LED) |(x ? TFT_LED:0)
#define TFT_RST_SET(x) GPIOB->ODR=(GPIOB->ODR&~TFT_RST)|(x ? TFT_RST:0)
#define TFT_RD_SET(x) GPIOB->ODR=(GPIOB->ODR&~TFT_RD) |(x ? TFT_RD:0)
#define TFT_WR_SET(x) GPIOB->ODR=(GPIOB->ODR&~TFT_WR)|(x ? TFT_WR:0)
#define DATAOUT(x) GPIOA->ODR=(GPIOA->ODR&0xffffff00)|(x&0xff);
*/
我根据我们的板重新定义如下:
//-----------------TFT端口定义----------------
#define TFT_RS (1<<8) //数据/命令选择端口 C8
#define TFT_CS (1<<9) //片选端口 PC9
#define TFT_LED (1<<10) //TFT背光  C10
//#define TFT_RST (1<<7) //硬复位  C7//////这句已屏蔽
#define TFT_RD (1<<6) //时钟端口  C6
#define TFT_WR (1<<7) //数据端口  C7
#define TFT_RS_SET(x) GPIOC->ODR=(GPIOC->ODR&~TFT_RS)|(x ? TFT_RS:0)
#define TFT_CS_SET(x) GPIOC->ODR=(GPIOC->ODR&~TFT_CS)|(x ? TFT_CS:0)
#define TFT_LED_SET(x) GPIOC->ODR=(GPIOC->ODR&~TFT_LED) |(x ? TFT_LED:0)
//#define TFT_RST_SET(x) GPIOB->ODR=(GPIOB->ODR&~TFT_RST)|(x ? TFT_RST:0) //////这句已屏蔽
#define TFT_RD_SET(x) GPIOC->ODR=(GPIOC->ODR&~TFT_RD) |(x ? TFT_RD:0)
#define TFT_WR_SET(x) GPIOC->ODR=(GPIOC->ODR&~TFT_WR)|(x ? TFT_WR:0)
#define DATAOUT(x) GPIOB->ODR=(GPIOB->ODR&0xffffff00)|(x&0xff);
/*
然后再修改了void TFT_Init(),原代码如下:
void TFT_Init()
{
/*
//液晶接口初始化
RCC->APB2ENR|=0X0000001C;//先使能外设IO PORTA,B,C时钟
GPIOA->CRL=0X33333333; //PA0-7 推挽输出
GPIOA->ODR|=0X00FF; //全部输出高
GPIOB->CRL&=0X000FFFFF;//PB5-7 推挽输出
GPIOB->CRL|=0X33300000;
GPIOB->CRH&=0XFFFFFFF0;//PB8 推挽输出
GPIOB->CRH|=0X00000003;
GPIOB->ODR|=0X01E0; //5-8 输出高
GPIOC->CRL&=0XFF00FFFF;//PC4,5 推挽输出
GPIOC->CRL|=0X00330000;
GPIOC->ODR|=0X0030; //4,5 输出高
TFT_RST_SET(0);//硬件复位
delay_ms(200);
TFT_RST_SET(1);
delay_ms(200);
。。。。。以下略
*/
我改为:
void TFT_Init()
{
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;
delay_ms(50); // delay 50 ms
。。。。。以下略
编译后提示两个错误,生成了HEX文件,
下载到板上运行,只能点亮灯和显示白屏,请原子帮忙修改下。附件是在原贴下的。
原贴:
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3253051&bbs_page_no=1&search_mode=4&search_text=lcmdw&bbs_id=9999
|