OpenEdv-开源电子网

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

关于stm32f103VE 使用FSMC控制LCD 应该如何初始化FSMC??求指点

[复制链接]

50

主题

243

帖子

1

精华

高级会员

Rank: 4

积分
616
金钱
616
注册时间
2014-2-26
在线时间
1 小时
发表于 2014-3-5 15:50:22 | 显示全部楼层 |阅读模式
原子哥的资料里是103ZE的 可我的只有100脚 没有F G 的管脚啊 那么该怎么配置? ?

我是一只摔不死的蚂蚁!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-3-5 16:20:22 | 显示全部楼层
回复【楼主位】_tank_:
---------------------------------
就这样配置

GPIO_InitTypeDef GPIO_InitStructure;
      
FSMC_NORSRAMInitTypeDef FSMC_TFTLCD_InitStructure;

FSMC_NORSRAMTimingInitTypeDef ReadWrite_Time;
FSMC_NORSRAMTimingInitTypeDef Write_Time;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE); //使能FSMC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE); //开启外设时钟
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //开启复用时钟

/* 初始化GPIOD为复用推挽输出 */
/* PD.0为FSMC_D2    D.1为FSMC_D3 */
/* PD.4为FSMC_NOE    D.5为FSMC_NWE */
/* PD.7为FSMC_NE1 */
/* PD.8为FSMC_D13    D.9为FSMC_D14    D.10为FSMC_D15 */
/* PD.11为FSMC_A16 */
/* PD.14为FSMC_D0    D.15为FSMC_D1 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_8 | \
                              GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO翻转速度为50MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //设置为复用推挽输出

GPIO_Init(GPIOD, &GPIO_InitStructure); //初始化GPIO相关结构体

/* 初始化GPIOE为复用推挽输出 */
/* PE.7为FSMC_D4    E.8为FSMC_D5 */
/* PE.9为FSMC_D6    E.10为FSMC_D7 */
/* PE.11为FSMC_D8    E.12为FSMC_D9 */
/* PE.13为FSMC_D10    E.14为FSMC_D11 */
/* PE.5为FSMC_D12 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | \
                              GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO翻转速度为50MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //设置为复用推挽输出

GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化GPIO相关结构体
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-5 16:46:51 | 显示全部楼层
可以接A16及以上的地址,作为RS控制线,程序对应修改地址偏移即可 。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

50

主题

243

帖子

1

精华

高级会员

Rank: 4

积分
616
金钱
616
注册时间
2014-2-26
在线时间
1 小时
 楼主| 发表于 2014-3-5 19:10:23 | 显示全部楼层
回复【2楼】Badu_Space:
---------------------------------
还是不可以 GPIO的设置直接粘贴你的代码  RS采用A16 FSMC选用bank1 第一分区   可返回的id只是0

把代码贴一下吧

void FSMC_LCD_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure; 
       
  FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef readWriteTiming;
  FSMC_NORSRAMTimingInitTypeDef writeTiming; 

  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE); //使能FSMC时钟 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE); //开启外设时钟 
  // RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //开启复用时钟 

/* 初始化GPIOD为复用推挽输出 */ 
/* PD.0为FSMC_D2    D.1为FSMC_D3 */ 
/* PD.4为FSMC_NOE    D.5为FSMC_NWE */ 
/* PD.7为FSMC_NE1 */ 
/* PD.8为FSMC_D13    D.9为FSMC_D14    D.10为FSMC_D15 */ 
/* PD.11为FSMC_A16 */ 
/* PD.14为FSMC_D0    D.15为FSMC_D1 */ 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15; 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO翻转速度为50MHz 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //设置为复用推挽输出 

    GPIO_Init(GPIOD, &GPIO_InitStructure); //初始化GPIO相关结构体 

