打印
[其他ST产品]

stm32战舰之路

[复制链接]
楼主: hehhehee
手机看帖
扫描二维码
随时随地手机跟帖
81
hehhehee|  楼主 | 2021-12-30 22:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
0xD3:    读出LCD控制器的ID,该指令后面跟着4个参数,其中后面两个参数是控制器的ID。一个参数2字节,低八位有效。

0x36:    存储访问控制指令,通俗的说,就是填充LCD液晶屏时的方向顺序。只带一个参数,2字节,低八位有效。通过设置bit7(MY),bit6(MX),bit5(MV)来控制填充方向。

0x2A:    列地址指令,通俗的说,就是设置x坐标,带有4个参数,实际是两个坐标值(0<=SC<=EC <=240)根据实际情况

0X2B:    页地址设置指令,通俗来说,就是设置y坐标,带有4个参数,实际是两个坐标值(0<=SP<=EP<=320)根据实际情况。

0x2C:    写GRAM指令,发送该指令之后,就可以往LCD的GRAM里面写入颜色数据了。

0x2E:    读GRAM数据,发送该指令之后,第一次输出的是无效数据dummy,第二次开始的才是有效的GRAM数据。

通过上面几个指令,我们便可控制ILI9341控制器来显示我们所要显示的内容。

使用特权

评论回复
82
hehhehee|  楼主 | 2021-12-30 22:07 | 只看该作者
TFTLCD使用流程:

使用特权

评论回复
83
hehhehee|  楼主 | 2021-12-30 22:11 | 只看该作者
  初始化序列,就是向 LCD 控制器写入一系列的设置值(比如伽马校准),这些初始化序列一般 LCD 供应商会提供给客户,我们直接使用这些序列即可,不需要深入研究。在初始化之后, LCD 才可以正常使用。

使用特权

评论回复
84
hehhehee|  楼主 | 2021-12-30 22:12 | 只看该作者
2、FSMC(大容量,且引脚数在 100 脚以上的 STM32F103 芯片都带有 FSMC 接口)。

       用它来驱动LCD工作。任何LCD的使用,一般都经过几个步骤:硬复位,初始化序列,设置坐标,{1、写GRAM指令,写入颜色数据,LCD显示。或者2、读GRAM指令,读出颜色数据,单片机处理。}

使用特权

评论回复
85
hehhehee|  楼主 | 2021-12-30 22:20 | 只看该作者
FSMC定义:灵活的静态存储控制器

FSMC作用:1、将AHB传输信号转换到适当的外部设备协议。2、满足访问外部设备的时序要求。

使用特权

评论回复
86
hehhehee|  楼主 | 2021-12-30 22:23 | 只看该作者
FSMC接口框图

使用特权

评论回复
87
hehhehee|  楼主 | 2021-12-30 22:26 | 只看该作者
FMSC接口支持SRAM,NOR闪存,NAND闪存,PSRAM等存储器。它将外部设备分为3类:NOR/PSRAM设备、NAND设备,PC卡设备。

FSMC里面有四个存储块(bank1,bank2,bank3,bank4),每个存储块里面有4个区。他们共用地址数据总线等信号。通过选择片选信号CS以区分不同的设备。

使用特权

评论回复
88
hehhehee|  楼主 | 2021-12-30 22:27 | 只看该作者
本节是把TFTLCD当做SRAM存储器来控制。

对FSMC里的三个寄存器进行配置,就可以驱动TFTLCD了。

FSMC_BCRx(x=1~4):闪存片选控制寄存器。

FSMC_BTRx(x=1~4):闪存片选读时序寄存器。

FSMC_BWTRx(x=1~4):闪存片选写时序。

使用特权

评论回复
89
hehhehee|  楼主 | 2021-12-30 22:28 | 只看该作者
注意:MDK里面的寄存器定义里面没有定义FSMC_BCR,FSMC_BTR,FSMC_BWTR等单独的寄存器,而是进行一些组合。FSMC_BCR和FSMC_BTR组合成BTCR[8]寄存器,FSMC_BWTRX组合成BWTR[7]寄存器。

使用特权

评论回复
90
hehhehee|  楼主 | 2021-12-30 22:31 | 只看该作者

使用特权

评论回复
91
hehhehee|  楼主 | 2021-12-30 22:32 | 只看该作者
对FMSC的操作:

1.FSMC 初始化函数 ,根据前面的讲解,初始化 FSMC 主要是初始化三个寄存器 FSMC_BCRx, FSMC_BTRx,

