- 博客(1)
- 资源 (4)
- 收藏
- 关注
原创 硬盘接口技术学习笔记
转帖硬盘接口技术学习笔记早期,硬盘接口技术发展比较缓慢,一般在同一时期只有一、两种主流的接口技术并存,所以在选购时对硬盘接口可以不作太多留意。而现在不能这样了,随着电脑技术的不断发展和人们对硬盘容量、存取速度要求的不断提高,硬盘接口技术也在不断地推陈出新,并且出现了多种不同架构的硬盘接口技术方案,当然其目的都是为了紧跟、满足电脑技术的整体长期发展需求。而由于在新标准不断推出时,原有老标
2011-04-09 10:22:00 500
ili932x系列驱动程序
/******************************************************************************
* 文件名称:ili932x.c
* 摘 要:支持ILI9320和ILI9325驱动IC控制的QVGA显示屏,使用16位并行传输
到头文件中配置 屏幕使用方向和驱动IC类型
注意:16位数据线色彩分布>> BGR(565)
*重要说明!
在.h文件中,#define Immediately时是立即显示当前画面
而如果#define Delay,则只有在执行了LCD_WR_REG(0x0007,0x0173);
之后才会显示,执行一次LCD_WR_REG(0x0007,0x0173)后,所有写入数
据都立即显示。
#define Delay一般用在开机画面的显示,防止显示出全屏图像的刷新
过程
******************************************************************************/
#include "stm32f10x_lib.h"
#include "ili932x.h"
#include "spi_flash.h"
/****************************************************************
函数名:Lcd配置函数
功能:配置所有和Lcd相关的GPIO和时钟
引脚分配为:
PE——16Bit数据总线
PD15——Lcd_rst
PD14——Lcd_rd*
PD13——Lcd_wr
PD12——Lcd_rs*
PD11——Lcd_cs
PB5——Lcd_blaklight 背光靠场效应管驱动背光模块
*****************************************************************/
void Lcd_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*开启相应时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE, ENABLE);
/*所有Lcd引脚配置为推挽输出*/
/*16位数据*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOE, &GPIO_InitStructure);
/*控制脚*/
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/*背光控制*/
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_3;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
/**********************************************
函数名:Lcd初始化函数
功能:初始化Lcd
入口参数:无
返回值:无
***********************************************/
void Lcd_Initialize(void)
{
Lcd_Light_ON;
DataToWrite(0xffff);//数据线全高
Set_nWr;
Set_Cs;
Set_Rs;
Set_nRd;
Set_Rst;
Set_Rst;
Delay_nms(1);
Clr_Rst;
Delay_nms(1);
Set_Rst;
Delay_nms(1);
#ifdef ILI9325
LCD_WR_REG(0x00e3,0x3008);
LCD_WR_REG(0x00e7,0x0012);
LCD_WR_REG(0x00ef,0x1231);//Set the internal vcore voltage
LCD_WR_REG(0x0001,0x0100);//S
#endif
#ifdef ILI9320
LCD_WR_REG(0x00e5,0x8000);
LCD_WR_REG(0x0000,0x0001);
LCD_WR_REG(0x0001,0x0100);//S
Delay_nms(10);
#endif
LCD_WR_REG(0x0002,0x0700);//Line inversion
#if ID_AM==000
LCD_WR_REG(0x0003,0x0000);//屏幕旋转控制 TFM=0,TRI=0,SWAP=1,16 bits system interface swap RGB to BRG,此处ORG和HWM 为0
#elif ID_AM==001
LCD_WR_REG(0x0003,0x0008);
#elif ID_AM==010
LCD_WR_REG(0x0003,0x0010);
#elif ID_AM==011
LCD_WR_REG(0x0003,0x0018);
#elif ID_AM==100
LCD_WR_REG(0x0003,0x0020);
#elif ID_AM==101
LCD_WR_REG(0x0003,0x0028);
#elif ID_AM==110
LCD_WR_REG(0x0003,0x0030);
#elif ID_AM==111
LCD_WR_REG(0x0003,0x0038);
#endif
LCD_WR_REG(0x0004,0x0000);
LCD_WR_REG(0x0008,0x0207);
LCD_WR_REG(0x0009,0x0000);
LCD_WR_REG(0x000a,0x0000);
LCD_WR_REG(0x000c,0x0001);//此处配置接口类型 16位 system接口
LCD_WR_REG(0x000d,0x0000);
LCD_WR_REG(0x000f,0x0000);
//电源配置
LCD_WR_REG(0x0010,0x0000);
LCD_WR_REG(0x0011,0x0000);
LCD_WR_REG(0x0012,0x0000);
LCD_WR_REG(0x0013,0x0000);
Delay_nms(200);
LCD_WR_REG(0x0010,0x17b0);
LCD_WR_REG(0x0011,0x0137);
Delay_nms(50);
LCD_WR_REG(0x0012,0x0139);
Delay_nms(50);
LCD_WR_REG(0x0013,0x1700);
LCD_WR_REG(0x0029,0x000c);
//LCD_WR_REG(0x002b,0x000d);
Delay_nms(50);
#if ID_AM==000
LCD_WR_REG(0x0020,0x00ef);//GRAM水平起始位置
LCD_WR_REG(0x0021,0x013f);
#elif ID_AM==001
LCD_WR_REG(0x0020,0x00ef);
LCD_WR_REG(0x0021,0x013f);
#elif ID_AM==010
LCD_WR_REG(0x0020,0x0000);
LCD_WR_REG(0x0021,0x013f);
#elif ID_AM==011
LCD_WR_REG(0x0020,0x0000);
LCD_WR_REG(0x0021,0x013f);
#elif ID_AM==100
LCD_WR_REG(0x0020,0x00ef);
LCD_WR_REG(0x0021,0x0000);
#elif ID_AM==101
LCD_WR_REG(0x0020,0x00ef);
LCD_WR_REG(0x0021,0x0000);
#elif ID_AM==110
LCD_WR_REG(0x0020,0x0000);
LCD_WR_REG(0x0021,0x0000);
#elif ID_AM==111
LCD_WR_REG(0x0020,0x0000);
LCD_WR_REG(0x0021,0x0000);
#endif
LCD_WR_REG(0x0030,0x0000);
LCD_WR_REG(0x0031,0x0507);
LCD_WR_REG(0x0032,0x0104);
LCD_WR_REG(0x0035,0x0105);
LCD_WR_REG(0x0036,0x0404);
LCD_WR_REG(0x0037,0x0603);
LCD_WR_REG(0x0038,0x0004);
LCD_WR_REG(0x0039,0x0007);
LCD_WR_REG(0x003c,0x0501);
LCD_WR_REG(0x003d,0x0404);
LCD_WR_REG(0x0050,0x0000);//水平 GRAM起始位置
LCD_WR_REG(0x0051,0x00ef);//水平GRAM终止位置
LCD_WR_REG(0x0052,0x0000);//垂直GRAM起始位置
LCD_WR_REG(0x0053,0x013f);//垂直GRAM终止位置
#ifdef ILI9325
LCD_WR_REG(0x0060,0xa700);//G
#endif
#ifdef ILI9320
LCD_WR_REG(0x0060,0x2700);//G
#endif
LCD_WR_REG(0x0061,0x0001);//Enables the grayscale inversion of the image by setting REV=1.??????????????????????????????
LCD_WR_REG(0x006a,0x0000);//不使用卷曲功能
LCD_WR_REG(0x0080,0x0000);
LCD_WR_REG(0x0081,0x0000);
LCD_WR_REG(0x0082,0x0000);
LCD_WR_REG(0x0083,0x0000);
LCD_WR_REG(0x0084,0x0000);
LCD_WR_REG(0x0085,0x0000);
LCD_WR_REG(0x0090,0x0010);
LCD_WR_REG(0x0092,0x0000);
LCD_WR_REG(0x0093,0x0003);
LCD_WR_REG(0x0095,0x0110);
LCD_WR_REG(0x0097,0x0000);
LCD_WR_REG(0x0098,0x0000);
//显示画面写入 0x0130是不显示当前画面
//0x0173是显示当前画面
LCD_WR_REG(0x0007,0x0130);
#ifdef Immediately
LCD_WR_REG(0x0007,0x0173);
#endif
//第一个像素的读取数据是无效值,这里事先读取一次,舍去无效值
}
/**************************************/
#ifndef __ILI932X_H
#define __ILI932X_H
//定义驱动IC是ILI9320还是ILI9325
#define ILI9325 //ILI9325
//屏幕旋转定义 数字按照 ID[1:0]AM 按照PDF中的配置定义
#define ID_AM 110
//屏幕开始时显示方式,注意:当IDelay时显示第一幅画面是逐像素刷新的
//此时必须手动在刷新结束后加上 LCD_WR_REG(0x0007,0x0173);才能显示
//当Immediately时没有被注释掉是不需要此过程
#define Delay//Display Delay//Immediately
//硬件相关的子函数
#define nWrPin 0x2000
#define CsPin 0x800
#define RsPin 0x1000
#define nRdPin 0x4000
#define RstPin 0x8000
#define Lcd_Light_ON GPIO_SetBits(GPIOA,GPIO_Pin_3);
#define Lcd_Light_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_3);
#define DataToWrite(PORTE) (*((volatile unsigned long *) 0x4001180C) = PORTE)
#define Set_nWr (*((volatile unsigned long *) 0x40011410) = nWrPin)
#define Clr_nWr (*((volatile unsigned long *) 0x40011414) = nWrPin)
#define Set_Cs (*((volatile unsigned long *) 0x40011410) = CsPin)
#define Clr_Cs (*((volatile unsigned long *) 0x40011414) = CsPin)
#define Set_Rs (*((volatile unsigned long *) 0x40011410) = RsPin)
#define Clr_Rs (*((volatile unsigned long *) 0x40011414) = RsPin)
#define Set_nRd (*((volatile unsigned long *) 0x40011410) = nRdPin)
#define Clr_nRd (*((volatile unsigned long *) 0x40011414) = nRdPin)
#define Set_Rst (*((volatile unsigned long *) 0x40011410) = RstPin)
#define Clr_Rst (*((volatile unsigned long *) 0x40011414) = RstPin)
2011-04-09
ILI9325中文资料
TFT 9325驱动学习
1、寄存器 03H
AM : 控制GRAM更新方向的控制位 AM = 0: 在水平方向更新地址 AM = 1: 在垂直方向更新地址 这个地方对AM的选择将直接影响img2lcd软件的扫描方式控制项,这一位就是控制扫描方式的。I/D[1:0] : 当更新显示区域的一个像素点的时候,控制AC是增加1还是减少1,具体参考下图
I/D[1:0] 的正确设置才能正确的显示图片,比如有时候发现显示出来的图片和输入img2lcd的图片方向是左右方向是反的,或者上下 或者都是反的,那就是需要修改这个的地方了,可以根据上面的方向来选择合适的I/D.ORG : 当一个窗口的地址区域确定以后,根据上面I/D的设置,来移动原始地址。当高速写窗口地址域时,这个功能将被使能。 ORG = 0: 原始地址是不移动的。这种情况下,是通过指定地址来启动写操作的,这个地址是根据窗口显示区域的GRAM的地址表。 ORG = 1:原始地址是更加I/D的设置相应的移动的。注意:1、当ORG =1 的时候,设置R20H,R21H,的原始地址的时候,只能设置0x0000 2、在RAM读操作时,要保证ORG = 0;BGR 交换写数据中红和蓝 BGR = 0 : 根据RGB顺序写像素点的数据。 BGR = 1: 交换RGB数据为BGR,写入GRAMTRI: 当TRI = 1的时候,在8位数据模式下是以 8bit * 3传输的,也就是传输三个字节到内部的RAM,同样也支持16位数据的模式,和使用SPI模式显示26万色,也就是说当RTI = 1 的时候,传输的字节数基本上都是三个。这一位在显示26万色的时候有用的,或者使用8位数据接口的时候,这个要看具体的应用来设置,但是注意如果不需要的时候,要设置为0.DFI : 设置像内部RAM传输数据的的模式。这一位是要和TRI联合起来使用的。具体的参看下图。
2011-04-09
基于STM32 SPI 及VS1003的MP3播放器设计
基于STM32的MP3播放器综合设计,利用STM32 SPI向VS1003发送数据并进行音频解码,内含CH375汉字库读取显示,nokia5110画点划线数字汉字显示等各项功能。
2011-04-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人