微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 感受FSMC功能的强大

感受FSMC功能的强大

时间:10-02 整理:3721RD 点击:

这里先简单介绍一下FSMC,详细的功能说明还请参照官方的使用说明及其它文章参考。

FSMC全称“静态存储器控制器”。

使用FSMC控制器后,可以把FSMC提供的FSMC_A[25:0]作为地址线,而把FSMC提供的FSMC_D[15:0]作为数据总线。

说得简单一点,使用FSMC外设后,对于操作数据线与地址线的工作全与STM32内部自行完成了,不再需要我们自己加一个延时来处理哪个引脚先高,哪个引脚再低的麻烦工作了。配置完成之后,我们仅需要将要发送的指令或是数据写到对应寄存器后,数据线与地址线的时序就会自动完成了。对于我们编写程序省了不少的时间与精力。

在硬件上,我们需要对目前的nucleo-f412进行修改,首先,需要焊掉SB5与SB6两个锡桥,因为PD8,PD9占用了FSMC的数据线。其实,PB14引脚驱动LD3灯也是与FSMC的D0位冲突的,但是其被不影响数据的输出,因此我们保留这个LED灯,只是在操作的时候会看到LD3红色小灯有时会闪一下。

接下来我们按照Cube提示的FSMC_D的数据线引脚,对液晶屏连接——直连方式。具体连接如下:

FSMC_D[16:0]->16bit地址总线

FSMC NEx:本次使用FSMC NE1,对应SRAM操作方式;

FSMC NOE:输出使能,连接LCD的RD脚

FSMC NWE:写使能,连接LCD的RW脚

FSMC_Ax:本次考虑引脚占用的问题,因此使用A6,即PF12引脚。对应的指令地址为0x60000080,算法就是A6左移 6 + 1位,具体原理请参照官方说明文档了。

本次使用了SSD1298液晶屏,其驱动为ili9325,现在将初始化参数列表分享出来:

const uint16_t InitCmd[57][2] = {

                                  {0x00e7,0x0010},      

                                  {0x0000,0x0001},

                                  {0x0001,0x0100},     

                                  {0x0002,0x0700},                  

                                  {0x0003,0x1038},   

                                  {0x0004,0x0000},                                   

                                  {0x0008,0x0207},               

                                  {0x0009,0x0000},         

                                  {0x000a,0x0000},         

                                  {0x000c,0x0001},         

                                  {0x000d,0x0000},         

                                  {0x000f,0x0000},

                                  {0x0010,0x0000},

                                  {0x0011,0x0007},

                                  {0x0012,0x0000},                                                            

                                  {0x0013,0x0000},              

                                  {0x0010,0x1590},   

                                  {0x0011,0x0227},

                                   {0x0012,0x009c},           

                                  {0x0013,0x1900},   

                                  {0x0029,0x0023},

                                  {0x002b,0x000e},

                                  {0x0020,0x0000},                                                           

                                  {0x0021,0x013f},           

                                  {0x0030,0x0007},

                                  {0x0031,0x0707},   

                                  {0x0032,0x0006},

                                  {0x0035,0x0704},

                                  {0x0036,0x1f04},

                                 {0x0037,0x0004},

                                  {0x0038,0x0000},        

                                  {0x0039,0x0706},     

                                  {0x003c,0x0701},

                                  {0x003d,0x000f},

                                  {0x0050,0x0000},

                                  {0x0051,0x00ef},                  

                                  {0x0052,0x0000},                  

                                  {0x0053,0x013f},

                                  {0x0060,0xa700},      

                                  {0x0061,0x0001},

                                  {0x006a,0x0000},

                                  {0x0080,0x0000},

                                  {0x0081,0x0000},

                                  {0x0082,0x0000},

                                  {0x0083,0x0000},

                                  {0x0084,0x0000},

                                  {0x0085,0x0000},

                                  {0x0090,0x0010},   

                                  {0x0092,0x0000},

                                  {0x0093,0x0003},

                                  {0x0095,0x0110},

                                  {0x0097,0x0000},      

                                  {0x0098,0x0000},

                                  {0x0007,0x0133},  

                                  {0x0020,0x0000},                                                         

                                  {0x0021,0x013f},

                                  {0x0007,0x0000},

                              };                              

const uint16_t cmd[8]= {0x00, 0x50, 0x51, 0x52,0x53, 0x20, 0x21, 0x22};

初始化的程序也是相当的简单,这里由于篇幅的原因不展示,大家可以下载我的源代码来参考。

主程序使用了蓝、红、绿两元色交替显示,效果如图所示:



  下一步将移植图形库,便于我们显示。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top