stm32 FSMC-TFTLCD显示

发布者:innovator8最新更新时间:2019-01-04 来源: eefocus关键字:stm32  FSMC-TFTLCD显示 手机看文章 扫描二维码
随时随地手机看文章

TFTLCD 

TFT液晶屏常用的通信模式主要有6800模式和8080模式,对于TFT彩屏通常都使用8080并口(简称80并口)模式


8080模式的读写时序其实跟LCD1602或者LCD12864的读写时序是差不多的。8080接口有5条基本的控制线和多条数据线数据线的数量主要看液晶屏使用的是几位模式,有8根、9根、16根、18根四种类型


1


FSMC 

FSMC模块能够与同步或异步存储器和16位PC存储器卡接口


将AHB传输信号转换到适当的外部设备协议 
满足访问外部设备的时序要求


所有的外部存储器共享控制器输出的地址、数据和控制信号,每个外部设备可以通过一个唯一的片选信号加以区分。 FSMC在任一时刻只访问一个外部设备


STM32通过FSMC可以与SRAM、ROM、PSRAM、NOR Flash和NAND Flash等存储器的引脚直接相连


外部设备地址映像 

从FSMC的角度看,把外部存储器划分为固定大小为256M字节的四个存储块


1


模式A读写操作 

以模式A举例


模式A读操作: 

1


模式A写操作: 

2


FSMC配置步骤

1.使能对应引脚GPIO时钟 
2.配置GPIO引脚模式 
3.使能FSMC时钟 
4.FSMC初始化 
5.存储器块使能 
6.应用TFTLCD库函数,写字符、数字等


举例 

FSMC_NORSRAMTimingInitTypeDef: 

1 
2


FSMC_NORSRAMInitTypeDef: 

1 
2 
3


void TFTLCD_gpio_init()

{

    GPIO_InitTypeDef gpiod = 

    {

        GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15,

        GPIO_Speed_50MHz,

        GPIO_Mode_AF_PP

    };  


    GPIO_InitTypeDef gpioe = 

    {

        GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15,

        GPIO_Speed_50MHz,

        GPIO_Mode_AF_PP

    };  


    GPIO_InitTypeDef gpiog = 

    {

        GPIO_Pin_0 | GPIO_Pin_12,

        GPIO_Speed_50MHz,

        GPIO_Mode_AF_PP

    };  


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOG, ENABLE);


    GPIO_Init(GPIOD, &gpiod);

    GPIO_Init(GPIOE, &gpioe);

    GPIO_Init(GPIOG, &gpiog);

}


void FSMC_init()

{

    FSMC_NORSRAMInitTypeDef fsmc = {0};

    FSMC_NORSRAMTimingInitTypeDef FSMC_ReadWriteTimingStruct = {0};

    FSMC_NORSRAMTimingInitTypeDef FSMC_WriteTimingStruct = {0};


    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);


    FSMC_ReadWriteTimingStruct.FSMC_AddressSetupTime = 0x01; //ADDSET建立时间=2个HCLK时钟周期

    FSMC_ReadWriteTimingStruct.FSMC_AddressHoldTime = 0x00; //模式A未用到

    FSMC_ReadWriteTimingStruct.FSMC_DataSetupTime = 0x0f; //DATAST保持时间=16个HCLK时钟周期

    FSMC_ReadWriteTimingStruct.FSMC_BusTurnAroundDuration = 0x00;

    FSMC_ReadWriteTimingStruct.FSMC_CLKDivision = 0x00;

    FSMC_ReadWriteTimingStruct.FSMC_DataLatency = 0x00;

    FSMC_ReadWriteTimingStruct.FSMC_AccessMode = FSMC_AccessMode_A; //访问模式A


    FSMC_WriteTimingStruct.FSMC_AddressSetupTime = 0x0f;     //ADDSET建立时间=16个HCLK时钟周期

    FSMC_WriteTimingStruct.FSMC_AddressHoldTime = 0x0f; 

    FSMC_WriteTimingStruct.FSMC_DataSetupTime = 0x05;

    FSMC_WriteTimingStruct.FSMC_BusTurnAroundDuration = 0x00;

    FSMC_WriteTimingStruct.FSMC_CLKDivision = 0x00;

    FSMC_WriteTimingStruct.FSMC_DataLatency = 0x00;

    FSMC_WriteTimingStruct.FSMC_AccessMode = FSMC_AccessMode_A; 


    fsmc.FSMC_Bank = FSMC_Bank1_NORSRAM4;

    fsmc.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;

    fsmc.FSMC_MemoryType = FSMC_MemoryType_SRAM;

    fsmc.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;

    fsmc.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;

    fsmc.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;

    fsmc.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;

    fsmc.FSMC_WrapMode = FSMC_WrapMode_Disable;

    fsmc.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;

    fsmc.FSMC_WriteOperation = FSMC_WriteOperation_Enable;

    fsmc.FSMC_WaitSignal = FSMC_WaitSignal_Disable;

    fsmc.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable; //扩展模式使能

    fsmc.FSMC_WriteBurst = FSMC_WriteBurst_Disable;

    fsmc.FSMC_ReadWriteTimingStruct = &FSMC_ReadWriteTimingStruct;

    fsmc.FSMC_WriteTimingStruct = &FSMC_WriteTimingStruct;

    FSMC_NORSRAMInit(&fsmc);


    FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE); //使能存储块1 NOR/PSRAM 4

}