/* 初始化GPIOE为复用推挽输出 */ 
/* PE.7为FSMC_D4    E.8为FSMC_D5 */ 
/* PE.9为FSMC_D6    E.10为FSMC_D7 */ 
/* PE.11为FSMC_D8    E.12为FSMC_D9 */ 
/* PE.13为FSMC_D10    E.14为FSMC_D11 */ 
/* PE.5为FSMC_D12 */ 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | 
                              GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO翻转速度为50MHz 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //设置为复用推挽输出 

GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化GPIO相关结构体



    readWriteTiming.FSMC_AddressSetupTime = 0x01;  //地址建立时间(ADDSET)为2个HCLK 1/36M=27ns
    readWriteTiming.FSMC_AddressHoldTime = 0x00;  //地址保持时间(ADDHLD)模式A未用到
    readWriteTiming.FSMC_DataSetupTime = 0x0f;  // 数据保存时间为16个HCLK,因为液晶驱动IC的读数据的时候,速度不能太快,尤其对1289这个IC。
    readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;
    readWriteTiming.FSMC_CLKDivision = 0x00;
    readWriteTiming.FSMC_DataLatency = 0x00;
    readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;  //模式A 
    

writeTiming.FSMC_AddressSetupTime = 0x00;  //地址建立时间(ADDSET)为1个HCLK  
    writeTiming.FSMC_AddressHoldTime = 0x00;  //地址保持时间(A
    writeTiming.FSMC_DataSetupTime = 0x03;  ////数据保存时间为4个HCLK
    writeTiming.FSMC_BusTurnAroundDuration = 0x00;
    writeTiming.FSMC_CLKDivision = 0x00;
    writeTiming.FSMC_DataLatency = 0x00;
    writeTiming.FSMC_AccessMode = FSMC_AccessMode_A;  //模式A 

 
    FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;//  这里我们使用NE4 ,也就对应BTCR[6],[7]。
    FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; // 不复用数据地址
    FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;// FSMC_MemoryType_SRAM;  //SRAM   
    FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;//存储器数据宽度为16bit   
    FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;// FSMC_BurstAccessMode_Disable; 
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable; 
    FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;   
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;  
    FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; //  存储器写使能
    FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;   
    FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable; // 读写使用不同的时序
    FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; 
    FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming; //读写时序
    FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &writeTiming;  //写时序

    FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  //初始化FSMC配置

    FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);  // 使能BANK1  
}

结构体为:
typedef struct
{
u16 LCD_REG;
u16 LCD_RAM;
} LCD_TypeDef;
#define LCD_BASE        ((u32)(0x60000000 | 0x0001FFFE))
#define LCD             ((LCD_TypeDef *) LCD_BASE)

帮我看看吧
我是一只摔不死的蚂蚁!
回复 支持 反对

使用道具 举报

50

主题

243

帖子

1

精华

高级会员

Rank: 4

积分
616
金钱
616
注册时间
2014-2-26
在线时间
1 小时
 楼主| 发表于 2014-3-5 19:37:21 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
把我的代码贴上去了 原子哥也帮我看看吧
我是一只摔不死的蚂蚁!
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-3-5 21:39:48 | 显示全部楼层
回复【5楼】_tank_:
---------------------------------
先看看FSMC的介绍吧,没有FG可以用FSMC其他相同功能的引脚代替,代码中做相应修改即可
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-5 22:47:09 | 显示全部楼层
我的:
u16 i;
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时钟  
GPIOB->CRL&=0XFFFFFF0F; //PB1 推挽输出 背光
GPIOB->CRL|=0X00000030;    
//PORTD复用推挽输出 
GPIOD->CRH&=0X00FFF000;
GPIOD->CRH|=0XBB000BBB; 
GPIOD->CRL&=0X0F00FF00;
GPIOD->CRL|=0XB0BB00BB;     
//PORTE复用推挽输出 
GPIOE->CRH&=0X00000000;
GPIOE->CRH|=0XBBBBBBBB; 
GPIOE->CRL&=0X000FFFFF;
GPIOE->CRL|=0XBBB00000;      

//寄存器清零
//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]|=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   
 
  delay_ms(50); // delay 50 ms 
  LCD_WriteReg(0x0000,0x0001);
