STM32/STM8技术论坛
直播中

lemonboard

8年用户 58经验值
擅长:嵌入式技术 接口/总线/驱动 控制/MCU
私信 关注
[经验]

【NUCLEO-F412ZG试用体验】感受FSMC功能的强大

这里先简单介绍一下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};
初始化的程序也是相当的简单,这里由于篇幅的原因不展示,大家可以下载我的源代码来参考。
主程序使用了蓝、红、绿两元色交替显示,效果如图所示:
WP_20170714_23_02_28_Pro.jpg
  下一步将移植图形库,便于我们显示。

更多回帖

发帖
×
20
完善资料,
赚取积分