FSMC驱动LCD

FSMC( Flexible static memory controller)全称“灵活的静态存储器控制器”,是 STM32中一个很有特色的外设,通过 FSMC,STM32可以通过FSMC与SRAM、ROM、PSRAM、Nor Flash和NandFlash存储器的引脚相连,从而进行数据的交换。
FSMC的本质就是内核想要访问存储器,但是内核不能生成硬件时序,FSMC外设就帮忙做了这个硬件时序这个事情。有了这个外设我们操作外部SRAM就不需要自己在那里写读写时序了,FSMC就帮我们解决了。

一、FSMC框架与信号

如图所示为FSMC的框架结构
在这里插入图片描述
如图所示中FSMC各种信号的含义为:
在这里插入图片描述

FSMC_NBL

FSMC_NBL[1]、FSMC_NBL[0]分别对应于LBn、UBn,提供数据掩码信号。
一根行地址线对应16位的数据,我们可以把16位的数据分为高字节和低字节。
当要访问宽度为16位的数据时,使用行地址线指出地址,然后把UBn(n表示低电平有效)
和LBn线都设置为低电平(FSMC_NBL0和 FSMC_NBL为低电平),那么I/O0-I/O15线(FSMC_D0到 FSMC_D15)都有效。
当要访问宽度为8位的数据时,使用行地址线指出地址,然后把UBn(FSMC_NBL0)设置为低电平,I/O0-I/O15(FSMC_D8到 FSMC_D15)会对应输出该地址的高8位,l/O0-I/O7的信号无效(或者把LBn(FSMC_NBL1)设置为低电平,I/O0-/O7(FSMC_D0到SMCD7)会对应输出该地址的低8位,I/O8-/I/O15的信号无效。

要注意的是FSMC_NBL[1]、FSMC_NBL[0]分别对应于LBn、UBn,这两个引脚的电平不需要用户用程序控制的,这两个引脚应该是FSMC的内部硬件机制完成的。

FSMC_NE

在这里插入图片描述

从FSMC的角度看,可以把外部存储器划分为固定大小为256M字节的四个存储块,每个小块****有相应的控制引脚用于连接片选信号FSMC_NE1/2/3/4,见下图。
● 存储块1用于访问最多4个NOR闪存或PSRAM存储设备。这个存储区被划分为4个
NOR/PSRAM区并有4个专用的片选。
● 存储块2和3用于访问NAND闪存设备,每个存储块连接一个NAND闪存。
● 存储块4用于访问PC卡设备
每一个存储块上的存储器类型是由用户在配置寄存器中定义的。

FSMC_NE[4:1]信号线就分别对应图中的 FSMC bank 1NOR/PSRAM4到FSMC bank1NOR/PSRAM1。

FSMC_A[25:0]

(1) HADDR是需要转换到外部存储器的内部AHB地址线。
HADDR[25:0]包含外部存储器地址。HADDR是字节地址,而存储器访问不都是按字节访问,因 此接到存储器的地址线依存储器的数据宽度有所不同,如下表:

对于16位宽度的外部存储器,FSMC将在内部使用HADDR[25:1]产生外部存储器的地址FSMC_A[24:0]。不 论外部存储器的宽度是多少(16位或8位),FSMC_A[0]始终应该连到外部存储器的地址线A[0]。

二、FSMC驱动LCD

LCD驱动信号线

把TFTLCD当成一个SRAM来用。
根据下表可知,FSMC可以提供LCD需要的所有信号,且模式A和模式B的时序与LCD所需要的8080并口时序相同。
在这里插入图片描述

TFTLCD通过RS信号来决定传送的数据是数据还是命令,本质上可以理解为两个地址信号。向地址0写数据时,就是LCD命令控制信号;向地址1写数据时,就是LCD数据控制信号。
比如我们把*RS接在A18上面,那么当FSMC控制器写地址0的时候,会使得A18变为0,对TFTLCD来说,就是写命令。而FSMC写地址1的时候,A18将会变为1,对TFTLCD来说,就是写数据了。

读写设置与地址偏移

在这里插入图片描述
根据表87(外部存储器地址)可知,对于16位宽度的外部存储器,要让A18变为1,需要设置HADDR[19]=1.

#define LCD_BASE0        	  ((u32)0x60000000)  //命令写地址 
#define LCD_BASE1        	  ((u32)0x60080000)  //数据写地址 要A18为1,根据表87,需要让HADDR[19]变1   1<<19=0x80000
//FSMC写命令函数
void FMSC_16_CmdWrite(u8 cmd)
{
    u16 temp=cmd;
	*(vu16*) (LCD_BASE0)= temp;
}
//FSMC写数据函数
void FMSC_16_DataWrite(u8 data)
{  
    u16 temp=data;
	*(vu16*) (LCD_BASE1)= temp; 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/296360.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java面试项目推荐,异构数据源数据流转服务DatalinkX

前言 作为一个年迈的夹娃练习生&#xff0c;每次到了春招秋招面试实习生时都能看到一批简历&#xff0c;十个简历里得有七八个是写商城或者外卖项目。 不由得想到了我大四那会&#xff0c;由于没有啥项目经验&#xff0c;又想借一个质量高点的项目通过简历初筛&#xff0c;就…

LeetCode 2221. 数组的三角和

文章目录 1. 题目 2. 解题 1. 题目 给你一个下标从 0 开始的整数数组 nums ,其中 nums[i] 是 0 到 9 之间(两者都包含)的一个数字。 nums 的 三角和 是执行以下操作以后最后剩下元素的值: nums 初始包含 n 个元素。如果 n == 1 ,终止 …

系列十一、(三)Sentinel控制台

一、Sentinel控制台 二、实时监控 2.1、概述 实时监控&#xff0c;顾名思义是用来实时监控的&#xff0c;具体监控的是接口请求通过的QPS和拒绝的QPS&#xff0c;默认情况下没有访问记录&#xff0c;所以看不到任何记录&#xff0c;需要访问接口才会有记录。另外需要注意&…

每10分钟一更新的实时卫星影像

我们为大家分享了一个可以查看下载高时效卫星影像的方法。 这里再为大家推荐一个可以查看近乎实时的卫星影像的网站&#xff0c;卫星影像每10分钟更新一次。 实时卫星影像 打开网站&#xff08;zoom.earth&#xff09;&#xff0c;可以查看实时卫星影像画面&#xff0c;在左…

[C#]C# OpenVINO部署yolov8图像分类模型

【官方框架地址】 https://github.com/ultralytics/ultralytics.git 【算法介绍】 YOLOv8 抛弃了前几代模型的 Anchor-Base。 YOLO 是一种基于图像全局信息进行预测的目标检测系统。自 2015 年 Joseph Redmon、Ali Farhadi 等人提出初代模型以来&#xff0c;领域内的研究者们…

2024年天津体育学院专升本专业考试考生入场及考前须知

天津体育学院2024年高职升本科招生专业考试考生考前须知 一、考生入场及考试要求 1.考生于1月6日笔试考试当天&#xff0c;根据考试时间提前30分钟到达天津体育学院新校区东门&#xff0c;凭专业考试准考证、有效身份证原件&#xff0c;经查验合格后方可允许进入学校。 2.笔…

python语言在web上的应用:如何节省服务器资源?

背景介绍​ 在web开发中的应用广泛​ 在web开发中的应用广泛。随着互联网的发展&#xff0c;web应用越来越普遍&#xff0c;而Python作为一种简洁、高效的编程语言&#xff0c;被广泛应用于web开发领域。Python提供了丰富的库和框架&#xff0c;如Django、Flask等&#xff0c…

软件验收测试计划、验收测试报告案例模板参考

1. 概述 1.1. 编写目的 1.2. 测试背景 1.3. 测试依据 1.4. 测试对象 1.5. 测试资源 2. 测试方式与环境 2.1. 测试方式 2.2. 测试环境 3. 测试结果 3.1. 功能适合性和准确性 3.1.1. 总体统计 3.1.2. 详细结果 3.2. 安全性 3.3. 可靠性和性能 4. 总体分析 5. 测试…

数字逻辑电路入门:从晶体管到逻辑门

数字逻辑电路入门&#xff1a;从晶体管到逻辑门 这是数字逻辑电路中最基础的部分。但是并非那么容易理解。 1、晶体管 mosfet&#xff1a;场效应晶体管&#xff0c;是电压控制元件。cmos&#xff1a;是指由mos管构成的门级电路通常是互补的。BJT&#xff1a;一种三极管&…

视频智能分析/云存储平台EasyCVR接入海康SDK,通道名称未自动更新该如何解决?

视频监控GB28181平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频流&#xff0c;也能…

c++-智能指针

1、概念 堆内存的对象需要手动使用delete销毁&#xff0c;如果忘记使用delete销毁就会造成内存泄漏。 所以C在ISO 98标注中引入了智能指针的概念&#xff0c;并在C11 中趋于完善。 使用智能指针可以让堆内存对象具有栈内存对象的特性。原理时给需要自动回收的堆内存对象套上一层…

C++-异常处理

1、概念 异常时程序在执行期间产生的问题。C异常是指在程序运行时发生的特殊情况。比如string::at函数下标越界等。 异常提供了一种转移程序控制权的方式。 一旦程序出现异常没有经过处理&#xff0c;就会造成程序运行崩溃。 处理异常的方式有&#xff1a;抛出异常&#xff08;…

选择排序!!!基础排序详解 C语言版

目录 1.什么是选择排序 2.选择排序源代码 3.优化代码 1.什么是选择排序 这是一个选择排序的流程图&#xff0c;其实很简单&#xff0c;就是每次挑选数字中最小的作为第一个 &#xff0c;直到整个数据有序就结束了 顾名思义&#xff0c;选择&#xff0c;那就是选取&#xff0c…

css的一些属性

我们在写项目的时候&#xff0c;会遇到多种多样的样式&#xff0c;大部分都是由css来实现的&#xff0c;css可以让我们的页面更美观&#xff0c;css通常是配合HTML使用&#xff0c;代码较为简单! 下面我就给大家举几个较为常用的一些css属性。 1.CSS中怎样让元素圆角化&#…

【Axure高保真原型】树形表格_多选效果

今天和大家分享树形表格_多选效果的原型模板&#xff0c;点击树的箭头可以展开或者收起子节点&#xff0c;点击多选按钮可以选中或取消选择该行以及子级行内容&#xff0c;同时反选父级行内容&#xff0c;父级行内容能根据子级选中的数量自动反选&#xff0c;包括全选、半选和未…

听GPT 讲Rust源代码--compiler(24)

File: rust/compiler/rustc_target/src/spec/armv7_unknown_linux_uclibceabi.rs 该文件的作用是定义了ARMv7架构使用uClibc-eabi工具链时的目标环境配置。 在Rust中&#xff0c;针对不同的目标平台&#xff0c;需要提供对应的配置文件以确保正确地编译和链接代码。这些配置文件…

小红书投放策略分析,如何打造个性化内容?

作为一个发展多年的成熟内容平台&#xff0c;小红书不同于其他平台&#xff0c;其用户数与影响力&#xff0c;一直处于不断增长中。因而作为品牌方&#xff0c;想要充分得到平台的流量红利&#xff0c;就必须学会制定小红书投放策略。今天&#xff0c;我们和大家分享下小红书投…

PyQT5实现图像处理应用(含Windows7下完整打包方案)

目录 1、任务概述2、环境安装2.1 创建虚拟环境2.2 安装依赖库 3、程序开发3.1 框架搭建3.2 读取图像3.3 图像处理 4、打包部署5、小结 1、任务概述 本篇博文将通过PyQT5来实现一个简单的图像处理应用&#xff0c;并完成打包部署。 本文开发平台&#xff1a;Windows10 64位系统…

Python PDF处理模块pypdf库详解

概要 PDF&#xff08;Portable Document Format&#xff09;是一种常见的文档格式&#xff0c;广泛用于存储和共享文本和图像数据。在 Python 中&#xff0c;有许多库可以用于处理 PDF 文件&#xff0c;其中之一就是 PyPDF。PyPDF 是一个功能强大的库&#xff0c;它允许你读取…

Linux入门攻坚——11、Linux网络属性配置相关知识1

网络基础知识&#xff1a; 局域网&#xff1a;以太网&#xff0c;令牌环网&#xff0c; Ethernet&#xff1a;CSMA/CD 冲突域 广播域 MAC&#xff1a;Media Access Control&#xff0c;共48bit&#xff0c;前24bit需要机构分配&#xff0c;后24bit自己…