delay_ms(50); // delay 50 ms 
   lcddev.id = LCD_ReadReg(0x0000); 


//LCD地址结构体
typedef struct
{
u16 LCD_REG; 
u16 LCD_RAM;
} LCD_TypeDef;
//使用NOR/SRAM的 Bank1.sector1,地址位HADDR[27,26]=00 A21作为数据命令区分线 
//注意设置时STM32内部会右移一位对其!      
#define LCD_BASE        ((u32)(0x60000000 | 0x003FFFFE))
#define LCD             ((LCD_TypeDef *) LCD_BASE)


使用的是A21,你对照着改成A16,就OK了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

50

主题

243

帖子

1

精华

高级会员

Rank: 4

积分
616
金钱
616
注册时间
2014-2-26
在线时间
1 小时
 楼主| 发表于 2014-3-5 23:46:23 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
原子哥!!!终于出来了!!!   虽然给的寄存器版本的 第一次看寄存器版本改的时候有点费力 而且原子哥上面那段代码没有开启复用功能的时钟(只是为了强调一下我自己的努力) 今天卡了一天了 一直没有进展都快急死我了 晚上一直在刷页面 希望大神来救我 通过原子哥给的代码看到串口打印出ID号的时候真是激动死了 哈哈 必须郑重的感谢一下原子哥!!!支持正点原子!! 支持原子哥!!
我是一只摔不死的蚂蚁!
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-3-6 12:25:26 | 显示全部楼层
回复【5楼】_tank_:
---------------------------------
我的这样已经在用咯,接的是A16,就是上面的初始化代码,屏幕ID是0x9341、0x9325都可以
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

50

主题

243

帖子

1

精华

高级会员

Rank: 4

积分
616
金钱
616
注册时间
2014-2-26
在线时间
1 小时
 楼主| 发表于 2014-3-6 13:03:50 | 显示全部楼层
回复【9楼】Badu_Space:
---------------------------------
恩 我的也可以了 也是用的你给的管脚配置函数 不过不知道为什么当时不可以 当时有点晕 也不知道哪里问题
总之还要谢谢你 谢谢你给的代码
我是一只摔不死的蚂蚁!
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-3-6 13:08:32 | 显示全部楼层
回复【10楼】_tank_:
---------------------------------
我也遇到过这样的问题,那时候调试SDIO寄存器版本驱动的时候也是这样,第一次下载下去运行不了,复位或者第二次下载之后就可以了,不知道什么问题,呵呵

总之能用就好了,恭喜
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

8

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2014-10-7
在线时间
24 小时
发表于 2014-11-10 14:52:05 | 显示全部楼层
回复【4楼】_tank_:
---------------------------------
请问你这些是怎么确定数值的呢?
 readWriteTiming.FSMC_AddressSetupTime = 0x01;  //地址建立时间(ADDSET)为2个HCLK 1/36M=27ns 
 readWriteTiming.FSMC_AddressHoldTime = 0x00;  //地址保持时间(ADDHLD)模式A未用到
readWriteTiming.FSMC_DataSetupTime = 0x0f;   // 数据保存时间为16个HCLK,因为液晶驱动IC的读数据的时候,速度不能太快,尤其对1289这个IC。 
readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;
回复 支持 反对

使用道具 举报

12

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2014-10-23
在线时间
0 小时
发表于 2014-11-12 10:11:11 | 显示全部楼层
回复【12楼】安羽骐阳:
---------------------------------
看看读写时序上面很清楚
回复 支持 反对

使用道具 举报

4

主题

8

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2014-5-12
在线时间
0 小时
发表于 2014-11-20 18:00:16 | 显示全部楼层
readWriteTiming.FSMC_AddressSetupTime = 0x01;  //地址建立时间(ADDSET)为2个HCLK 1/36M=27ns  
 readWriteTiming.FSMC_AddressHoldTime = 0x00;  //地址保持时间(ADDHLD)模式A未用到
