OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4444|回复: 3

有关FSMC LCD的问题

[复制链接]

61

主题

160

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
270
金钱
270
注册时间
2012-1-12
在线时间
93 小时
发表于 2013-4-28 10:53:55 | 显示全部楼层 |阅读模式

 我用STM32VET6连接液晶屏,三根地址线分别连接A16 A17 A18.  液晶屏的CS连接NE1  WR连接NEW  RD连接NOE  数据线D0-D8分别连接STM32VET6的D0-D8(注意我的液晶屏是8位数据),下面是的修改原子哥的初始化函数

#define port6 ((u32)0x60000000) //x地址低
#define port1 ((u32)0x60010000) //x地址高
#define port2 ((u32)0x60020000) //y地址低
#define port3 ((u32)0x60030000) //y地址高
#define port4 ((u32)0x60040000) //前景色
#define port5 ((u32)0x60050000) //背景色
#define port0 ((u32)0x60060000) //数据
#define port7 ((u32)0x60070000) //状态寄存器


void LCD_Init(void)

 RCC->AHBENR|=1<<8;       //使能FSMC时钟  
  RCC->APB2ENR|=1<<3;      //使能PORTB时钟
 RCC->APB2ENR|=1<<5;      //使能PORTD时钟
 RCC->APB2ENR|=1<<6;      //使能PORTE时钟
  RCC->APB2ENR|=1<<8;      //使能PORTG时钟
 RCC->APB2ENR|=1<<0;      //使能AFIO时钟 
// GPIOB->CRL&=0XFFFFFFF0;//PB0 推挽输出 背光
// GPIOB->CRL|=0X00000003;   
 //PORTD复用推挽输出  
 GPIOD->CRH&=0X00FFF000;
 GPIOD->CRH|=0XBB000BBB;
 GPIOD->CRL&=0XFF00FF00;
 GPIOD->CRL|=0X00BB00BB;    
 //PORTE复用推挽输出  
 GPIOE->CRH&=0X00000000;
 GPIOE->CRH|=0XBBBBBBBB;
 GPIOE->CRL&=0X0FFFFFFF;
 GPIOE->CRL|=0XB0000000;
FSMC_Bank1->BTCR[0]=0X00000000;
 FSMC_Bank1->BTCR[1]=0X00000000;
 FSMC_Bank1E->BWTR[0]=0X00000000;
 //操作BCR寄存器 使用异步模式
 FSMC_Bank1->BTCR[0]|=1<<12;  //存储器写使能
 FSMC_Bank1->BTCR[0]|=1<<14;  //读写使用不同的时序
 FSMC_Bank1->BTCR[0]|=0<<4;   //存储器数据宽度为8bit     
 //操作BTR寄存器 
 //读时序控制寄存器           
 FSMC_Bank1->BTCR[1]|=0<<28;  //模式A             
 FSMC_Bank1->BTCR[1]|=1<<0;   //地址建立时间(ADDSET)为2个HCLK 1/36M=27ns   
 //因为液晶驱动IC的读数据的时候,速度不能太快,尤其对1289这个IC。
 FSMC_Bank1->BTCR[1]|=0XF<<8;   //数据保存时间为16个HCLK   
 //写时序控制寄存器 
 FSMC_Bank1E->BWTR[0]|=0<<28;  //模式A             
 FSMC_Bank1E->BWTR[0]|=0<<0;  //地址建立时间(ADDSET)为1个HCLK
  //4个HCLK(HCLK=72M)因为液晶驱动IC的写信号脉宽,最少也得50ns。72M/4=24M=55ns   
 FSMC_Bank1E->BWTR[0]|=3<<8;  //数据保存时间为4个HCLK 
 //使能BANK1,区域4
 FSMC_Bank1->BTCR[0]|=1<<0;  //使能BANK1,区域1
}

void set_zuobiao()              
 {
 u8 x1,x2;

        x1=(col>>8) & 0x03;   //x高字节
  x2= col & 0x00ff;         //x低字节
// LCD->port7=0x04;
// LCD->port6=x2;
// LCD->port1=x1;

*(volatile u8 *) (port7) = 0x04;
*(volatile u8 *) (port6) = x2;
*(volatile u8 *) (port1) = x1;

        x1=(row>>8) & 0x03;   //y高字节
  x2= row & 0x00ff;         //y低字节
// LCD->port2=x2;
// LCD->port3=x1;
*(volatile u8 *) (port2) = x2;
*(volatile u8 *) (port3) = x1;
 
 }

void pint()                           //在屏幕的(0,0)坐标画一个白色的点
{
  col=0;row=0;
  set_zuobiao();
  *(volatile u8 *) (port0) = 0xff;
}

小弟研究了好多天了,我都快崩溃了,接上液晶屏之后没有反应,还请原子哥看看程序是哪个地方出了错误,谢谢了


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

1606

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
发表于 2013-4-28 11:36:13 | 显示全部楼层
你不修改原子哥的代码,直接好用吗?
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复 支持 反对

使用道具 举报

61

主题

160

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
270
金钱
270
注册时间
2012-1-12
在线时间
93 小时
 楼主| 发表于 2013-4-28 11:47:31 | 显示全部楼层
回复【2楼】sun1238898:
---------------------------------
我已经修改过了原子哥的初始化函数  就是不行
回复 支持 反对

使用道具 举报

109

主题

1606

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
发表于 2013-4-28 11:57:29 | 显示全部楼层
那你对FSMC的机制原理,了解吗
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-20 22:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表