STM32F103正点原子学习笔记系列 您所在的位置:网站首页 华硕主板h系列和b系列哪个好 STM32F103正点原子学习笔记系列

STM32F103正点原子学习笔记系列

2023-04-02 13:54| 来源: 网络整理| 查看: 265

1.显示器分类图1 显示器分类(1)LCD简介

Liquid Crystal Display——液晶显示器:玻璃基板、背光、驱动IC等组成全彩LCD

低成本——几块钱高解析度——500ppi(1英寸500像素点),显示细腻高对比度——1000:1响应速度快——1ms(2)LCD接口分类图2 接口分类

MCU接口自带SRAM,驱动简单

本人购买的是2.8寸的电阻式屏幕,采用ILI9341芯片,有多种通信接口

(3)三基色原理

红、绿、蓝——单片机常采用RGB565,有65536种色彩组合

2.LCD驱动原理

LCD驱动核心就是驱动LCD驱动芯片——ILI9341

8080时序——实现数据读写初始化——厂家提供,初始化特定屏幕,不可混用画点、读点函数(1)8080时序

之前的OLED已经有过,不再赘述,留一个简化代码展示逻辑:

图3 LCD读写数据操作的代码逻辑

3.LCD驱动芯片简介用于控制OCD的显示功能和效果。常见型号:ILI9341/ST7789。一般只需要6条基本指令即可操作(9341为例)

图4 驱动芯片重要命令(9341为例)

(1)读ID指令(0XD3)读取LCD型号,执行不同LCD初始化(主要用于兼容不同LCD)

图5 读命令各个参数代表含义

第一个指令是写指令,发出请求,发送D3(H代表HEX16进制);后四个指令为读操作,参数1为假读,参数2为0,参数3与参数4则表示芯片的具体参数。

(2)访问控制(0X36)

实现GRAM的读写方向控制MX,MY,MV:共同控制GRAM自增方向(扫描方向)——在D6,D7,D5位BGR位:可以控制RGB、BGR顺序——在D3位MY=MX=MV=0——从左到右,从上到下

(3)X坐标设置(0X2A)

4个参数——参数1、2设置SC:起始坐标;参数3、4设置EC:结束坐标。初始化之后,可以只发送SC,提高效率。2.8寸屏幕:0 11)); /*通过移位重新排列数据*/

(7)读点函数图7 读取数据以及rgb值代码逻辑

读取与之前的类似,区别是标红的数据输入输出;写操作就是r、g、b三个值的获取。

5.LCD基本驱动实现确定IO关系——LCD原理图、开发板液晶接口原理图,用于初始化初始化IO口初始化FSMC外设——有些芯片没有(如mini板)编写读写接口函数——8080时序编写LCD初始化函数编写LCD读点画点函数

6.编程实战1

主要的问题:

读取x、y坐标——x >> 8读取高八位;x & 0xff 读取低八位;ASCII字符与OLED一样

7.FSMC介绍FSMC简介

灵活的静态存储控制器:用于驱动SRAM,NOR FLASH,NAND FALSH以及PC卡类型的存储器。

配置好FSMC,定义一个指向地址的指针,即可对指针操作来修改存储器内容;可自动完成读写和数据访问

配置好可模拟时序,本实验中即FSMC模拟8080时序控制LCD

FSMC框图介绍图8 FSMC信号图

可以控制最多4个SRAM,通过FSMC_NE[]来进行片选;主要用到中间四个地址总线到写使能的功能;因为LCD采用类似异步通信、地址与数据线独立的SRAM控制方式。

使用FSMC驱动LCD:通过CPU由HADDR总线控制FSMC;FSMC的SRAM控制屏幕

FSMC时序介绍

有多种时序来控制外部存储器。

NOR/PSRAM产生的异步时序有五种,总体两类:模式1与拓展模式。拓展模式相对模式1读写时序时间参数可以不同。本实验选模式A

图9 不同模式对比

具体的模式A时序与8080时序对应可看下图:

图10 模式A与8080时序对照图FSMC地址映射

存储单元是映射到STM32的内部寻址空间的。吧外部存储器划分为四个256M字节的存储块。块1位NOR/PSRAM,块2、3为NAND闪存,块4位PC卡。存储块又分为4个区,每个区管理64M字节。本实验中选定块1片4。

图11 存储单元分区图

(1)HADDR与FSMC_A的关系

HADDR是转换到外部存储器的内部AHB总线。HADDR是字节地址,地址线与数据宽度相关。如LCD就是16位数据线。16位,左边=右边*2

图12 数据宽度16位时的映射图

(2)LCD的RS信号线与地址线关系

FSMC_A10连接RS线。高电平为数据,低电平为命令。LCD命令地址:0x6C000000,;数据地址:0x6C000800。

FSMC寄存器介绍

存储块1(NOR_FLASH/PSRAM),通过以下3个寄存器操作。

图13 三个重要寄存器图14 片选控制寄存器

EXTMOD:扩展模式使能位。读写时序不同需置1

WREN:写使能位。MWID[1:0]:数据总线宽度,00是8位,01是16位。10与11保留。

MTYP[1:0]:存储器类型,00表示SRAM、ROM,01是PSRAM,10是NOR FLASH,11保留。

MBKEN:存储块使能为,需置1

图15 写时序寄存器

ACCMOD[1:0]:访问模式,00为模式A

DATAST[7:0]:数据保持时间。=DATAST+1个HCLK时钟周期。最大为255。

对ILI9341,就是RD低电平持续时间,最小为355ns:F1的HCLK=1/72M=13.9ns,设为15(F1有问题,设为这个即可)。

ADDSET[3:0]:地址建立时间。=ADDSET+1个HCLK时钟周期。最大为15。F1设为0也满足超过90ns高电平,可设为1

未设置EXTMOD,读写模式共用。

图16 读时序寄存器

同理,ACCMOD设为00;DATAST可设为3,ADDSET可设为1。

DATAST[7:0]:就是WR低电平持续时间,最小为15ns。

ADDSET[3:0}:就是WR高电平持续时间,为15ns。

寄存器的组合说明:这几个寄存器是组合使用的,但是现在也已经被HAL库封装好了

FSMC相关HAL库函数

HAL_StatusTypeDef HAL_SRAM_Init( SRAM_HandleTypeDef *hsram,

FSMC_NORSRAM_TinmingTypeDef *Timing,

FSMC_NORSRAM_TinmingTypeDef *ExtTiming)

这个初始化函数也会调用MspInit函数(在其中编写初始化的接口,如IO等)

图17 SRAM句柄结构体

Instance就是FSMC_NORSRAM_DEVICE;Extended就是FSMC_NORSRAM_EXTERNDEVICE。Init是最重要的。

图18 Init句柄结构体

对于本次实验,配置如下:

NSBank设为FSMC_NORSRAM_BANK4;

DataAddressMux设为FSMC_DATA_ADDRESS_MUX_DISABLE;

MemoryType设为FSMC_MEMORY_TYPE_SRAM;

MemoryDataWidth设为FSMC_NORSRAM_MEM_BUS_WIDTH_16;

WriteOperation设为FSMC_WRITE_OPERATION_ENABLE;

ExtendedMode设为FSMC_EXTENDED_MODE_ENABLE。

图19 SRAM设置时间长短的句柄结构体

其中,AddressSetupTime与DataSetupTime是写时序和读时序用到的;而AccessMode则需要设为FSMC_ACCESS_MODE_A。

8.编程实战2


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有