readWriteTiming.FSMC_DataSetupTime = 0x0f;   // 数据保存时间为16个HCLK,因为液晶驱动IC的读数据的时候,速度不能太快,尤其对1289这个IC。  
readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;

请问你这些是怎么确定数值的呢?同问这个问题,找了好久了!
回复 支持 反对

使用道具 举报

51

主题

340

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3275
金钱
3275
注册时间
2013-9-21
在线时间
281 小时
发表于 2014-12-17 21:24:12 | 显示全部楼层
回复【2楼】八度空间:
---------------------------------
请问这些脚未设置套用上去原子的程序后还需要修改原子TFT程序的什么内容吗?
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-12-18 07:59:40 | 显示全部楼层
回复【15楼】hack906447:
---------------------------------
用到什么管脚配置什么管脚
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

51

主题

340

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3275
金钱
3275
注册时间
2013-9-21
在线时间
281 小时
发表于 2014-12-18 11:43:08 | 显示全部楼层
我直接套用你的io设置去改原子的tft例程后还有那些需更改
回复 支持 反对

使用道具 举报

51

主题

340

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3275
金钱
3275
注册时间
2013-9-21
在线时间
281 小时
发表于 2014-12-18 11:47:25 | 显示全部楼层
回复【16楼】八度空间:
---------------------------------
我也是用vet6
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-12-18 13:34:47 | 显示全部楼层
回复【18楼】hack906447:
---------------------------------
这个帖子http://www.openedv.com/posts/list/27484.htm附件“ STM32_USB.zip”里面有我的VET6的FSMC初始化代码
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

51

主题

340

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3275
金钱
3275
注册时间
2013-9-21
在线时间
281 小时
发表于 2014-12-18 17:08:11 | 显示全部楼层
回复【19楼】八度空间:
---------------------------------
在请问一下有办法用vet6由fsmc驱动8bit
(D0~D7)的ili9326屏吗?
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-12-18 17:26:33 | 显示全部楼层
回复【20楼】hack906447:
---------------------------------
可以的,初始化成8位数据总线
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

51

主题

340

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3275
金钱
3275
注册时间
2013-9-21
在线时间
281 小时
发表于 2014-12-18 20:08:43 | 显示全部楼层
回复【19楼】八度空间:
---------------------------------
大神STM32_USB.zip”里面没有FSMC的初始化~是不是放在别的档里了
回复 支持 反对

使用道具 举报

51

主题

340

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3275
金钱
3275
注册时间
2013-9-21
在线时间
281 小时
发表于 2014-12-18 20:11:16 | 显示全部楼层
回复【21楼】八度空间:
---------------------------------
是不是只改这里就好FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-12-19 08:02:16 | 显示全部楼层
回复【23楼】hack906447:
---------------------------------
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

51

主题

340

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3275
金钱
3275
注册时间
2013-9-21
在线时间
281 小时
发表于 2014-12-19 13:43:34 | 显示全部楼层
回复【24楼】八度空间:
---------------------------------
改了没办法显示! 屏上的rst该接去哪?开发板上的rst没引出该如何解决? 请大神帮忙
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-12-19 15:56:35 | 显示全部楼层
回复【25楼】hack906447:
---------------------------------
原子mini和战舰液晶的复位都是接到MCU的复位上的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

51

主题

340

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3275
金钱
3275
注册时间
2013-9-21
在线时间
281 小时
发表于 2014-12-20 10:56:30 | 显示全部楼层
回复【26楼】八度空间:
------------FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;这里我们使用NE4 ,也就对应BTCR[6],[7]。--------------------
如果改NE1上面的结构要更改吗?
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-12-20 11:55:51 | 显示全部楼层
那个是片选信号,你说要不要改
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

51

主题

340

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3275
金钱
3275
注册时间
2013-9-21
在线时间
281 小时
发表于 2014-12-20 22:01:24 | 显示全部楼层
回复【28楼】八度空间:
----------------
如果我要改成NE1 那是不是要改成这样FSMC_Bank1_NORSRAM1
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-12-21 10:47:14 | 显示全部楼层
回复【29楼】hack906447:
---------------------------------
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

