STM32F103正点原子学习笔记系列 | 您所在的位置:网站首页 › 华硕主板h系列和b系列哪个好 › STM32F103正点原子学习笔记系列 |
1.显示器分类 Liquid Crystal Display——液晶显示器:玻璃基板、背光、驱动IC等组成全彩LCD 低成本——几块钱高解析度——500ppi(1英寸500像素点),显示细腻高对比度——1000:1响应速度快——1ms(2)LCD接口分类MCU接口自带SRAM,驱动简单 本人购买的是2.8寸的电阻式屏幕,采用ILI9341芯片,有多种通信接口 (3)三基色原理红、绿、蓝——单片机常采用RGB565,有65536种色彩组合 2.LCD驱动原理LCD驱动核心就是驱动LCD驱动芯片——ILI9341 8080时序——实现数据读写初始化——厂家提供,初始化特定屏幕,不可混用画点、读点函数(1)8080时序之前的OLED已经有过,不再赘述,留一个简化代码展示逻辑: 3.LCD驱动芯片简介用于控制OCD的显示功能和效果。常见型号:ILI9341/ST7789。一般只需要6条基本指令即可操作(9341为例) (1)读ID指令(0XD3)读取LCD型号,执行不同LCD初始化(主要用于兼容不同LCD) 第一个指令是写指令,发出请求,发送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)读点函数读取与之前的类似,区别是标红的数据输入输出;写操作就是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框图介绍可以控制最多4个SRAM,通过FSMC_NE[]来进行片选;主要用到中间四个地址总线到写使能的功能;因为LCD采用类似异步通信、地址与数据线独立的SRAM控制方式。 使用FSMC驱动LCD:通过CPU由HADDR总线控制FSMC;FSMC的SRAM控制屏幕。 FSMC时序介绍有多种时序来控制外部存储器。 NOR/PSRAM产生的异步时序有五种,总体两类:模式1与拓展模式。拓展模式相对模式1读写时序时间参数可以不同。本实验选模式A。 具体的模式A时序与8080时序对应可看下图: 存储单元是映射到STM32的内部寻址空间的。吧外部存储器划分为四个256M字节的存储块。块1位NOR/PSRAM,块2、3为NAND闪存,块4位PC卡。存储块又分为4个区,每个区管理64M字节。本实验中选定块1片4。 (1)HADDR与FSMC_A的关系 HADDR是转换到外部存储器的内部AHB总线。HADDR是字节地址,地址线与数据宽度相关。如LCD就是16位数据线。16位,左边=右边*2。 (2)LCD的RS信号线与地址线关系 FSMC_A10连接RS线。高电平为数据,低电平为命令。LCD命令地址:0x6C000000,;数据地址:0x6C000800。 FSMC寄存器介绍存储块1(NOR_FLASH/PSRAM),通过以下3个寄存器操作。 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。 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,读写模式共用。 同理,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等) Instance就是FSMC_NORSRAM_DEVICE;Extended就是FSMC_NORSRAM_EXTERNDEVICE。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。 其中,AddressSetupTime与DataSetupTime是写时序和读时序用到的;而AccessMode则需要设为FSMC_ACCESS_MODE_A。 8.编程实战2 |
CopyRight 2018-2019 实验室设备网 版权所有 |