STM32入门学习笔记之TFTLCD显示实验3

发布者:平安宁静最新更新时间:2024-04-29 来源: elecfans关键字:STM32  TFTLCD  显示实验 手机看文章 扫描二维码
随时随地手机看文章

(3)SRAM/NOR 闪存写时序寄存器:FSMC_BWTRx(x=1~4)

31302928272625242322212019181716
-ACCMODDATLATCLKDIVBUSTURN










1514131211109876543210
DATASTADDHLDADDSET












Bit 29~Bit 28:访问模式(这2位只在FSMC_BCRx寄存器的EXTMOD位为1时起作用)

00:访问模式A


   01:访问模式B


   10:访问模式C


   11:访问模式D

Bit 27~Bit 24:数据保持时间


0000:第一个数据的保持时间为2个CLK时钟周期


   ……


   1111:第一个数据的保持时间为17个CLK时钟周期(默认)

Bit 23~Bit 20:时钟分频比


0000:保留


   0001:1个CLK周期=2个HCLK周期


   0010:1个CLK周期=3个HCLK周期


   ……


   1111:1个CLK周期=16个HCLK周期(默认)

Bit 19~Bit 16:总线恢复时间


0000:总线恢复时间=1个HCLK时钟周期


   ……


   1111:总线恢复时间=16个HCLK时钟周期(默认)

Bit 15~Bit 8:数据保持时间


00000000:保留


   00000001:DATAST保持时间=2个HCLK时钟周期


   00000010:DATAST保持时间=3个HCLK时钟周期


   ……


   11111111:DATAST保持时间=256个HCLK时钟周期(默认)

Bit 7~Bit 4:地址保持时间


0000:ADDHLD保持时间=1个HCLK时钟周期


   ……


   1111:ADDHLD保持时间=16个HCLK时钟周期(默认)

Bit 3~Bit 0:地址建立时间


0000:ADDSET建立时间=1个HCLK时钟周期


   ……


   1111:ADDSET建立时间=16个HCLK时钟周期(默认)

10.4 实验例程

现有一块驱动芯片为5510的LCD驱动芯片,厂家提供初始化例程,使用STM32的FSMC功能驱动屏幕显示字符串,连接关系如下表所示。


片选CS:FSMC_NE4


写控制WR:FSMC_NWE


读控制RD:FSMC_NOE


数据命令控制RS:FSMC_A6


背光:PB0


16位并行数据:FSMC_D15~FSMC_D0


(1)创建lcd.h,并输入以下代码。


#ifndef _LCD_H_

#define _LCD_H_

#include 'sys.h'

//LCD地址结构体

typedef struct

{

  vu16 LCD_REG ;

  vu16 LCD_RAM ;

}LCD_TypeDef ;

#define LCD_BASE    ( ( u32 )( 0x6C000000|0x000007FE ))

#define LCD        ( ( LCD_TypeDef* ) LCD_BASE )

//LCD重要参数集

typedef struct  

{                        

  u16 width ;                    //LCD宽度

  u16 height ;                    //LCD高度

  u8 dir ;                      //横屏竖屏控制

  u16 wramcmd ;                  //开始写gram指令

  u16 setxcmd ;                    //设置x坐标指令

  u16 setycmd ;                    //设置y坐标指令 

}_lcd_dev ;

extern _lcd_dev lcddev ;                  //管理LCD重要参数

//LCD的画笔颜色和背景色

extern u16 POINT_COLOR ;                  //画笔颜色

extern u16 BACK_COLOR ;                  //背景颜色

#define  LCD_LED PBout(0)                  //LCD背光

//画笔颜色

#define WHITE            0xFFFF

#define BLACK            0x0000    

#define BLUE            0x001F  

#define BRED             0XF81F

#define GRED        0XFFE0

#define GBLUE       0X07FF

#define RED              0xF800

#define MAGENTA          0xF81F

#define GREEN            0x07E0

#define CYAN             0x7FFF