51

主题

340

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3275
金钱
3275
注册时间
2013-9-21
在线时间
281 小时
发表于 2014-12-21 14:41:57 | 显示全部楼层
回复【30楼】八度空间:
---------------------------------
不知道为什么改了还是没有显示
麻煩大神有空幫我看看十分感謝

GPIO_InitTypeDef GPIO_InitStructure;
FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
FSMC_NORSRAMTimingInitTypeDef  readWriteTiming; 
FSMC_NORSRAMTimingInitTypeDef  writeTiming;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE); //使能FSMC時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOG|RCC_APB2Periph_AFIO,ENABLE);//使能PORTB,D,E,G以及AFIO復用功能時鐘

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;  //PB0 推輓輸出 背光
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //推輓輸出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOB, &GPIO_InitStructure);
  //PORTD復用推輓輸出  

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_14|GPIO_Pin_15;  // //PORTD復用推輓輸出  
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   //復用推輓輸出   
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure); 
//PD0-FSMC D2 //PD1-FSMC D3 //PD4-FSMC NOE //PD5-FSMC NWE //PD8-FSMC D13 //PD9-FSMC D14
//PD10-FSMC D15 //PD14-FSMC D0 //PD15-FSMC D1 //PD11-FSMC A16 //PD7-FSMC NE1
//PORTE復用推輓輸出  
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;  // //PORTD復用推輓輸出  
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   //復用推輓輸出   
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOE, &GPIO_InitStructure); 
//PE7~PE15-FSMC D4~D12
  
readWriteTiming.FSMC_AddressSetupTime = 0x01;  //地址建立時間(ADDSET)為2個HCLK 1/36M=27ns
readWriteTiming.FSMC_AddressHoldTime = 0x00;  //地址保持時間(ADDHLD)模式A未用到
readWriteTiming.FSMC_DataSetupTime = 0x0f;  // 數據保存時間為16個HCLK,因為液晶驅動IC的讀數據的時候,速度不能太快,尤其對1289這個IC。
readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;
readWriteTiming.FSMC_CLKDivision = 0x00;
readWriteTiming.FSMC_DataLatency = 0x00;
readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;  //模式A 
    

writeTiming.FSMC_AddressSetupTime = 0x00;  //地址建立時間(ADDSET)為1個HCLK  
writeTiming.FSMC_AddressHoldTime = 0x00;  //地址保持時間(A
writeTiming.FSMC_DataSetupTime = 0x03;  ////數據保存時間為4個HCLK
writeTiming.FSMC_BusTurnAroundDuration = 0x00;
writeTiming.FSMC_CLKDivision = 0x00;
writeTiming.FSMC_DataLatency = 0x00;
writeTiming.FSMC_AccessMode = FSMC_AccessMode_A;  //模式A 

 
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; // 不復用數據地址
FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;// FSMC_MemoryType_SRAM;  //SRAM   
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;
FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;// FSMC_BurstAccessMode_Disable; 
FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable; 
FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;   
FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;  
FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; //  存儲器寫使能
FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;   
FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable; // 讀寫使用不同的時序
FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; 
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming; //讀寫時序
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &writeTiming;  //寫時序 FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  //初始化FSMC配置
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);// 使能BANK1
回复 支持 反对

使用道具 举报

51

主题

340

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3275
金钱
3275
注册时间
2013-9-21
在线时间
281 小时
发表于 2014-12-21 14:55:44 | 显示全部楼层
回复【30楼】八度空间:
---------------------------------
硬件部份使用ili9325 d0-d7
核心用vet6 片選
使用NE1
回复 支持 反对

使用道具 举报

51

主题

340

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3275
金钱
3275
注册时间
2013-9-21
在线时间
281 小时
发表于 2014-12-21 14:56:21 | 显示全部楼层
回复【30楼】八度空间:
---------------------------------
硬件部份使用ili9325 d0-d7
核心用vet6 片选
使用NE1
回复 支持 反对

