有封装好的HAL库 FSMC LCled显示屏封装驱动吗

查看: 3018|回复: 10
求解惑,FSMC跟LCD控制器 来驱动屏 有什么区别呢???
概念有点模糊了
新手啊 我是新手啊,但是我也要努力解释一下 。
首先从液晶说起,简单的说单色液晶。假如是12864 共计有128*64=8192个像素,相当于这么多led吧 如何控制亮呢? 显然你用一个单片机驱动就不好搞了 至少单片机就干不了别的了。所以引入了lcd控制器。简单的有st7920 对液晶呢 提供很多io 用于驱动,内部呢 还有 rom 用来放置字库。ram呢 用来做显存映射 还有对外的IO 还有对外的指令系统。他本身通过一定的方法(比如程序)协调所有的 ...
新手啊 我是新手啊,但是我也要努力解释一下 。
首先从液晶说起,简单的说单色液晶。假如是12864 共计有128*64=8192个像素,相当于这么多led吧 如何控制亮呢? 显然你用一个单片机驱动就不好搞了 至少单片机就干不了别的了。所以引入了lcd控制器。简单的有st7920 对液晶呢 提供很多io 用于驱动,内部呢 还有 rom 用来放置字库。ram呢 用来做显存映射 还有对外的IO 还有对外的指令系统。他本身通过一定的方法(比如程序)协调所有的功能部件。外部控制液晶 其实即使与他通讯 告诉他怎么做 然后他去真正的刷屏。
稍微啰嗦的说呢 比如常用的2.8寸tft 像素是 320*240=76800=75k 。每个像素呢相当于3个led(RGB)这样的东西若直接连接到你的stm32 恐怕你也知道多少钱也不干了吧。当然你构思如何的矩阵 减少IO 或者是用其他IO芯片扩展 总之 你不想干。将来点灯的程序就很费CPU。所以你可能更加的期待有一个专用的芯片能负责点灯,你可以通过例如 IIC SPI USART 乃至于8位并口 16位并口的方式操作。LCD控制器就是这个芯片。
比如说ssd1289 你百度它的资料可以看到,他有很多的寄存器,有ram 有直接驱动液晶的IO 有对你stm32提供的接口 。
凑巧的是 SSD1289 对你提供的是 8位或者16位的 并行接口 主要的功能体现是 假如你需要点亮tft 的(10,10)像素 你只需要把16位(R5G6B5)颜色写入到当前点的ram中。SSD1289给你自动刷tft去。
你操作SSD1289就当是操作个芯片一样 类似与老掉牙的adc0809 很爽吧。但是若你是从51时代过来的人就会知道当年所谓的 IO方式模拟驱动还是总线方式驱动 的2种方式。
也就是如今你问题里面的fsmc了。说这个 我有点硬着头皮。因为是完全的额意淫。毫无经验,你就当看热闹。有大侠路过的话一定斧正啊。小弟感谢剃个铃铛。
假如说 SSD1289 对外提供&&RST,,CS,,RW,,CD,,D0,,D1,,D2,,.........D15 这些接口。那么你连接到你的stm32有多种方式
第一种,你把数据线D0--D15接在了你的PE端口 将来你设置好其他控制线的电平后 送数据的方式是 GPIOE-&ODR=(颜色数据); 对吧 用库函数开发呢是GPIO_WriteData(GPIOE,(u16)(颜色数据));
很有当年操作1602的意思。这样做呢 好处你很熟悉的感觉,液晶也不过如此嘛。坏处的 CPU得干活。事无巨细啊,诸葛亮怎么死的啊,累死的啊。或许你会说CPU不就是干这事吃饭的吗?
答案是否定的 刷数据到液晶可能只是cpu众多业绩提现里面的微不足道的一项。cpu平时呢 主要要干点识别中断,响应中断 没事做点FFT 微积分计算多好啊。刷液晶其实可以不干的。
那么液晶谁刷?谁刷???当然是SSD1289刷啊。晕
我说的是 SSD1289谁刷? 可以用fsmc刷! fsmc就有点类似与51系统里面总线的概念,他本身也是片上的一个外设,但却能操作片外的外设。cortexM3的片外ram区(可能是吧)有1G的寻址能力
假如将那些 CS CD RW 等等控制线都连接到地址线上,将来对不同地址的操作是不是就可以把不同的信号线电平设置呢?对数据线的读写是不是就对SSD1289寄存器的读写呢??
而且这些设计很巧妙的。比如显存的地址也是连续的 对应你C语言定义的数组也是连续的。可以凑上来一起理解嘛。
过去 你用IO将一个C语言数组从你stm32的ram里面搬到了SSD1289ram里面,用的是CPU,
现在嗯 你用fsmc 将一个c语言数组从stm32搬到ssd1289里面 用的当然也是cpu
天哪 废话啊。
但是 首先看到的是 外设变化了 刚才你用的IO&&现在用的是FSMC&&
然后呢 你要熟悉下fsmc 他比IO啰嗦,我不想引导你这样想象,但事实上这么搞的人很多。
就是用dma 这样呢你将stm32里面的C数组搬到ssd1289里不用终于CPU了。
对与你的cpu来说,或者在CPU看来
你是将ssd1289的显存搬到了stm32的内存上了。
其实某种意义上 cpu离液晶跟近了。因为他操作内存就可能操作到屏幕。
这样做来 好处多多,首先是瓶颈问题。
当然从CPU,sram 到gpio ,fsmc等等 但拿出谁来都不是瓜怂,在PDF里面一个赛一个的牛B。对于码农来说,组织不好这些东西,资源利用不科学才是瓶颈。
如此看来 当年用GPIO直接驱动液晶的方法 你有可能组织不利。至少你重用了CPU 功高震主啊,当徐图削之。
如今用fsmc 一旦配置好(说好听叫移植,难听叫剽窃)CPU就权轻很多。反正fsmc也由不得你,人家stm32厂家已经固化(群策群力化的东西,没诺贝尔奖不要笑话人家东西烂,说白了你只有使用权)
你老老实实的做好cpu的累加功能(哦 stm32的cpu还会乘法,天哪,高科技啊)
这样搞 简单了很多。
行了 不知道如何渲染这段倒霉的无营养的文字了
就这样吧,最近本人也事情多,脑袋时常空白,写这段也语无伦次。可能没有很好的解释你的问题,反倒是把些小儿科渲染了一番。十分抱歉。
不用程序来控制数据传输的时序了。
FSMC是stm系列芯片的外部总线控制器,
LCD控制器驱动屏驱动器
屏驱动器刷新屏幕
有一些驱动IC,包含屏驱动器和控制器.
FSMC接口控制 兼容 带8080接口的LCD控制器
最新的stm32f429/39的片子自带lcd控制器,可以直接rgb接口控制屏驱动器
FSMC-&lcd控制器-&屏驱动器-&屏
FSMC-&(lcd控制器+屏驱动器 )-&屏
LCD需要有个东西一直刷新他...从第一个像素到最后一个像素....
LCD控制器就是刷屏的东西....
可能存在于MCU里...可能自己是个芯片...可能在LCD里....
GPIO.FSMC冒充LCD控制器也可以...不过没意义...
新手啊 我是新手啊,但是我也要努力解释一下 。
首先从液晶说起,简单的说单色液晶。假如是12864 共计有128 ...
辛苦了 兄弟& &
LCD需要有个东西一直刷新他...从第一个像素到最后一个像素....
LCD控制器就是刷屏的东西....
精辟·········
都很精辟,学习了。
学习了,谢谢
阿莫电子论坛, 原"中国电子开发网"【HAL库每天一例】第037例:LCD-液晶显示 - STM32/STM8技术论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
【HAL库每天一例】第037例:LCD-液晶显示
09:00:42  
【HAL库每天一例】系列例程从今天开始持续更新。。。。。
我们将坚持每天至少发布一个基于YS-F1Pro的HAL库例程,
该系列例程将带领大家从零开始使用HAL库,后面会持续添加模块应用例程。
同样的,我们还程序发布基于HAL库的指导文档和视频教程,欢迎持续关注,并提出改进意见。
例程下载:
资料包括程序、相关说明资料以及软件使用截图
密码:r3s3
(硬石YS-F1ProHAL库例程持续更新\1. 软件设计之基本裸机例程(HAL库版本)\YSF1_HAL-037. LCD-液晶显示)
&&******************************************************************************
&&*& && && && && && && && && &硬石YS-F1Pro开发板例程功能说明
&&*&&例程名称: YSF1_HAL-037. LCD-液晶显示
&&******************************************************************************
&&* 说明:
&&* 本例程配套硬石stm32开发板YS-F1Pro使用。
&&* 淘宝:
&&* 论坛:
&&* 版权归硬石嵌入式开发团队所有,请勿商用。
&&******************************************************************************
【1】例程简介
&&FSMC:可变静态存储控制器,是STM32系列采用的一种新型的存储器扩展技术。一般可以用FSMC
接口与液晶驱动IC连接,实现数据交换。YS-F1Pro预留16bit的FSMC液晶接口,我们同时提供了
3.5寸TFT液晶模组供选购,该模组的液晶驱动IC型号为ILI9488。
&&本例程实现液晶模组显示和测试。
【2】跳线帽情况
******* 为保证例程正常运行,必须插入以下跳线帽 **********
丝印编号& &&&IO端口& && &目标功能引脚& && &&&出厂默认设置
&&JP1& && &&&PA10& && &&&TXD(CH340G)& && && & 已接入
&&JP2& && &&&PA9& && && &RXD(CH340G)& && && & 已接入
【3】操作及现象
把3.5寸TFT液晶模组插入开发板中间液晶接口上,使用开发板配套的MINI USB线连接到开发板标
示“调试串口”字样的MIMI USB接口(需要安装驱动),在电脑端打开串口调试助手工具,设置参
数为-N-1。下载完程序之后,在串口调试助手窗口可接收到信息,同时液晶屏幕亮起来,
显示为蓝色,等一会循环随机变化显示颜色。
/******************* (C) COPYRIGHT
硬石嵌入式开发团队 *****END OF FILE****/
CubeMX_1.jpg (137.98 KB, 下载次数: 4)
08:58 上传
CubeMX_2.jpg (107.12 KB, 下载次数: 1)
08:59 上传
CubeMX_3.jpg (139.51 KB, 下载次数: 3)
08:59 上传
CubeMX_4.jpg (106.71 KB, 下载次数: 2)
08:59 上传
CubeMX_5.jpg (105.13 KB, 下载次数: 2)
08:59 上传
CubeMX_6.jpg (109.45 KB, 下载次数: 2)
08:59 上传
bsp_lcd.h文件内容
#ifndef __BSP_LCD_H__
#define& && &&&__BSP_LCD_H__
/* 包含头文件 ----------------------------------------------------------------*/
#include &stm32f1xx_hal.h&
/* 类型定义 ------------------------------------------------------------------*/
typedef enum
{
&&USB_FONT_16=16,
&&USB_FONT_24=24,
}USB_FONT_T
#define IS_USB_FONT(FONT)& && && &&&(((FONT) == USB_FONT_16) || ((FONT) == USB_FONT_24))
/* 宏定义 --------------------------------------------------------------------*/
/******************************************************************************
2^26 =0X = 64MB,每个 BANK 有4*64MB = 256MB
64MB:FSMC_Bank1_NORSRAM1:0X ~ 0X63FF FFFF
64MB:FSMC_Bank1_NORSRAM2:0X ~ 0X67FF FFFF
64MB:FSMC_Bank1_NORSRAM3:0X ~ 0X6BFF FFFF
64MB:FSMC_Bank1_NORSRAM4:0X6C00 0000 ~ 0X6FFF FFFF
选择BANK1-BORSRAM4 连接 TFT,地址范围为0X6C00 0000 ~ 0X6FFF FFFF
YS-F1P开发板选择 FSMC_A0 接LCD的DC(寄存器/数据选择)脚
寄存器基地址 = 0X6C00 0000
RAM基地址 = 0X6C00 0002 = 0X6C00 0000+(1&&(0+1))
如果电路设计时选择不同的地址线时,地址要重新计算&&
*******************************************************************************/
/******************************* ILI9488 显示屏的 FSMC 参数定义 ***************/
#define FSMC_LCD_CMD& && && && && && & ((uint32_t)0x6C000000)& && && && &//FSMC_Bank1_NORSRAM1用于LCD命令操作的地址
#define FSMC_LCD_DATA& && && && && && &((uint32_t)0x6C000002)& && &//FSMC_Bank1_NORSRAM1用于LCD数据操作的地址& && &
#define LCD_WRITE_CMD(x)& && && && && &*(__IO uint16_t *)FSMC_LCD_CMD&&= x
#define LCD_WRITE_DATA(x)& && && && &&&*(__IO uint16_t *)FSMC_LCD_DATA = x
#define LCD_READ_DATA()& && && && && & *(__IO uint16_t *)FSMC_LCD_DATA
#define FSMC_LCD_BANKx& && && && && &&&FSMC_NORSRAM_BANK4
/************************* ILI9488 显示屏8080通讯引脚定义 *********************/
#define FSMC_LCD_CS_GPIO_ClK_ENABLE()&&__HAL_RCC_GPIOG_CLK_ENABLE()
#define FSMC_LCD_CS_PORT& && && && && &GPIOG
#define FSMC_LCD_CS_PIN& && && && && & GPIO_PIN_12
#define FSMC_LCD_DC_GPIO_ClK_ENABLE()&&__HAL_RCC_GPIOF_CLK_ENABLE()
#define FSMC_LCD_DC_PORT& && && && && &GPIOF
#define FSMC_LCD_DC_PIN& && && && && & GPIO_PIN_0
#define FSMC_LCD_BK_GPIO_ClK_ENABLE()&&__HAL_RCC_GPIOF_CLK_ENABLE()& &
#define FSMC_LCD_BK_PORT& && && && && &GPIOF
#define FSMC_LCD_BK_PIN& && && && && & GPIO_PIN_10
#define LCD_BK_ON()& && && && && && &&&HAL_GPIO_WritePin(FSMC_LCD_BK_PORT, FSMC_LCD_BK_PIN, GPIO_PIN_SET);
#define LCD_BK_OFF()& && && && && && & HAL_GPIO_WritePin(FSMC_LCD_BK_PORT, FSMC_LCD_BK_PIN, GPIO_PIN_RESET);
/**************** 显示方向选择,可选(1,2,3,4)四个方向 *************************/
#define LCD_DIRECTION& && && && && && &1&&// 原点在屏幕左上角 X*Y=320*480
//#define LCD_DIRECTION& && && && && && &2&&// 原点在屏幕右上角 X*Y=480*320
//#define LCD_DIRECTION& && && && && && &3&&// 原点在屏幕右下角 X*Y=320*480
//#define LCD_DIRECTION& && && && && && &4&&// 原点在屏幕左下角 X*Y=480*320
/******** ILI934 显示屏全屏默认(扫描方向为1时)最大宽度和最大高度*************/
#if (LCD_DIRECTION==1)||(LCD_DIRECTION==3)
#define LCD_DEFAULT_WIDTH& && && && && && && && & 320&&// X轴长度
#define LCD_DEFAULT_HEIGTH& && && && && && &480&&// Y轴长度
#define LCD_DEFAULT_WIDTH& && && && && && && && & 480&&// X轴长度
#define LCD_DEFAULT_HEIGTH& && && && && && &320&&// Y轴长度
/******************************* 定义 ILI9488 显示屏常用颜色 ********************************/
#define BACKGROUND& && && && && && && && && && && &WHITE& &&&//默认背景颜色
#define BLUE& && && && && && && && &&&(uint16_t)0x001F& && && &&&//蓝色
#define GREEN& && && && && && && && & (uint16_t)0x07E0& && && &&&//绿色
#define RED& && && && && && && && && &(uint16_t)0xF800& && && &&&//红色
#define CYAN& && && && && && && && &&&(uint16_t)0x07FF& && && &&&//蓝绿色,青色
#define MAGENTA& && && && && && && &&&(uint16_t)0xF81F& && && &&&//红紫色,洋红色
#define YELLOW& && && && && && && && &(uint16_t)0xFFE0& && && &&&//黄色
#define LIGHTBLUE& && && && && && && &(uint16_t)0x841F
#define LIGHTGREEN& && && && && && &&&(uint16_t)0x87F0
#define LIGHTRED& && && && && && && & (uint16_t)0xFC10
#define LIGHTCYAN& && && && && && && &(uint16_t)0x87FF
#define LIGHTMAGENTA& && && && && && &(uint16_t)0xFC1F
#define LIGHTYELLOW& && && && && && & (uint16_t)0xFFF0
#define DARKBLUE& && && && && && && & (uint16_t)0x0010
#define DARKGREEN& && && && && && && &(uint16_t)0x0400
#define DARKRED& && && && && && && &&&(uint16_t)0x8000
#define DARKCYAN& && && && && && && & (uint16_t)0x0410
#define DARKMAGENTA& && && && && && & (uint16_t)0x8010
#define DARKYELLOW& && && && && && &&&(uint16_t)0x8400
#define WHITE& && && && && && && && & (uint16_t)0xFFFF& && && &&&//白色
#define LIGHTGRAY& && && && && && && &(uint16_t)0xD69A
#define GRAY& && && && && && && && &&&(uint16_t)0x8410& && && &&&//灰色
#define DARKGRAY& && && && && && && & (uint16_t)0x4208
#define BLACK& && && && && && && && & (uint16_t)0x0000& && && &&&//黑色
#define BROWN& && && && && && && && & (uint16_t)0xA145
#define ORANGE& && && && && && && && &(uint16_t)0xFD20
/* 扩展变量 ------------------------------------------------------------------*/
extern SRAM_HandleTypeD
/* 函数声明 ------------------------------------------------------------------*/
uint32_t BSP_LCD_Init(void);
void LCD_SetDirection(uint8_t ucOtion);
void LCD_OpenWindow(uint16_t usX,uint16_t usY,uint16_t usWidth,uint16_t usHeight);
void LCD_Clear(uint16_t usX,uint16_t usY,uint16_t usWidth,uint16_t usHeight,uint16_t usColor);
void LCD_SetPointPixel(uint16_t usX,uint16_t usY,uint16_t usColor);
uint16_t LCD_GetPointPixel(uint16_t usX,uint16_t usY);
void LCD_DrawLine(uint16_t usX1,uint16_t usY1,uint16_t usX2,uint16_t usY2,uint16_t usColor);
void LCD_DrawRectangle(uint16_t usX_Start,uint16_t usY_Start, uint16_t usWidth,uint16_t usHeight,uint16_t usColor,uint8_t ucFilled);
void LCD_DrawCircle(uint16_t usX_Center,uint16_t usY_Center,uint16_t usRadius,uint16_t usColor,uint8_t ucFilled);
void LCD_DispChar_EN(uint16_t usX,uint16_t usY,const char cChar,uint16_t usColor_Background,uint16_t usColor_Foreground,USB_FONT_Typdef font);
void LCD_DispString_EN(uint16_t usX,uint16_t usY,const char *pStr,uint16_t usColor_Background,uint16_t usColor_Foreground,USB_FONT_Typdef font);
#endif /* __BSP_LCD_H__ */
/******************* (C) COPYRIGHT
硬石嵌入式开发团队 *****END OF FILE****复制代码
串口调试助手截图.jpg (63.77 KB, 下载次数: 2)
08:59 上传
工程师职场
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司如何使用STM32的FSMC接口驱动LCD屏
资源大小:1413KB资源积分:1分
下载次数:上传时间:
本实验向大家介绍如何使用STM32的FSMC接口驱动LCD屏,及使用触摸屏控制器检测触点坐标。
下载资料需要,并消耗一定积分。
大家都在下载
上传者:上传者:上传者:上传者:上传者:上传者:
积分不够...多谢分享你好,要这份资料但是积分不够,能否分享一下,不胜感激。邮箱 下来看看!!!!!!!!为什么都要积分啊?我正好需要这个,来学习一下
其他分享者资料网站已改版,请使用新地址访问:
LCD_FSMC STM32的 驱动的LCD代码,LCD IC为ILI9341,实现的功能包括了画点、画线 圆、 SCM 单片机开发 259万源代码下载-
&文件名称: LCD_FSMC& & [
& & & & &&]
&&所属分类:
&&开发工具: C-C++
&&文件大小: 9 KB
&&上传时间:
&&下载次数: 166
&&提 供 者:
&详细说明:STM32的FSMC驱动的LCD代码,LCD驱动IC为ILI9341,实现的功能包括了画点、画线、画圆、画矩形、显示图片、显示字符和显示汉字等。-The STM32 FSMC driven LCD code, LCD driver IC is ILI9341, functions implemented include painting, drawing a line, circle, draw a rectangle, display pictures, display characters and display Chinese characters.
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&LCD_FSMC&&........\ASCII24X12.h&&........\HZ24X24.h&&........\lcd.c&&........\lcd.h
&[]:很好,推荐下载&[]:纯粹是垃圾&[]:很好,推荐下载&[]:一般,勉强可用
&近期下载过的用户:
&&&&&&&&&&&&&&&&&&&&&[]
&相关搜索:
&输入关键字,在本站259万海量源码库中尽情搜索:
&[] - stm32f103 interface driver ILI9341
&[] - 液晶ILI9341驱动,可以显示时钟,24小时制,断电依然工作
&[] - 基于s3c2440 LCD屏幕驱动开发,可以显示图片,汉字,ASCII,画圆,直线,矩形等功能,开发环境是ADS1.2,屏幕为320x240 3.5寸
&[] - Proteus单片机仿真实例 有交通灯 数字电压表
LCD滚动显示汉字 播放音乐优质资源
&[] - SSD1963 driwer for STM32 an uCOS GUI
&[] - STM32驱动5110程序,内有写单个字符,汉字,字符串,画点,线,等函数,编译后改变引脚直接可用
&[] - 3.2寸真彩TFT液晶触摸屏,320*240像素,26万色,i8080 16位并行接口,带转接板及触控芯片,可以直接用AVR、51、PIC、dsPIC、ARM7、STM32等单片机驱动。
&[] - stm32 显示图片 彩屏 240X320
图片取了模的
&[] - STM32所有开发例子程序.RAR
8个led闪烁
注意:接跳线D1_CS, D2_CS,
液晶上显示英文字符
液晶上显示汉字
&[] - TFT驱动程序(基于ILI9341),包括画线,画点,画矩形,显示汉字,字符,数据等。请教一个STM32F103VE用FSMC驱动LCD的问题_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
请教一个STM32F103VE用FSMC驱动LCD的问题
我有更好的答案
说出你的问题。或者百度搜搜锐显科技,他们有例程。
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包

我要回帖

更多关于 led显示屏驱动 的文章

 

随机推荐