#define YELLOW           0xFFE0

#define BROWN        0XBC40              //棕色

#define BRRED        0XFC07              //棕红色

#define GRAY         0X8430              //灰色

void LCD_Init( void ) ;                    //初始化

void LCD_Clear( u16 Color ) ;                //清屏

void LCD_Fast_DrawPoint( u16 x, u16 y, u16 color ) ;      //快速画点

void LCD_ShowString( u16 x, u16 y, u8 *p ) ;          //显示一个字符串

#endif

注1 :关于LCD_BASE地址的定义部分,其中0x6C000000代表FSMC的SRAM块4的开始地址,0x000007FE则代表A10的偏移地址,7FE H换算成2进制就是01111111 1110,由于FSMC在16位数据总线状态下,地址需要右移一个字节,所以映射到A10A0上的地址数据就是011 1111 1111,A0恰好就是0,如果此时16位地址加1,对应的8位地址就是加2,也就是7FE+2=800,映射到A10A0上的地址就是100 0000 0000,即A10变为了1,这就实现了通过A10来控制RS的效果。我们定义的结构体也可以发现,LCD_REG对应的就是0x6C000000+0x000007FE,而LCD_RAM对应的就变成了0x6C000000+0x000007FE+0x00000002。


注2 :结构体_lcd_dev则定义了一些LCD参数,比如高度,宽度,设置命令,可以通过改变宏定义的方式来改变控制器的输出。


注3 :颜色数据。


目前的颜色数据都有RGB888,RGB666和RGB565格式,代表了R,G和B的分辨率,其中RGB888代表红,绿,蓝都是8位,可以表示16777216种颜色,但是受制于TFTLCD的数据总线宽度只有16位,所以只能够采用RGB565模式,这种模式代表红色和蓝色都是5位分辨率,绿色6位分辨率,这种模式中可以最多表示65536种颜色。文件中宏定义的颜色数据就是根据RGB888格式转换而来,一般都是放弃低2位和低1位,例如RGB888模式中某种颜色为11011110 11011110 11011111,那么转换为RGB565模式就变成了11011 110111 11011,换成16进制就是1101 1110 1111 1011=DEFB H。


关键字:STM32  TFTLCD  显示实验 引用地址:STM32入门学习笔记之TFTLCD显示实验3

上一篇:STM32入门学习笔记之TFTLCD显示实验4
下一篇:STM32入门学习笔记之PWM输出实验

推荐阅读最新更新时间:2024-11-10 14:42

