stm32 fsmc lcd调试.docx
《stm32 fsmc lcd调试.docx》由会员分享,可在线阅读,更多相关《stm32 fsmc lcd调试.docx(12页珍藏版)》请在冰豆网上搜索。
![stm32 fsmc lcd调试.docx](https://file1.bdocx.com/fileroot1/2022-11/28/e49ea835-b713-4d35-9a2f-5749a4ec4321/e49ea835-b713-4d35-9a2f-5749a4ec43211.gif)
stm32fsmclcd调试
stm32fsmclcd调试
2010年05月09日星期日03:
45P.M.
STM32103F/lk
lcd型号
:
ZYMG12864C3
注:
学习的时候如果觉得配置好了操作无效多注意外围设备的时钟配置如:
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE;//
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOF|RCC_APB2Periph_GPIOG|RCC_APB2Periph_AFIO,ENABLE;
这里的RCC_APB2Periph_AFIO,ENABLE很容易忘记
关于FSMC
开始看了点手册和别人的应用笔记大概把自己理解的记录下
把FSMC与外围设备连接配置好后就等于FSMC对于使用者屏蔽了对外围设备的具体操作只要向对应类型的映射地址空间内写入数据这些数据+地址就会自动被翻译(需设置相应时序的地址数据建立保持时间等参数并写入外围存储设备
在FSMC的角度来看外围连接的存储设备被分为ROM\SRAM\NOR-NANDFlash-PCCard等几种类型
它们被对应为FSMC内4个存储块分别为
64*4mb(ROM\SRAM\NOR(60000000h-6fffffffh,(这一块又分为4部分每一部分有片选信号NE[1:
4]
可以连接4片本类型设备使用
256mb(NANDFlash1(70000000h-7fffffffh,
256mb(NANDFlash2(80000000h-8fffffffh,
256mb(PCCard(90000000h-9fffffffh
例如下面程序中要使用的宏定义
#defineLCD_Command*(*(volatileu80x6c000000
#defineLCD_Data*(*(volatileu80x6c000001(LCD数据宽度为8BIT
当数据写入LCD_Command对应的地址时地址和数据会分别被发送到对应的AFIO复用端口将AFIO的A0接至LCD的C/D(Command/data脚就自动切换了命令和数据
LCD_Command=0x55;A0=0;对应地址低位0x6c000000
LCD_Data=0x55;A0=1;对应地址低位0x6c000001
此开发板LCD与MCU的引脚对应关系为:
D0---->PD14D4---->PE7A0------>PF00
D1---->PD15D5---->
PE8FSMC_NE4------>PG12
D2---->PD0D6---->
PE9FSMC_NWE------->PD5
D3---->PD1D7---->
PE10FSMC_NOE------->PD4
本例中所有引脚配置为AFIO
程序如下:
对于FSMC的工作模式时序配置可以看手册的18章
/****************************************************************************************************************
Funtion:
fsmc
para----|input:
null
|output:
null
data:
2010/5/9
ver:
0.1
modify:
null
author:
x
****************************************************************************************************************/
voidLCD_FSMCConfig(void
{
#ifndefNO_LCD
FSMC_NORSRAMInitTypeDefFSMC_NORSRAMInitStructure;
FSMC_NORSRAMTimingInitTypeDefp;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE;
/*--FSMCConfiguration
------------------------------------------------------*/
/*-----------------------SRAMBank4
----------------------------------------*/
/*FSMC_Bank1_NORSRAM4configuration*/
p.FSMC_AddressSetupTime=1;
p.FSMC_AddressHoldTime=1;
p.FSMC_DataSetupTime=20;
p.FSMC_BusTurnAroundDuration=0;
p.FSMC_CLKDivision=0;
p.FSMC_DataLatency=1;
p.FSMC_AccessMode=FSMC_AccessMode_A;
/*ColorLCDconfiguration------------------------------------LCDconfiguredasfollow:
-Data/AddressMUX=Disable
-MemoryType=SRAM
-DataWidth=16bit
-WriteOperation=Enable
-ExtendedMode=Enable
-AsynchronousWait=Disable*/
FSMC_NORSRAMInitStructure.FSMC_Bank=FSMC_Bank1_NORSRAM4;
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux=
FSMC_DataAddressMux_Disable;
FSMC_NORSRAMInitStructure.FSMC_MemoryType=FSMC_MemoryType_SRAM;FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth=
FSMC_MemoryDataWidth_8b;
FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode=
FSMC_BurstAccessMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity=
FSMC_WaitSignalPolarity_Low;
FSMC_NORSRAMInitStructure.FSMC_WrapMode=FSMC_WrapMode_Disable;FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive=
FSMC_WaitSignalActive_BeforeWaitState;
FSMC_NORSRAMInitStructure.FSMC_WriteOperation=
FSMC_WriteOperation_Enable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignal=
FSMC_WaitSignal_Disable;
FSMC_NORSRAMInitStructure.FSMC_ExtendedMode=
FSMC_ExtendedMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WriteBurst=
FSMC_WriteBurst_Disable;
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct=&p;
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct=&p;
FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure;
/*BANK4(ofNOR/SRAMBank1~4isenabled*/
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4,ENABLE;
#endif
}
/*******************************************************************************
*FunctionName:
STM3210E_LCD_Init
*Description:
InitializestheLCD.
*Input:
None
*Output:
None
*Return:
None
*******************************************************************************/
voidSTM3210E_LCD_Init(void
{
#ifndefNO_LCD
/*ConfiguretheLCDControlpins
--------------------------------------------*/
LCD_IOConfig(;
/*ConfiguretheFSMCParallelinterface
-------------------------------------*/
LCD_FSMCConfig(;
LCD_Command=Display_Off;//
delay(;
LCD_Command=LCD_Reset;//
reset_delay(;
LCD_Command=Set_LCD_Bias_9;
delay(;
LCD_Command=Set_ADC_Normal;
delay(;
LCD_Command=COM_Scan_Dir_Reverse;
delay(;
LCD_Command=Set_Start_Line_X|0x0;
delay(;
LCD_Command=0x2c;
power_delay(;//50msrequried
LCD_Command=0x2e;
power_delay(;//50ms
LCD_Command=0x2f;
power_delay(;//50ms
LCD_Command=Set_Ref_Vol_Reg|0x05;
delay(;
LCD_Command=Set_Ref_Vol_Mode;
delay(;
LCD_Command=Set_Ref_Vol_Reg;
delay(;
LCD_Clear(;
delay(;
LCD_Command=Set_Page_Addr_X|0x0;
delay(;
LCD_Command=Set_ColH_Addr_X|0x0;
delay(;
LCD_Command=Set_ColL_Addr_X|0x0;
delay(;
LCD_Command=Display_On;//
delay(;
#endif
}
/*********************************************************************************************************************/
voidLCD_IOConfig(void
{
*/
/*补充:
复位后LCD模式如下:
Pageaddress:
0
Columnaddress:
0
Modify-read:
OFF
DisplayON/OFF:
OFF
Initialdisplayline:
0(first
InitialCOM0register:
0(COM0
Partialdisplaydutyratio:
1/64
Iconenable/disable:
0(disable
ReversedisplayON/OFF:
OFF(normal
n-lineinversionregister:
0(disable
EntiredisplayON/OFF:
OFF(normal
Powercontrolregister(VC,VR,VF=(0,0,0
DC-DCstepup:
3timesconvertercircuit=(0,0
Regulatorresistorselectregister:
(R2,R1,R0=(0,0,0
Referencevoltagecontrolregister:
(EV5,EV4,EV3,EV2,EV1,EV0=(1,0,0,0,0,0
LCDbiasratio:
1/9
SHLselect:
OFF(normal
ADCselect:
OFF(normal
Oscillatorstatus:
OFF
Powersavemode:
release
#ifndefNO_LCD
GPIO_InitTypeDefGPIO_InitStructure;
GPIO_DeInit(GPIOD;
/*SetPD.00(D2,PD.01(D3,PD.04(NOE,PD.05(NWE,PD.14(D0,PD.15(D1asalternate
functionpushpull*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|
GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOD,&GPIO_InitStructure;
GPIO_DeInit(GPIOE;
/*SetPE.07(D4,PE.08(D5,PE.09(D6,PE.10(D7asalternatefunctionpushpull*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;
GPIO_Init(GPIOE,&GPIO_InitStructure;
//GPIO_DeInit(GPIOF;
/*SetPF.00(A0(RSasalternatefunctionpushpull*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
GPIO_Init(GPIOF,&GPIO_InitStructure;
GPIO_DeInit(GPIOG;
/*SetPG.12(NE4(LCD/CSasalternatefunctionpushpull-CE3(LCD/CS*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;
GPIO_Init(GPIOG,&GPIO_InitStructure;
#endif
}
/*********************************************************************************************************************/
#ifdef__CC_ARM
__asmvoidwait(
{
nop
BXlr
#endif
voiddelay(void;
voiddelay(
{
vu8i=0x8;
while(i--
#ifdef__CC_ARM
wait(;
#else
asm("nop";
#endif
}
#ifndefNO_LCD
voidreset_delay(void;voidreset_delay({
vu32i=0xff;
while(i--
#ifdef__CC_ARM
wait(;
#else
asm("nop";
#endif
}
voidpower_delay(void;voidpower_delay({
vu32i=0x4ffff;
while(i--
#ifdef__CC_ARM
wait(;
#else
asm("nop";
#endif
}
#endif
/*********************************************************************************************************************/
/*******************************************************************************
*FunctionName:
LCD_Draw_ST_Logo
*Description:
drawaSTlogo
*Input:
None
*Output:
None
*Return:
0--failure
1--success
*******************************************************************************/
voidLCD_Draw_ST_Logo(
{
#ifndefNO_LCD
u8i,j;
u8*p=DispSTLoGoTable;
LCD_Command=COM_Scan_Dir_Reverse;
LCD_Command=Set_Start_Line_X|0x0;
delay(;
for(i=0;i<8;i++
{
//foreachpage
LCD_Command=Set_Page_Addr_X|i;//pageno.
delay(;
LCD_Command=Set_ColH_Addr_X|0x0;//fixedcolfirstaddrdelay(;
LCD_Command=Set_ColL_Addr_X|0x0;
delay(;
j=128;
while(j--
{
LCD_Data=*p++;
delay(;
}
}
#endif
}
/*********************************************************************************************************************/
ST的LOGO
u8DispSTLoGoTable[]={
/*page0*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xE0,0xF0,0xF8,0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0x7C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*page1*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*page2*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0x3F,0x7F,0xFF,0xFF