深入理解stm32f407之FSMC
来源:互联网 发布:java web敏捷开发框架 编辑:程序博客网 时间:2024/06/08 06:35
首先为什么stm32f407通过FSMC可以控制TFTLCD?要回答这个问题,首先要理解FSMC是什么东西,你可以把它简单理解为外部存储器的控制器,有了它stm32f407就能轻易地读写外部存储器,外部存储器的控制线一般有:地址线(A0-A18)、数据线(D0-D15)、写信号线(WE)、读信号线(OE)、片选信号(CS)。而TFTLCD是通过8080并口来实现数据读写,其中主要的一些信号线包括片选信号(CS)、写信号线(WR)、读信号线(RD)、数据线(D0-D15)、命令/数据标志(RS)、硬复位(RST)。由上面对比可知,TFTLCD与普通外部存储器的区别在于TFTLCD没有地址线,但是多了一根命令/数据标志线,所以当我们把标志线连接到FSMC上地址线时,FSMC就能如同控制外部存储器一样控制TFTLCD。
了解了FSMC控制TFTLCD的原理后,再深入了解FSMC的内部结构和相关寄存器,最后结合代码分析验证相关寄存器的功能。
stm32f4的FSMC支持8、16、32位数据宽度,同时它将外部存储器划分为固定大小为256M字节的四个存储快,总共管理了1GB,如下图所示:
这以里以Bank 1为例,每个块分为4个区,每个区管理64M字节空间,每个区都有独立的寄存器对所连接的的寄存器进行配置。Bank 1的256M字节空间由28根地址线寻址。
(256M=256*1024KB=256*1024*1024B = 2^8*2^10*2^10 = 2^28),这28根地址线是内部AHB地址总线(HADDR),HADDR【25:0】来自外部存储器地址FSMC_A[25:0],而HADDR【2:6:27】对4个区寻址,如下图所示:
要注意的是,当 Bank1 接的是 8 位宽度存储器的时候:HADDR[25:0]-> FSMC_A[25:0]。
当 Bank1 接的是 16 位宽度存储器的时候:HADDR[25:1]->FSMC_A[24:0],这是因为HADDR地址总线是以8个字节为单位寻址的,而外部寄存器每个地址有16位,要让他们的地址相匹配的话,就必须把HADDR地址总先减少一半,也就是右移一位。(在没有发生以为的情况下,右移以为相当于除于2),另外,HADDR[27:26]的设置,是不需要我们干预的,比如:当你选择使用 Bank1 的第三个区,即使用 FSMC_NE3 来连接外部设备的时候,即对应了 HADDR[27:26]=10,我们要做的就是配置对
应第3区的寄存器组,来适应外部设备即可。FSMC各个Bank所需配置的寄存器如下表所示:
有上图可知:对于NOR_FLASH控制器,主要是通过FSMC_BCRX,FSMC_BTRX,FSMC_BWTRX寄存器设置,通过这三个寄存器,可以设置FSMC
访问外部存储器的时序参数。
- 深入理解stm32f407之FSMC
- STM32F407学习之初始STM32F407
- FSMC ON STM32F407 USE FOR TFT-LCD DRIVER ILI9325
- STM32 FSMC总线深入研究
- STM32 FSMC总线深入研究
- STM32 FSMC总线深入研究
- STM32 FSMC总线深入研究
- STM32笔记之FSMC
- STM32笔记之FSMC
- STM32探秘 之FSMC
- STM32F407之ADC简介
- stm32f407之认识硬件
- stm32f407之NVIC
- stm32f407之通用定时器
- STM32F407之ADC简介
- stm32f407之NVIC
- STM32F407学习之GPIO
- STM32F407学习之时钟
- Ubuntu17上安装Tensorflow
- 【Scikit-Learn 中文文档】线性和二次判别分析
- 记录SpringBoot使用Druid和Mybatis配置
- python文件的打开
- Android的五种布局模式
- 深入理解stm32f407之FSMC
- c语言小题目练习
- WEEK2--DrawerLayout 和 ListView 获取网络数据并展示
- linux qt opencv安装配置详细版
- UserProfile扩展Django原有用户(管理)信息
- spring+hibernate 两种整合方式配置文件
- 当前和未来重要的大数据优势
- 【Scikit-Learn 中文文档】内核岭回归
- [Tensorflow]Sharing Variables 共享权值【tf.get_variable 和 tf.variable_scope】