STM32使用FreeRTOS中的链表创建节点与列表项
使用了STM32F103的FreeRTOS库来创建一个列表,其实FreeRTOS的list中链表是双向的循环链表,为了简单介绍,我直接说是列表了。 芯片使用的是GD32F103CBT6,该芯片兼容ST的库,不影响使用效果。 以下代码不全,仅提供思路,如有不足,请给我留言。 第一步 先定义变量,初始化列表及列表项 nodeDevice node_t; //节点数据 nodeDevice * pNode; //节点指针 xList list_t; //列表 #define pList ((xList *) &list_t) //列表指针 xListItem item_t; //列表项 xListItem * p
[单片机]
STM32-(24):PWM基础
PWM是Pulse Width Modulation的缩写,即脉冲宽度调制。其通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。 PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制,用来对一个具体模拟信号的电平进行编码。等效的实现是基于采样定理中的一个重要的结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。冲量即指窄脉冲的面积。这里所说的效果基本相同,是指该环节的输出响应波形基本相同。 如把各输出波形用傅里叶变换分析,则它们的低频段特性非常接近,仅在高频段略有差异。 为了实现a的效果,可以通过b这种正弦波去模拟达到这种效果。(通过每一段的面积相同
[单片机]
STM32-(24):PWM基础
如何快速成为点灯大师?
学习嵌入式,最经典的第一个实验就是点亮一颗 LED 灯。别小看这个实验,从我辅导的学员来看,不少初学者连这么简单的案例都做不出来。 想要成这一名优秀的点灯大师,第一步就是要学会 STM32 最基础的外设——GPIO。 1. 什么是GPIO? 1.1 定义 GPIO是通用输入输出(general-purpose input/output)端口的简称,简单来说就是STM32可控制的引脚STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。 这是比较正式的说法,是不是听得一愣一愣的? 再简单一点,就是芯片里拉出一堆引脚,这些引脚在我们的控制下可以输出高电平/低电平,或者可以通过这些引脚向芯片
[单片机]
如何快速成为点灯大师?
STM32 - GPIO 的位带操作
我采用得是STM32F10RC 参考得是STM32普中科技的给出得例子:https://www.bilibili.com/video/av30149282/?p=45(这里给出网址) https://blog.csdn.net/bulebin/article/details/73730141 这个博文还可以 ps:在15中 是个hi用sbit 进行位带 1、位带介绍 什么是位带呢? stm32 中没有sbit, 所以我们采用的是位带别名区 (1) 通过访问Bit band Alias 他 来控制 bit Band ALias 的位 (2)位带区和位带别名区的转换 别名区地址=外设微带别名区的基地址
[单片机]
<font color='red'>STM32</font> - GPIO 的位带操作
STM32的系统时钟与SystemInit函数
以上在stm32f4xx中文参考手册的截图 SYSCLK时钟的来源有3个分别是 HSI HSE PLL 我们主要的时钟有 低速的内部时钟 LSI RC震荡产生 32KHZ 低速的外部时钟 LSE 32.768KHZ晶振 高速的内部时钟 HSI RC震荡16MHZ 高速的外部时钟 HSE 一般为8Mhz 一般情况我们的SYSCLK时钟选择PLLCLK 看看我们的函数是怎么操作时钟分配的! 启动文件首先先配置时钟然后在运行用户主函数,打开SystemInit函数 ** * @brief Setup
[单片机]
<font color='red'>STM32</font>的系统时钟与SystemInit函数
STM32基于固件库学习笔记(11)RTC实时时钟
实时时钟(RTC) 小容量产品是指闪存存储器容量在16K至32K字节之间的STM32F101xx、STM32F102xx和STM32F103xx微控制器。 中容量产品是指闪存存储器容量在64K至128K字节之间的STM32F101xx、STM32F102xx和STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 主要特性 ● 可编程的预分频系数:分频系数最高为20 。 ● 32位的可编程计数器,可用于较长时间段的测量。 ● 2个分离的时钟:用于APB1接口的PC
[单片机]
STM32网络丢包问题分析
1. 测试环境说明 硬件平台:NUCLEO-F767ZI 开发板(STM32F7,Cortex-M7,216MHz,2MB Flash,512KB SRAM) 操作系统:FreeRTOS v9.0.0(CMSIS-RTOS v1.02) TCP/IP协议栈:LwIP v2.0.0 这里所描述的网络丢包问题的测试程序,是使用 STM32CubeMX 工具(库版本为 STM32Cube_FW_F7_V1.7.0 ),基于 FreeRTOS 和 LwIP 实现的一个以太网 Demo 程序。协议栈已实现 ICMP 包的 echo 功能(即可以通过其他以太网设备 ping 开发板),此外,我们在该程序框架之上添加了 tcp_echo
[单片机]
<font color='red'>STM32</font>网络丢包问题分析
STM32简单的LED流水灯程序
//0x4002 1000 - 0x4002 13FF 复位和时钟控制(RCC) #define RCC_BASE 0x40021000 #define RCC_APB2ENR (RCC_BASE+0x18) //LED接在GPIOF上,是APB2上的外设,是RCC_APB2ENR寄存器的第7位 //APB20x4001 1c00 GPIO端口F #define GPIOF_BASE 0x40011c00 #define GPIOF_CHL (0x000+GPIOF_BASE) #define GPIOF_CHR (0x004+GPIOF_BASE) #defin
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多每日新闻

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved