OLED:有机发光二极管,又称为有机激光显示
ASCII字符:http://c.biancheng.net/c/ascii/
内码:计算机使用的二进制字符编码,就叫内码,简称编码。
将字符显示在OLED上:
1,显示字符,必须先有其点阵数据,点阵数据的集合,叫做字库
2,单片机根据点阵数据按取模方向进行描点还原,就能显示字符
3,ASCII字符宽度 = 汉字宽度的一半
ASCII字库制作:PCtoLCD2002.exe软件
OLED基本驱动实现:
1,确定IO连接关系:开发板OLED接口原理图
2,初始化IO口
3,编写8080接口函数:oled_wr_byte
4,编写OLED初始化函数:oled_init
5,编写OLED画点函数:oled_draw_point
内存保护单元:MPU
MPU的功能:
1.设置不同存储区域的存储器访问权限(特权级、用户级)
2.设置存储器(内存和外设)属性(可缓存、可缓冲、可共享)
设置内存区域的访问权限:
MPU_REGION_NO_ACCESS:无访问(特权级&用户级都不可访问)
MPU_REGION_PRIV_RW:仅支持特权级读写访问
MPU_REGION_PRIV_RW_URO:禁止用户写访问(特权可读写访问)
MPU_REGION_FULL_ACCESS:全访问(特权级&用户级都可访问)
MPU_REGION_PRIV_RO:仅支持特权读访问
MPU_REGION_PRIV_RO_URO:只读(特权&用户都不可以写)
配置内存区域的访问属性
三种内存类型:
Normal memory(ROM、FLASH、SRAM):CPU以最高效的方式加载和存储字节、半字和字, CPU对于这种内存区的加载或存储不一定要按照程序代码的顺序执行
Device memory(外设):加载和存储要严格按照次序进行,确保寄存器按照正确顺序设置
Strongly ordered memory:程序完全按照代码顺序执行,CPU会等待当前加载存储执行完毕后才执行下一条指令,导致性能下降。
Cache(高级缓存)是提升STM32性能的关键一步
Cache支持4种基本操作:1,使能;2,禁止; 3,清空; 4,无效化
读操作:CPU要读取的SRAM区数据在Cache中已经加载好,叫读命中(Cache hit);如果Cache里面没有,这就是读Cache Miss。
写操作:CPU要写的SRAM区数据在Cache中已经开辟了对应的区域,这就叫写命中(Cache hit);如果Cache里面没有开辟对应的区域怎么办,这就是所谓的写Cache Miss。
Cache hit:直接从cache中读出数据即可
Cache miss:
两种处理方式:
read through:直接从内存中读出,不用cache
read allocate:把数据从内存加载到cache,再从cache读取
MPU基本配置步骤
1、禁止MPU:void HAL_MPU_Disable();
2、配置某个区域的MPU保护参数:通过调用HAL_MPU_ConfigRegion()函数去设置
3、使能MPU:void HAL_MPU_Enable();
4、编写MemManage中断服务函数:void MemManage_Handler(void)
LCD接口分类
MCU(≤800*480):带SRAM,无需频繁刷新,无需大内存,驱动简单
RGB(≤1280*800):不带SRAM,需要实时刷新,需要大内存,驱动稍微复杂
MIPI(4K):不带SRAM,支持分辨率高,省电,大部分手机屏用此接口
LCD驱动原理:驱动LCD驱动芯片
LCD驱动基本知识:
1,8080时序,LCD驱动芯片一般使用8080时序控制,实现数据写入/读取
2,初始化序列(数组),屏厂提供,用于初始化特定屏幕,不同屏幕厂家不完全相同!
3,画点函数、读点函数(非必需),基于这两个函数可以实现各种绘图功能!
8080并口模式
8个数据引脚和5个控制引脚
引脚说明:
1.CS(片选):选中器件,低电平有效,先选中,后操作
2.WR(写):写信号,上升沿有效,用于数据/命令写入
3.RD(读):读信号,上升沿有效,用于数据/命令读取
4.RS(数据/命令):表示当前是读写数据还是命令,也叫DC信号
5.D[15:0](数据线):双向数据线,可以写入/读取驱动IC数据
英特尔总线:并口总线时序,常用于屏幕驱动IC的访问
8080时序--写时序
在WR上升沿,使数据写入到SSD1306里
设置DC引脚电平:数据类型(高:数据;低:命令)->CS引脚拉低:选中SSD1306->WR拉低:写数据->准备数据:数据线->WR拉高:数据写到SSD1306->释放CS->释放DC引脚
LCD驱动芯片简介:6条指令即可完成对LCD的基本使用
1.0XD3(读ID):用于读取LCD控制器的ID,区分型号用
2.0X36(访问控制):设置GRAM读写方向,控制显示方向
3.0X2A(列地址):一般用于设置X坐标
4.0X2B(页地址):一般用于设置Y坐标
5.0X2C(写GRAM):用于往LCD写GRAM数据
6.0X2E(读GRAM):用于读取LCD的GRAM数据
LCD基本驱动实现
1,确定IO连接关系
2,初始化IO口、初始化FSMC外设
3,编写读写接口函数:lcd_wr_data、lcd_wr_regno、lcd_write_reg、lcd_rd_data
4,编写LCD初始化函数:lcd_init
5,编写LCD画和读点函数:lcd_draw_point
硬件IO连接关系
1.LCD_RST(RESET):LCD复位引脚,连接MCU复位脚,一起复位
2.LCD_BL(PC10):LCD背光引脚,控制LCD背光亮灭,高电平亮
3.LCD_CS(PC9):LCD片选,选中LCD,低电平有效
4.LCD_WR(PC7):LCD写信号,上升沿有效,用于数据/命令写入
5.LCD_RD(PC6):LCD读信号,上升沿有效,用于数据/命令读取
6.LCD_RS(PC8):LCD数据/命令线,表示当前是读写数据还是命令
7.LCD_D0~D15(PB0~PB15):LCD数据线,16位,一次可以写入一个像素
FSMC简介:灵活的静态存储控制器
用途:用于驱动SRAM,NOR FLASH,NAND FLASH及PC卡类型的存储器
FSMC通信引脚介绍
1.FSMC_NE[x](输出):片选引脚,x=1…4,每个对应不同的内存块
2.FSMC_CLK(输出):时钟(同步突发模式使用)
3.FSMC_A[25:0](输出):地址总线
4.FSMC_D[15:0](输出/输入):双向数据总线
5.FSMC_NOE(输出):输出使能(“N”表明低电平有效信号)
6.FSMC_NWE(输出):写使能
7.FSMC_NWAIT(输入):NOR闪存要求FSMC等待的信号
8.FSMC_NADV(输出):地址、数据线复用时作锁存信号
LCD的RS信号线与地址线关系:8080接口中RS(数据/命令选择线),用FSMC的某根A地址线进行替换
当FSMC_A10为高电平时(即RS为高电平),FSMC_D[15:0]被理解为数据
当FSMC_A10为低电平时(即RS为低电平),FSMC_D[15:0]被理解为命令
FSMC相关寄存器介绍
1.FSMC_BCR4(片选控制寄存器):包含存储器块的信息(存储器类型/数据宽度等)
2.FSMC_BTR4(片选时序寄存器):设置读操作时序参数(ADDSET/DATAST)
3.FSMC_BWTR4(写时序寄存器):设置写操作时序参数(ADDSET/DATAST)
SRAM/NOR闪存片选控制寄存器(FSMC_BCRx)
EXTMOD:扩展模式使能位,控制是否允许读写不同的时序。读和写用不同的时序,该位设置为1
WREN:写使能位。该位设置1
MWID[1:0]:存储器数据总线宽度。00,表示8位数据模式;01表示16位数据模式;10和11保留。
MTYP[1:0]:存储器类型。00表示SRAM、ROM;01表示PSRAM;10表示NOR FLASH;11保留。
MBKEN:存储块使能位。该位设置1
SRAM/NOR闪存片选时序寄存器(FSMC_BTRx)
ACCMOD[1:0]:访问模式。
00:模式A;
01:模式B;
10:模式C;
11:模式D。
DATAST[7:0]:数据保持时间,等于DATAST(+1)个HCLK时钟周期,DATAST最大为255。
对于ILI9341来说,其实就是RD低电平持续时间,最小为355ns。
对于F1,一个HCLK = 13.9ns(1/72M),设置为15
对于F4,一个HCLK = 6ns(1/168M),设置为60
ADDSET[3:0]:地址建立时间。表示ADDSET(+1)个HCLK时钟周期,ADDSET最大为15。
对于ILI9341来说,相当于RD高电平持续时间,为90ns。
F1即使设置为0,RD也有超过90ns的高电平,这里设置为1。F4对该位设置为15。
SRAM/NOR闪存写时序寄存器(FSMC_BWTRx)
ACCMOD[1:0]:访问模式。
00:模式A;
01:模式B;
10:模式C;
11:模式D。
DATAST[7:0]:数据保持时间,等于DATAST(+1)个HCLK时钟周期,DATAST最大为255。
对于ILI9341来说,其实就是WR低电平持续时间,最小为15ns。
对于F1,一个HCLK = 13.9ns,设置为3
对于F4,一个HCLK = 6ns,设置为9
ADDSET[3:0]:地址建立时间。表示ADDSET(+1)个HCLK时钟周期,ADDSET最大为15。
对于ILI9341来说,相当于WR高电平持续时间,为15ns。
F1即使设置为1,WR也有超过15ns的高电平,这里设置为1。
F4对该位设置为8。
ST官方提供的寄存器定义对应关系如下:
BTCR[0]对应FSMC_BCR1,BTCR[1]对应FSMC_BTR1
BTCR[2]对应FSMC_BCR2,BTCR[3]对应FSMC_BTR2
BTCR[4]对应FSMC_BCR3,BTCR[5]对应FSMC_BTR3
BTCR[6]对应FSMC_BCR4,BTCR[7]对应FSMC_BTR4
FSMC_BWTRx则组合成BWTR[7]寄存器组,他们的对应关系如下:
BWTR[0]对应FSMC_BWTR1,BWTR[2]对应FSMC_BWTR2,
BWTR[4]对应FSMC_BWTR3,BWTR[6]对应FSMC_BWTR4,
BWTR[1]、BWTR[3]和BWTR[5]保留,没有用到
FSMC相关HAL库函数简介
HAL_StatusTypeDef HAL_SRAM_Init ( SRAM_HandleTypeDef *hsram, FSMC_NORSRAM_TimingTypeDef *Timing,FSMC_NORSRAM_TimingTypeDef *ExtTiming )
为什么需要外部SRAM:跑算法、跑GUI
SRAM 读写操作步骤
1、设置地址信号线:发出要访问的存储器目标地址
2、控制片选信号:选中器件
3、决定数据操作方式:
读操作,控制读使能信号OE表示读数据
写操作,控制写使能信号WE表示写数据
4、设置获取数据方式:掩码信号BLE和BHE指示要访问目标地址的高、低字节部分
5、获取数据:
读过程,存储器通过数据线向主机输出目标地址数据
写过程,使用数据线向存储器目标地址写入目标数据
FSMC,灵活的静态存储控制器,能驱动SRAM、NOR/NAND Flash等存储器。
SRAM驱动步骤
1、配置FSMC:使能FSMC时钟,并配置FSMC相关的IO(复用输出)及其时钟使能
2、设置FSMC相关参数:设置Bank1第三区的存储器 工作模式、位宽和读写时序参数
3、进行数据访问:根据区域,决定操作外部内存的首地址
为什么需要外部SDRAM:LTDC驱动RGB屏、跑算法、跑GUI
NAND FLASH:非易失性存储器,其内部采用非线性宏单位模式,为固态大容量内存的实现提供了廉价有效的解决方案。
RGB接口:24根颜色数据线(RGB各占8根即RGB888,1600W色)
USMART:串口调试组件,可以大大提高代码调试效率
USMART可以直接通过串口调用用户编写的函数,随意修改函数参数
USMART主要特点:
1,可以调用绝大部分用户直接编写的函数
2,占用资源少(最小:4KB FLASH, 72B SRAM)
3,支持参数类型多(整数(10/16)、字符串、函数指针等)
4,支持函数返回值显示且可对格式进行设置
5,支持函数执行时间计算
不支持浮点数参数
USMART原理:
通过对比用户输入字符串和本地函数名,用函数指针实现调用不同的函数
USMART组成:
usmart .c/h:核心文件,用于处理命令以及对外部交互
usmart_config.c:函数管理文件,用于添加用户需要USMART管理的函数
usmart_port.c/h:移植文件,用于USMART移植
usmart_str.c/h:字符串处理文件,用于字符串转换、参数获取等
USMART扫描函数:void usmart_scan(void);
USMART移植:
获取USMART组件->添加到工程->适配硬件->添加执行函数:usmart_config.c->通过串口交互
RTC:实时时钟(Real Time Clock,RTC),本质是一个计数器,计数频率常为秒,专门用来记录时间。