OpenEdv-开源电子网

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

FSMC时序调整

[复制链接]

4

主题

11

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2013-12-16
在线时间
5 小时
发表于 2013-12-16 18:14:32 | 显示全部楼层 |阅读模式
我在使用STM32F407的FSMC用于控制LCD(主控芯片是ST7529),8080时序,可以正常显示,但仔细比较(用示波器测量过)FSMC和ST7529的时序后发现时序不匹配(片选和数据命令线,差20nS左右)。虽然实际没发现显示有异常,但毕竟是个隐患,请问FSMC能调整这些时序吗?怎么调整?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2013-12-16 21:49:02 | 显示全部楼层
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-16 23:19:12 | 显示全部楼层
和F1一模一样.
就那几个配置可以修改.给你一段寄存器代码:
RCC->AHB1ENR|=3<<3;      //使能PD,PE时钟  
RCC->AHB1ENR|=1<<1;      //使能PB时钟  
RCC->AHB3ENR|=1<<0;      //使能FSMC时钟  
GPIO_Set(GPIOB,(1<<5),GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU); //PB5 推挽输出
GPIO_Set(GPIOD,(3<<0)|(3<<4)|(0X1F<<7)|(3<<14),GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//PD0,1,4,5,7,8,9,10,11,14,15 AF OUT
GPIO_Set(GPIOE,(0X1FF<<7),GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PE7~15,AF OUT
  GPIO_AF_Set(GPIOD,0,12); //PD0,AF12
  GPIO_AF_Set(GPIOD,1,12); //PD1,AF12
  GPIO_AF_Set(GPIOD,4,12); //PD4,AF12
  GPIO_AF_Set(GPIOD,5,12); //PD5,AF12
  GPIO_AF_Set(GPIOD,7,12); //PD7,AF12
  GPIO_AF_Set(GPIOD,8,12); //PD8,AF12
  GPIO_AF_Set(GPIOD,9,12); //PD9,AF12
  GPIO_AF_Set(GPIOD,10,12); //PD10,AF12
  GPIO_AF_Set(GPIOD,11,12); //PD11,AF12
  GPIO_AF_Set(GPIOD,14,12); //PD14,AF12
  GPIO_AF_Set(GPIOD,15,12); //PD15,AF12

  GPIO_AF_Set(GPIOE,7,12); //PE7,AF12
  GPIO_AF_Set(GPIOE,8,12); //PE8,AF12
  GPIO_AF_Set(GPIOE,9,12); //PE9,AF12
  GPIO_AF_Set(GPIOE,10,12); //PE10,AF12
  GPIO_AF_Set(GPIOE,11,12); //PE11,AF12
  GPIO_AF_Set(GPIOE,12,12); //PE12,AF12
  GPIO_AF_Set(GPIOE,13,12); //PE13,AF12
  GPIO_AF_Set(GPIOE,14,12); //PE14,AF12
  GPIO_AF_Set(GPIOE,15,12); //PE15,AF12


//寄存器清零
//bank1有NE1~4,每一个有一个BCR+TCR,所以总共八个寄存器。
//这里我们使用NE1 ,也就对应BTCR[0],[1]。     
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]|=1<<4;  //存储器数据宽度为16bit      
//操作BTR寄存器
//读时序控制寄存器      
FSMC_Bank1->BTCR[1]|=0<<28; //模式A        
FSMC_Bank1->BTCR[1]|=5<<0;  //地址建立时间(ADDSET)为5个HCLK 1/168M=6ns*5=30ns    
//因为液晶驱动IC的读数据的时候,速度不能太快,尤其对1289这个IC。
FSMC_Bank1->BTCR[1]|=0XF<<8;   //数据保存时间为16个HCLK    
//写时序控制寄存器  
FSMC_Bank1E->BWTR[0]|=0<<28;  //模式A        
FSMC_Bank1E->BWTR[0]|=5<<0; //地址建立时间(ADDSET)为5个HCLK =30ns
  //4个HCLK(HCLK=72M)因为液晶驱动IC的写信号脉宽,最少也得50ns。72M/4=24M=55ns    
FSMC_Bank1E->BWTR[0]|=8<<8;  //数据保存时间为9个HCLK=54ns
//使能BANK1,区域4
FSMC_Bank1->BTCR[0]|=1<<0; //使能BANK1,区域1

  delay_ms(50); // delay 50 ms 
  LCD_WriteReg(0x0000,0x0001);
delay_ms(50); // delay 50 ms 
   lcddev.id = LCD_ReadReg(0x0000);   
   if(lcddev.id<0XFF||lcddev.id==0XFFFF||lcddev.id==0X9300)//读到ID不正确,新增lcddev.id==0X9300判断,因为9341在未被复位的情况下会被读成9300
{
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

52

主题

142

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
441
金钱
441
注册时间
2013-10-17
在线时间
23 小时
发表于 2015-11-3 23:02:10 | 显示全部楼层
楼主分享一下代码可以吗
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-18 04:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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