关键字:stm32  FSMC-TFTLCD显示 引用地址:stm32 FSMC-TFTLCD显示

上一篇:stm32 SPI-FLASH W25Q64
下一篇:stm32 RS485 SP3485

推荐阅读最新更新时间:2024-03-16 16:21

一款基于stm32的毕业设计方案
  设计选用STM32单片机作控制器,设计温度单反馈的控制系统,对电加热水器内水的温度进行控制。通过PT100温度传感器实现对水温信号的采集,并利用模拟量前向通道来对水温信号进行处理。利用STM32单片机进行控制输出PWM信号,用此信号控制接触器进而控制电加热水器的电源通断,最终实现对水温的控制。同时用组态软件设计监控界面来实现对水温的控制显示。通过对此课题的设计,能够使自动化的学生对工业过程控制对象具有更进一步的了解,同时熟练掌握自动化控制系统的设计流程,为以后的工作学习打下坚实基础。   一、控制系统硬件设计   1、控制系统硬件总体设计   温度是一个很重要的变量,需要对其进行准确地控制。温度控制系统常用来保持温度恒定或者使
[单片机]
一款基于<font color='red'>stm32</font>的毕业设计方案
STM32固件解密步骤
方法1:代码解密 FLASH_OBProgramInitTypeDef OBInit; __HAL_FLASH_PREFETCH_BUFFER_DISABLE(); HAL_FLASHEx_OBGetConfig(&OBInit); if(OBInit.RDPLevel != OB_RDP_LEVEL_0) { OBInit.OptionType = OPTIONBYTE_RDP; OBInit.RDPLevel = OB_RDP_LEVEL_0; (void)HAL_FLASH_Unlock(); (void)HAL_FLASH_OB_Unlock(); (void)HAL_FLASHEx_OBProgram(&OBInit
[单片机]
stm32---ADXL345
ADXL345是一款三轴加速度传感器,广泛用于手机、游戏手柄等设计。 ADXL 支持标准的 I2C 或 SPI 数字接口,自带 32 级 FIFO 存储,并且内 部有多种运动状态检测和灵活的中断方式等特性,常用I2C接口 检测轴 初始化步骤 1)上电 2)等待 1.1ms 3)初始化命令序列 4)结束 其中上电这个动作发生在开发板第一次上电的时候,在上电之后,等待 1.1ms 左右,就可以开始发送初始化序列了,初始化序列一结束, ADXL345 就 开始正常工作了 stm里的硬件电路 adxl345.c #include adxl345.h #include iic.h #include math.h #
[单片机]
stm32---ADXL345
【STM32CubeMX】12,STM32之SPI串行FLASH
1,野火的自带版本讲的还不错,综合多方的资料看比较好 (1) SS ( Slave Select):从设备选择信号线,常称为片选信号线,也称为 NSS、CS,以下用 NSS 表示。当有多个 SPI 从设备与 SPI 主机相连时,设备的其它信号线 SCK、MOSI及 MISO 同时并联到相同的 SPI 总线上,即无论有多少个从设备,都共同只使用这 3 条总线;而每个从设备都有独立的这一条 NSS 信号线,本信号线独占主机的一个引脚,即有多少个从设备,就有多少条片选信号线。I2C 协议中通过设备地址来寻址、选中总线上的某个设备并与其进行通讯;而 SPI 协议中没有设备地址,它使用 NSS 信号线来寻址,当主机要选择从设备时,把该从
[单片机]
【STM32CubeMX】12,<font color='red'>STM32</font>之SPI串行FLASH
stm32 串口通信数据乱码
最近在写stm32的标准库的串口通讯程序,本来很简单的串口通讯,却硬生生被上位机接收到乱码的问题折磨了好久,反复百度了好几次,始终没搜到正确解决方法,不过最后终于在https://www.eeworld.com.cn/mcu/2018/ic-news081240692.html这篇帖子上找到了答案。虽然最后问题和这位大佬不太一样,但是我也是它列出的几个情况之一——外部时钟问题。正如这位大佬所说,串口通信用的是外部时钟,而在stm32f10x.h/stm32f4xx.h中的HSE的设置值HSE_VALUE默认是25MHz。因为官方的开发板是用的25MHz,但是有些开发板用的是8MHz,所以这个地方没改的话就可能出现乱码。我把这里一改,
[单片机]
<font color='red'>stm32</font> 串口通信数据乱码
说一说STM32启动过程
STM32上电后是怎么启动的? main函数之前单片机都做了些什么? 带着这些疑问我们开始进入游戏。。。。。 首先,开局一张图,过程全靠编,如有说错的地方望能指正 启动大致流程 1- 上电启动或者硬件复位 2- 单片机从0x00地址开始执行程序,在执行程序前,单片机会根据BOOT引脚设置,将对应的存储器重映射到0x00处,如设置为BOOT0 = 0 ,BOOT1 = X 时,单片机将内部FLASH映射到0x00处,即将0X8000 0000地址映射到0X00处,单片机从FLASH中的程序启动,其他启动方式原理类似,相应的BOOT引脚设置如图 3- 跳转到存储有代码的存储介质(如FLASH)以后,单片机首先找到的是一
[单片机]
stm32使用PWM时,关闭PWM引脚会出现高电平解决方案
现在使用TIM3来产生PWM波形,并通过软件打开/关闭PWM以实现调制波形。做法是: 打开:TIM_Cmd(TIM3, ENABLE); 关闭:TIM_Cmd(TIM3, DISABLE); 跟踪到TIM_Cmd之后,发现直接操作寄存器就可以了:TIMx- CR1 |= CR1_CEN_Set; 这个问题算解决了。 但是PWM关闭后,管脚电平是高电平,这不是我需要的……需要的是低电平。尝试关闭PWM后,加一行GPIO_ResetBits(GPIOC, GPIO_Pin_6);以把管脚设置为低电平。测试代码: while(1) { ENABLE_PWM(); Delay_ms(10);//延时若干ms DISA
[单片机]
Event Recoder调试组件在stm32上的使用
本文目标:Event_Recoder调试组件在stm32上的使用 按照本文的描述,应该可以在你所处的硬件上跑通代码。 先决条件:装有编译和集成的开发环境,比如:Keil uVision5。 板子硬件要求:无,属于调试功能。 起源 因为做产品开发,设计东西有时候考虑得多,mcu的并没有多余的串口供使用调试,在调试一些初期进行验证时,必要的调试的打印信息是需要的。 Event Recoder调试组件简介 嵌入式的Event_Recoder调试组件是一种可以在MDK开发环境下使用的高级调试工具,它可以记录软件运行的一些标志信息,并以图形化的形式显示出来。它可以帮助你了解和分析内部操作,支持Keil RTX操作系统调试以及MDK自带的
[单片机]
Event Recoder调试组件在<font color='red'>stm32</font>上的使用
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved