STM32单片机芯片与内部97 FSMC 8080 读写 LCD 标准库 HAL库
目录
一、标准库配置
1、FSMC_NORSRAMInitTypeDef
2、FSMC_NORSRAMTimingInitTypeDef
3、GPIO
4、写命令
5、写数据
6、读数据
7、屏幕显示像素点
8、ILI934
二、用户侧
一、标准库配置
1、FSMC_NORSRAMInitTypeDef
FSMC_NORSRAMInitTypeDef在stm32f10x_fsmc.h中,比较重要的有FSMC_Bank本成员用于选择 FSMC 映射的存储区域,FSMC_MemoryType本成员用于设置要控制的存储器类型,FSMC_MemoryDataWidth本成员用于设置要控制的存储器的数据宽度,FSMC_WriteOperation这个成员用于设置是否写使能,FSMC_ExtendedMode本成员用于设置是否使用扩展模式。
typedef struct
{uint32_t FSMC_Bank; /*!< Specifies the NOR/SRAM memory bank that will be used.This parameter can be a value of @ref FSMC_NORSRAM_Bank */uint32_t FSMC_DataAddressMux; /*!< Specifies whether the address and data values aremultiplexed on the databus or not. This parameter can be a value of @ref FSMC_Data_Address_Bus_Multiplexing */uint32_t FSMC_MemoryType; /*!< Specifies the type of external memory attached tothe corresponding memory bank.This parameter can be a value of @ref FSMC_Memory_Type */uint32_t FSMC_MemoryDataWidth; /*!< Specifies the external memory device width.This parameter can be a value of @ref FSMC_Data_Width */uint32_t FSMC_BurstAccessMode; /*!< Enables or disables the burst access mode for Flash memory,valid only with synchronous burst Flash memories.This parameter can be a value of @ref FSMC_Burst_Access_Mode */uint32_t FSMC_AsynchronousWait; /*!< Enables or disables wait signal during asynchronous transfers,valid only with asynchronous Flash memories.This parameter can be a value of @ref FSMC_AsynchronousWait */uint32_t FSMC_WaitSignalPolarity; /*!< Specifies the wait signal polarity, valid only when accessingthe Flash memory in burst mode.This parameter can be a value of @ref FSMC_Wait_Signal_Polarity */uint32_t FSMC_WrapMode; /*!< Enables or disables the Wrapped burst access mode for Flashmemory, valid only when accessing Flash memories in burst mode.This parameter can be a value of @ref FSMC_Wrap_Mode */uint32_t FSMC_WaitSignalActive; /*!< Specifies if the wait signal is asserted by the memory oneclock cycle before the wait state or during the wait state,valid only when accessing memories in burst mode. This parameter can be a value of @ref FSMC_Wait_Timing */uint32_t FSMC_WriteOperation; /*!< Enables or disables the write operation in the selected bank by the FSMC. This parameter can be a value of @ref FSMC_Write_Operation */uint32_t FSMC_WaitSignal; /*!< Enables or disables the wait-state insertion via waitsignal, valid for Flash memory access in burst mode. This parameter can be a value of @ref FSMC_Wait_Signal */uint32_t FSMC_ExtendedMode; /*!< Enables or disables the extended mode.This parameter can be a value of @ref FSMC_Extended_Mode */uint32_t FSMC_WriteBurst; /*!< Enables or disables the write burst operation.This parameter can be a value of @ref FSMC_Write_Burst */ FSMC_NORSRAMTimingInitTypeDef* FSMC_ReadWriteTimingStruct; /*!< Timing Parameters for write and read access if the ExtendedMode is not used*/ FSMC_NORSRAMTimingInitTypeDef* FSMC_WriteTimingStruct; /*!< Timing Parameters for write access if the ExtendedMode is used*/
}FSMC_NORSRAMInitTypeDef;
2、FSMC_NORSRAMTimingInitTypeDef
FSMC_AddressSetupTime本成员设置地址建立时间,FSMC_DataSetupTime本成员设置数据建立时间,FSMC_AccessMode本成员设置存储器访问模式。
3、GPIO
与FSMC有关的全部复用推挽输出,如果仅控制背光、系统复位则选择推挽输出即可。
4、写命令
可以看到和SRAM一样,直接对地址操作了。
__inline void ILI9341_Write_Cmd ( uint16_t usCmd )
{* ( __IO uint16_t * ) ( FSMC_Addr_ILI9341_CMD ) = usCmd;}
5、写数据
可以看到也是对地址操作,但是命令和数据的地址不同。
__inline void ILI9341_Write_Data ( uint16_t usData )
{* ( __IO uint16_t * ) ( FSMC_Addr_ILI9341_DATA ) = usData;}
//FSMC_Bank1_NORSRAM用于LCD命令操作的地址
#define FSMC_Addr_ILI9341_CMD ( ( uint32_t ) 0x6C000000 )//FSMC_Bank1_NORSRAM用于LCD数据操作的地址
#define FSMC_Addr_ILI9341_DATA ( ( uint32_t ) 0x6D000000 )
6、读数据
__inline uint16_t ILI9341_Read_Data ( void )
{return ( * ( __IO uint16_t * ) ( FSMC_Addr_ILI9341_DATA ) );}
7、屏幕显示像素点
这个是所有显示的核心,因为屏幕以像素点为单位,如果显示点,连接就是线,多个点就是字符。
void ILI9341_SetPointPixel ( uint16_t usX, uint16_t usY )
{ if ( ( usX < LCD_X_LENGTH ) && ( usY < LCD_Y_LENGTH ) ){ILI9341_SetCursor ( usX, usY );ILI9341_FillColor ( 1, CurrentTextColor );}}
static void ILI9341_SetCursor ( uint16_t usX, uint16_t usY )
{ILI9341_OpenWindow ( usX, usY, 1, 1 );
}
void ILI9341_OpenWindow ( uint16_t usX, uint16_t usY, uint16_t usWidth, uint16_t usHeight )
{ ILI9341_Write_Cmd ( CMD_SetCoordinateX ); /* 设置X坐标 */ILI9341_Write_Data ( usX >> 8 ); /* 先高8位,然后低8位 */ILI9341_Write_Data ( usX & 0xff ); /* 设置起始点和结束点*/ILI9341_Write_Data ( ( usX + usWidth - 1 ) >> 8 );ILI9341_Write_Data ( ( usX + usWidth - 1 ) & 0xff );ILI9341_Write_Cmd ( CMD_SetCoordinateY ); /* 设置Y坐标*/ILI9341_Write_Data ( usY >> 8 );ILI9341_Write_Data ( usY & 0xff );ILI9341_Write_Data ( ( usY + usHeight - 1 ) >> 8 );ILI9341_Write_Data ( ( usY + usHeight - 1) & 0xff );}
static __inline void ILI9341_FillColor ( uint32_t ulAmout_Point, uint16_t usColor )
{uint32_t i = 0;/* memory write */ILI9341_Write_Cmd ( CMD_SetPixel ); for ( i = 0; i < ulAmout_Point; i ++ )ILI9341_Write_Data ( usColor );}
8、ILI934
#define WHITE 0xFFFF //白色
#define BLACK 0x0000 //黑色
#define GREY 0xF7DE //灰色
#define BLUE 0x001F //蓝色
#define BLUE2 0x051F //浅蓝色
#define RED 0xF800 //红色
#define MAGENTA 0xF81F //红紫色,洋红色
#define GREEN 0x07E0 //绿色
#define CYAN 0x7FFF //蓝绿色,青色
#define YELLOW 0xFFE0 //黄色
#define BRED 0xF81F
#define GRED 0xFFE0
#define GBLUE 0x07FF/******************************* 定义 ILI934 常用命令 ********************************/
#define CMD_SetCoordinateX 0x2A //设置X坐标
#define CMD_SetCoordinateY 0x2B //设置Y坐标
#define CMD_SetPixel 0x2C //填充像素/* 定义 LCD 驱动芯片 ID */
#define LCDID_UNKNOWN 0
#define LCDID_ILI9341 0x9341
#define LCDID_ST7789V 0x8552
二、用户侧
可以看到,不再和RGB屏幕打交道,而是直接和IL1934驱动IC进行交流,其他IIC、SPI驱动屏幕都是一样的道理,屏幕本身自带了驱动芯片,用户只需要和驱动芯片沟通即可。
相关文章:
STM32单片机芯片与内部97 FSMC 8080 读写 LCD 标准库 HAL库
目录 一、标准库配置 1、FSMC_NORSRAMInitTypeDef 2、FSMC_NORSRAMTimingInitTypeDef 3、GPIO 4、写命令 5、写数据 6、读数据 7、屏幕显示像素点 8、ILI934 二、用户侧 一、标准库配置 1、FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitTypeDef在stm32f10x_fsmc.h中&am…...
基于AIGC的图表自动化生成工具「图表狐」深度评测:如何用自然语言30秒搞定专业级数据可视化?
一、工具核心定位:自然语言驱动的数据可视化 作为数据科学从业者,我们常面临非技术同事的图表制作需求。传统流程需经历数据清洗→结构转换→图表配置→样式调整四大阶段,耗时且易出错。 图表狐(官网预览👇ÿ…...
rpc到自己java实现rpc调用再到rpc框架设计
目录 rpc(Remote Procedure Call)rpc一般架构为什么要引入rpc自己实现rpc调用1. 新建一个maven项目,加入hessian依赖2. 服务端3. Stub代理4. 客户端测试输出5. rpc程序分析附 请求参数和序列化程序 6. 总结 回顾RPCRPC 序列化协议RPC 网络协议注册中心的引入dubbo框…...
Milvus向量数据库可视化客户端Attu
概述 关于Milvus的介绍,可搜索网络资料。Milvus的使用还在摸索中;打算写一篇,时间待定。 关于Attu的资料: 官网GitHub文档 对于Milvus的数据可视化,有如下两个备选项: Milvus_cli:命令行工…...
CSS `transform` 属性详解:打造视觉效果与动画的利器
CSS transform 属性详解:打造视觉效果与动画的利器 引言一、transform 属性简介二、平移(Translation)三、旋转(Rotation)四、缩放(Scale)五、倾斜(Skew)六、组合变换&am…...
【落羽的落羽 数据结构篇】顺序结构的二叉树——堆
文章目录 一、堆1. 概念与分类2. 结构与性质3. 入堆4. 出堆 二、堆排序三、堆排序的应用——TOP-K问题 一、堆 1. 概念与分类 上一期我们提到,二叉树的实现既可以用顺序结构,也可以用链式结构。本篇我们来学习顺序结构的二叉树,起个新名字—…...
基于STM32的智能农业大棚环境控制系统
1. 引言 传统农业大棚环境调控依赖人工经验,存在控制精度低、能耗高等问题。本文设计了一款基于STM32的智能农业大棚环境控制系统,通过多参数环境监测、作物生长模型与精准执行控制,实现大棚环境的智能优化,提高作物产量与品质。…...
Git常见命令--助力开发
git常见命令: 创建初始化仓库: git 将文件提交到暂存区 git add 文件名 将文件提交到工作区 git commit -m "注释(例如这是发行的版本1)" 文件名 查看状态 如果暂存区没有文件被提交显示: $ git status On…...
一:将windows上的Python项目部署到Linux上,并使用公网IP访问
windows中python的版本:python3.13.1,项目使用的是虚拟环境解释器 linux系统:仅有python3.6.7 服务器:阿里云服务器有公网IP,访问端口XXXX 在linux上安装python3.13.1 linux中如果是超级管理员root,执行所…...
1_2 流浪地球(python)
1.题目 分值:100 题目描述 流浪地球计划在赤道上均匀部署了N个转向发动机,按位置顺序编号为0~N-1。 初始状态下所有的发动机都是未启动状态。 发动机启动的方式分为“手动启动”和“关联启动”两种方式如果在时刻1一个发动机被启动,下一个时…...
【数据标准】数据标准化是数据治理的基础
导读:数据标准化是数据治理的基石,它通过统一数据格式、编码、命名与语义等,全方位提升数据质量,确保准确性、完整性与一致性,从源头上杜绝错误与冲突。这不仅打破部门及系统间的数据壁垒,极大促进数据共享…...
计算机视觉:经典数据格式(VOC、YOLO、COCO)解析与转换(附代码)
第一章:计算机视觉中图像的基础认知 第二章:计算机视觉:卷积神经网络(CNN)基本概念(一) 第三章:计算机视觉:卷积神经网络(CNN)基本概念(二) 第四章:搭建一个经典的LeNet5神经网络(附代码) 第五章࿱…...
七星棋牌顶级运营产品全开源修复版源码教程:6端支持,200+子游戏玩法,完整搭建指南(含代码解析)
棋牌游戏一直是移动端游戏市场中极具竞争力和受欢迎的品类,而七星棋牌源码修复版无疑是当前行业内不可多得的高质量棋牌项目之一。该项目支持 6大省区版本(湖南、湖北、山西、江苏、贵州),拥有 200多种子游戏玩法,同时…...
编程考古-忘掉它,Delphi 8 for the Microsoft .NET Framework
忘掉它吧,作一篇记录! 【圣何塞,加利福尼亚 – 2003年11月3日】在今日的Borland开发者大会上,Borland正式推出了Delphi 8 for Microsoft .NET Framework。这款新版本旨在为Delphi开发者提供一个无缝迁移路径,将现有的…...
宠物智能可穿戴产品调研报告
一、引言 随着人们生活水平的提高以及情感陪伴需求的增长,宠物在家庭中的地位愈发重要,宠物经济蓬勃发展。宠物智能可穿戴产品作为宠物市场与科技融合的新兴领域,正逐渐走进大众视野,为宠物饲养与管理带来新的变革。本调研旨在深…...
[通俗易懂C++]:指针和const
之前的文章有说过,使用指针我们可以改变指针指向的内容(通过给指针赋一个新的地址)或者改变被保存地址的值(通过给解引用指针赋一个新值): int main() {int x { 5 }; // 创建一个整数变量 x,初始值为 5int* ptr { &x }; // 创建一个指针 ptr,指向 …...
大一高数(上)速成:导数和微分
目录 1.分段函数的可导性: 2.隐函数求导: 3.参数方程求导: 4.对数求导法: 5.函数的微分: 1.分段函数的可导性: 2.隐函数求导: 3.参数方程求导: 4.对数求导法: 5.函数的微分:...
使用 DeepSeek 和 Google Gemini 算命
目录 DeepSeek 调用Gemini 调用基础 PromptFAQ1. Gemini 返回失败2. DeepSeek 超时 DeepSeek 调用 由于 DeepSeek API 是兼容 openai 的,所以直接使用 openai 的 sdk 即可。 // Please install OpenAI SDK first: npm install openaiimport OpenAI from openai; i…...
京东cfe滑块 分析
声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向分析 headers {"accept&qu…...
list结构刨析与模拟实现
目录 1.引言 2.C模拟实现 2.1模拟实现结点 2.2模拟实现list前序 1)构造函数 2)push_back函数 2.3模拟实现迭代器 1)iterator 构造函数和析构函数: *操作符重载函数: 前置/后置/--: /!操作符重载…...
react 踩坑记 too many re-renders.
报错信息: too many re-renders. React limits the number of randers to prevent an infinite loop. 需求 tabs只有特定标签页才展示某些按钮 button要用 传递函数引用方式 ()>{} *还有要注意子组件内loading触发 导致的重复渲染...
BGP分解实验·19——BGP选路原则之起源
当用不同的方式为BGP注入路由时,起源代码将标识路由的来源。 (在BGP表中,Network为“i”,重分布是“?”) 实验拓扑如下: R2上将来自IGP的路由10.3.3.3/32用network指令注入BGP;在R4上将来自I…...
二叉树中每个节点能到达的最远距离
一、题目描述 输入一个只包含0和1的字符串表示二叉树,输出每个节点能到达的最远距离,通过父节点的路径也要考虑。 比如输入"111110000010000", 输出[3,2,4,3,3,4]。 1A / \ 1B 1C / \ / \ 1D 1E 0 0 / \ /…...
单机上使用docker搭建minio集群
单机上使用docker搭建minio集群 1.集群安装1.1前提条件1.2步骤指南1.2.1安装 Docker 和 Docker Compose(如果尚未安装)1.2.2编写docker-compose文件1.2.3启动1.2.4访问 2.使用2.1 mc客户端安装2.2创建一个连接2.3简单使用下 这里在ubuntu上单机安装一个m…...
结构体简介
前言 这篇文章呢就给大家简单讲解一下什么是结构体,也让大家对结构体有一个较为清晰的了解,从而帮助同学们更好的掌握结构体。 结构体类型的声明 结构的声明 在声明结构体的类型是,先给大家拓展两个重要的关键字 typedef 和 struct. 拓展…...
家用路由器的WAN口和LAN口有什么区别
今时今日,移动终端盛行的时代,WIFI可以说是家家户户都有使用到的网络接入方式。那么路由器当然也就是家家户户都不可或缺的设备了。而路由器上的两个实现网络连接的基础接口 ——WAN 口和 LAN 口,到底有什么区别?它们的功能和作用…...
实操解决Navicat连接postgresql时出现‘datlastsysoid does not exist‘报错的问题
1 column “datlastsysoid“ does not exist2 Line1:SELECT DISTINCT datalastsysoid FROM pg_database问题分析 Postgres 15 从pg_database表中删除了 datlastsysoid 字段引发此错误。 决绝方案 解决方法1:升级navicat 解决方法2:降级pgsql 解决方…...
3分钟idea接入deepseek
DeepSeek简介 DeepSeek 是杭州深度求索人工智能基础技术研究有限公司开发的一系列大语言模型,背后是知名量化资管巨头幻方量化3。它专注于开发先进的大语言模型和相关技术,拥有多个版本的模型,如 DeepSeek-LLM、DeepSeek-V2、DeepSeek-V3 等&…...
树莓派理想二极管电路分析
如果 Vin Vout,比如说 5.0V,PNP 晶体管以当前的镜像配置偏置。晶体管 U14 的 Vb 将为 5-0.6 4.4V,镜像配置意味着 Vg 也将为 4.4V. Vgs 为4.4-5.0 -0.6V。mosfet 将处于关闭状态(几乎打开)。如果 Vout 略低于 Vin&a…...
关于在mac中配置Java系统环境变量
引言 在 macOS 上开发 Java 或 Flutter 应用时,正确配置环境变量是至关重要的。环境变量不仅能让系统找到开发工具的位置,还能简化命令行操作。本文将手把手教你从零开始安装 Java SDK,并详细配置环境变量,涵盖常见问题解决和优化…...