FSMC_BWTRx。

FSMC_NORSRAMInit();
FSMC_NANDInit();
FSMC_PCCARDInit();

使用特权

评论回复
92
hehhehee|  楼主 | 2021-12-30 22:32 | 只看该作者
这三个函数分别用来初始化 4 种类型存储器。

把LCD当做SRAM存储器,因此初始化函数为

void FSMC_NORSRAMInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct);
typedef struct

{
uint32_t FSMC_Bank;
uint32_t FSMC_DataAddressMux;
uint32_t FSMC_MemoryType;
uint32_t FSMC_MemoryDataWidth;
uint32_t FSMC_BurstAccessMode;
uint32_t FSMC_AsynchronousWait;
uint32_t FSMC_WaitSignalPolarity;
uint32_t FSMC_WrapMode;
uint32_t FSMC_WaitSignalActive;
uint32_t FSMC_WriteOperation;
uint32_t FSMC_WaitSignal;
uint32_t FSMC_ExtendedMode;
uint32_t FSMC_WriteBurst;
FSMC_NORSRAMTimingInitTypeDef* FSMC_ReadWriteTimingStruct;
FSMC_NORSRAMTimingInitTypeDef* FSMC_WriteTimingStruct;
}FSMC_NORSRAMInitTypeDef;

使用特权

评论回复
93
hehhehee|  楼主 | 2021-12-30 22:33 | 只看该作者
从这个结构体我们可以看出,前面有 13 个基本类型(unit32_t)的成员变量, 这 13 个参数是用来配置片选控制寄存器 FSMC_BCRx。 最后面还有两个SMC_NORSRAMTimingInitTypeDef 指针类型的成员变量。前面我们讲到, FSMC 有读时序和写时序之分,所以这里就是用来设置读时序和写时序的参数了, 也就是说,这两个参数是用来配置寄存器写时序之分,所以这里就是用来设置读时序和写时序的参数了, 也就是说,这两个参数是用来配置寄存器 FSMC_BTRx 和 FSMC_BWTRx。

使用特权

评论回复
94
hehhehee|  楼主 | 2021-12-30 22:36 | 只看该作者
FSMC_NORSRAMTimingInitTypeDef 类型的定义:
typedef struct
{
uint32_t FSMC_AddressSetupTime;
uint32_t FSMC_AddressHoldTime;
uint32_t FSMC_DataSetupTime;
uint32_t FSMC_BusTurnAroundDuration;
uint32_t FSMC_CLKDivision;
uint32_t FSMC_DataLatency;
uint32_t FSMC_AccessMode;
}FSMC_NORSRAMTimingInitTypeDef;
这个结构体有 7 个参数用来设置 FSMC 读写时序。

使用特权

评论回复
95
hehhehee|  楼主 | 2021-12-30 22:39 | 只看该作者
2、FSMC使能函数

FSMC 对不同的存储器类型同样提供了不同的使能函数:
void FSMC_NORSRAMCmd(uint32_t FSMC_Bank, FunctionalState NewState);
void FSMC_NANDCmd(uint32_t FSMC_Bank, FunctionalState NewState);
void FSMC_PCCARDCmd(FunctionalState NewState);

使用特权

评论回复
96
hehhehee|  楼主 | 2021-12-30 22:42 | 只看该作者
这里根据实际情况来定,你的设备是当做这三类存储器哪一种来做,就选择相对应的使能函数。

总结:LCD初始化步骤

1、GPIO/FSMC/AFIO时钟使能

2、GPIO初始化:GPIO_Init()函数

3、FSMC初始化:FSMC_NORSRAMInit()函数

4、FSMC使能:FSMC_NORSRAMCmd()函数

6、LCD驱动初始化代码。

使用特权

评论回复
97
hehhehee|  楼主 | 2021-12-30 22:43 | 只看该作者
13、IIC学习

使用特权

评论回复
98
hehhehee|  楼主 | 2021-12-30 22:47 | 只看该作者

使用特权

评论回复
99
hehhehee|  楼主 | 2021-12-30 22:48 | 只看该作者

使用特权

评论回复
100
hehhehee|  楼主 | 2021-12-30 22:50 | 只看该作者
IIC总线在传输数据过程中总共有3种类型信号:分别是开始信号、结束信号、应答信号。

空闲状态:scl = 1; sda = 1; 接在IIC线总线上的设备都被拉高。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则