OpenEdv-开源电子网

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

关于stm32在FSMC机制下的一段宏定义

[复制链接]

2

主题

12

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2013-7-26
在线时间
0 小时
发表于 2013-7-26 16:43:04 | 显示全部楼层 |阅读模式
#define LCD_LED PBout(1) //LCD背光     PB1    
//LCD地址结构体
typedef struct
{
u16 LCD_REG;
u16 LCD_RAM;
} LCD_TypeDef;
//使用NOR/SRAM的 Bank1.sector4,地址位HADDR[27,26]=11 A10作为数据命令区分线 
//注意设置时STM32内部会右移一位对其! 111110=0X3E    
#define LCD_BASE        ((u32)(0x6C000000 | 0x000007FE))
#define LCD             ((LCD_TypeDef *) LCD_BASE)


小弟新学stm32  现在看到这一段程序  对其中 LCD_BASE的宏定义不是很清楚它的含义
0x6C000000 | 0x000007FE   尤其是这两段16进制数  所以想请教一下各位高手  这两段的含义
谢谢~




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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-26 17:48:37 | 显示全部楼层
就是定义一个地址.
然后将这个地址强制转换为一个结构体的首地址.
这样这个结构体就使用这个地址了,然后第一个变量地址就是BASE这个地址.后续,则根据结构体内变量的长度等情况,来依次递增分配给各个成员.
所以LCD_REG是0X6C0007FE
LCD_RAM是0X6C000800
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2013-7-26
在线时间
0 小时
 楼主| 发表于 2013-7-29 17:49:46 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
问:
这个地址是怎么确定的呢?
战舰版的是PG0--A10--LCD_RS
我的VET6接法是  D11--LCD_RS--FSMC_A16
先谢过了~
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-29 22:33:46 | 显示全部楼层
vet6,LCD接A16的地址:
0X680001FFFE
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2013-7-26
在线时间
0 小时
 楼主| 发表于 2013-7-30 11:05:34 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
先谢过原子哥了 
不过我最想知道的是怎么来根据自己的接线确定这个地址?  也就是这个地址是如何根据自己的接线来确定的?
小弟新手  望原子哥耐心解答
谢谢~
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2013-7-26
在线时间
0 小时
 楼主| 发表于 2013-7-30 11:07:03 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
还有原子哥   这段数 怎么是10位数呢?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-30 11:35:46 | 显示全部楼层
回复【6楼】blanklove:
---------------------------------
你认为是多少位?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2013-7-26
在线时间
0 小时
 楼主| 发表于 2013-7-30 11:43:11 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
不应该是8位的吗?
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2013-7-26
在线时间
0 小时
 楼主| 发表于 2013-7-31 10:41:06 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
我的VET6 是这么接的

CS--PD7--FSMC_NE1
RS--PD11--FSMC_A16
WR--PD5--FSMC_NWE
RD--PD4--FSMC_NOE

那么是不是应该这么写

#define LCD_BASE        ((u32)(0x60000000 | 0x0001FFFE))
#define LCD             ((LCD_TypeDef *) LCD_BASE)

谢谢~
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-31 11:21:11 | 显示全部楼层
是的
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2013-7-26
在线时间
0 小时
 楼主| 发表于 2013-7-31 11:51:46 | 显示全部楼层
那为什么我的屏幕仍然只是背光亮呢?  
。。。无奈死了

附上我的代码  是根据原子哥的TFTLCD代码改编的

STM32F103VET6 ILI9320.zip

2.79 MB, 下载次数: 53

回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-31 12:21:42 | 显示全部楼层
回复【11楼】blanklove:
---------------------------------
先看看读ID吧.
这是我在VET6上的一段测试代码,不过我用的是A21,不是A16,你稍微改下,改成A16就可以了.
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);
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2013-7-26
在线时间
0 小时
 楼主| 发表于 2013-8-1 12:30:53 | 显示全部楼层
回复【12楼】正点原子:
---------------------------------
查了半天 才发现是自己的DB0和DB2接反了  等下个板子回来  再调试下  看看效果如何
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-15 21:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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