STM32系列FSMC控制器分析和代码.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1、FSMC初初了解: FSMC 包括4个模块: (1)AHB接口(包括FSMC配置寄存器) (2)NOR闪存和PSRAM控制器(驱动LCD的时候LCD就好像一个PSRAM的里面只有2个16位的存储空间,一个是DATA RAM 一个是CMD RAM) (3)NAND闪存和PC卡控制器 (4)外部设备接口 我们驱动TFT很明显用的是第二个模块:NOR闪存。 ? 2、FSMC的外设地址选择 FSMC _Bank?用来选择外接存储器的地址,FSMC所控制的外存储器所映射的地址是0x6000 0000 ~ 0x9fff ffff 其中属于NOR FLASH?的是0x6000 0000 ~ 0x6fff ffff ,然后这部分的地址空间又被分为四份,每份64MB,?编号是BANK1 ~ BANK 4 ,每个BANK?都有一个片选引脚。 而这四个分存储块的片选,则使用NE[4:1]来选择。数据线/地址线/控制线是共享的。 NE1?-Bank1?? NE2-Bank2? NE3-Bank3? NE4-Bank4 ?第一块:6000 0000h--63ff ffffh? ?第二块:6400 0000h--67ff ffffh ?第三块:6800 0000h--6bff ffffh ?第四块:6c00 0000h--6fff ffffh ? 3、FSMC?驱动LCD ?FSMC提供了所有的LCD控制器的信号: FSMC_D[16:0]:16bit的数据总线 FSMC NEx:分配给NOR的256M,再分为4个区,每个区用来分配一个外设,这四个外设的片选分为是NE1-NE4,对应的引脚为:PD7—NE1,PG9—NE2,PG10-NE3,PG12—NE4 FSMC NOE:输出使能,连接LCD的RD脚。 FSMC NWE:写使能,连接LCD的RW脚。 FSMC Ax:用在LCD显示RAM和寄存器之间进行选择的地址线,即该线用于选择LCD的RS脚,该线可用地址线的任意一根线,范围:FSMC_A[25:0]。 正如我们操作12864的命令/数据选择端口RS一样,对于FSMC驱动TFT?:RS = 0时,表示读写寄存器;RS = 1表示读写数据RAM。 ? 4、GPIO端口配置 由于是使用FSMC来驱动TFT的,所以除了背光用的PD13和复位用的PC1要设置为通用推挽输出之外,其他引脚都必须设置为复用推挽输出。然而,很奇怪的是。当我配置好PD13时,我发现程序下载进去后是一片漆黑的,后来再三检查是背光的PD13的问题。必须把PD13置高才可以亮,否则默认低电平,就是一片黑了。 ? 5、 具体程序 /******************************************************************************* * Function Name ?: Lcd_Configuration * Description ? ?: Configures LCD Control lines * Input ? ? ? ? ?: None * Output ? ? ? ? : None * Return ? ? ? ? : None * Attention ?: None *******************************************************************************/ static void LCD_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; ? /* Enable GPIOD and GPIOE clocks */ RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE); ? ? ? ? ? ? ? ? ? ? ? /* PE.00(D0), PE.01(D1), PE.02(D2), PE.03(D3), PE.04(D4), PE.05(D5), PE.06(D6), PE.07(D7), PE.08(D8) PE.09(D9), PE.10(D10), PE.11(D11), PE.12(D12), PE.13(D13), PE.14(D14), PE.15(D15) ? */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GP

您可能关注的文档

文档评论(0)

35425 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档