使用道具 举报

51

主题

340

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3275
金钱
3275
注册时间
2013-9-21
在线时间
281 小时
发表于 2014-12-29 13:27:13 | 显示全部楼层
回复【10楼】_tank_:
---------------------------------
請問你用vet6驅動原子屏io設置是用原子哥後來給你的寄存器版來套用?還是用八度空間的io配置?
回复 支持 反对

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
189
金钱
189
注册时间
2015-5-21
在线时间
43 小时
发表于 2016-9-29 17:14:51 | 显示全部楼层
楼主最终用原子的历程怎么解决的啊,我还是没搞定啊
回复 支持 反对

使用道具 举报

3

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2016-8-25
在线时间
53 小时
发表于 2016-9-29 17:23:30 | 显示全部楼层
改底层接口就好了吧,看来还是选同样的芯片就好了,哪怕贵点,程序可以直接移植啊。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2017-7-25
在线时间
4 小时
发表于 2017-8-18 10:49:17 | 显示全部楼层
本帖最后由 veis 于 2017-8-18 10:52 编辑
正点原子 发表于 2014-3-5 22:47
我的:
        u16 i;
        RCC->AHBENR|=1<<8;                      //使能FSMC时钟        &n ...

我的不知道为什么不行,
typedef struct
{
        vu16 LCD_REG;
        vu16 LCD_RAM;
} LCD_TypeDef;
//HADDR[27,26]=00 A16
// 1 1111 1111 1110=0x1FFFE                           
#define LCD_BASE        ((u32)(0x60000000 | 0x0001FFFE))

        RCC->AHB1ENR|=0XF<<3;   
        RCC->AHB1ENR|=1<<1;     
        RCC->AHB1ENR|=1<<0;                 
        RCC->AHB3ENR|=1<<0;     
        GPIO_Set(GPIOB,PIN15,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU);                                                
        GPIO_Set(GPIOD,(3<<0)|(3<<4)|(7<<8)|(3<<14),GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);        //PD0,1,4,5,8,9,10,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_Set(GPIOD,PIN11,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);                                                        //PD11,FSMC_A16
        GPIO_Set(GPIOD,PIN7,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);                                                        //PD7,FSMC_NE1         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,8,12);        //PD8,AF12
         GPIO_AF_Set(GPIOD,9,12);        //PD9,AF12
         GPIO_AF_Set(GPIOD,10,12);        //PD10,AF12
         GPIO_AF_Set(GPIOD,14,12);        //PD14,AF12
         GPIO_AF_Set(GPIOD,15,12);        //PD15,AF12
        
        GPIO_AF_Set(GPIOD,7,12);        //PD7,AF12
         GPIO_AF_Set(GPIOD,11,12);        //PD11,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
        
         
                           
        FSMC_Bank1->BTCR[0]=0X00000000;
        FSMC_Bank1->BTCR[1]=0X00000000;
        FSMC_Bank1E->BWTR[0]=0X00000000;

        FSMC_Bank1->BTCR[0]|=1<<12;               
        FSMC_Bank1->BTCR[0]|=1<<14;               
        FSMC_Bank1->BTCR[0]|=1<<4;                             
                                            
        FSMC_Bank1->BTCR[1]|=0<<28;                                                                                    
        FSMC_Bank1->BTCR[1]|=0XF<<0; //HCLK 1/168M=6ns*15=90ns        
        
        FSMC_Bank1->BTCR[1]|=60<<8;          //HCLK=6*60=360ns

        FSMC_Bank1E->BWTR[0]|=0<<28;                                                            
        FSMC_Bank1E->BWTR[0]|=9<<0;                //HCLK=54ns
         
        FSMC_Bank1E->BWTR[0]|=8<<8;         //HCLK=54ns

        FSMC_Bank1->BTCR[0]|=1<<0;                //使能BANK1,区域1

回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 07:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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