4000-169-679

首頁(yè)>技術(shù)支持 >汽車軟板廠之STM32F1單片機(jī)TFT屏調(diào)試筆記

汽車軟板廠之STM32F1單片機(jī)TFT屏調(diào)試筆記

2020-07-13 10:35

STM32F1系列單片機(jī)有多種外設(shè),外設(shè)配置方式比較一致,一般是使能外設(shè)所在GPIO口時(shí)鐘、使能外設(shè)的時(shí)鐘,在禁止外設(shè)的情況下配置外設(shè)的時(shí)序以及中斷和DMA等。大部分的外設(shè)配置相對(duì)簡(jiǎn)單,但是FSMC接口因?yàn)榕渲帽容^復(fù)雜,往往讓一些初學(xué)者一頭霧水。汽車軟板廠記錄了在STM32F103ZET6的FSMC接口配置調(diào)試TFT LCD屏相關(guān)注意事項(xiàng)。
1   FSMC接口GPIO配置

/** FSMC GPIOConfiguration   PF0  ------> FSMC_A0           ------> LCD_RS: 0: Reg,1:Data  PE7  ------> FSMC_D4  PE8  ------> FSMC_D5  PE9  ------> FSMC_D6  PE10  ------> FSMC_D7  PE11  ------> FSMC_D8  PE12  ------> FSMC_D9  PE13  ------> FSMC_D10  PE14  ------> FSMC_D11  PE15  ------> FSMC_D12  PD8  ------> FSMC_D13  PD9  ------> FSMC_D14  PD10  ------> FSMC_D15  PD14  ------> FSMC_D0  PD15  ------> FSMC_D1  PD0  ------> FSMC_D2  PD1  ------> FSMC_D3  PD4  ------> FSMC_NOE          ------> LCD_RD    Default:1,Value:0    PD5  ------> FSMC_NWE           ------> LCD_WR  Default:1,Value:0  PG12  ------> FSMC_NE4             ------>LCD_CS  Default:1,Value:0



2 初始化FSMC時(shí)序

/* FSMC initializationfunction */  FSMC_NORSRAM_TimingTypeDef Timing;SRAM_HandleTypeDef hsram1;
  hsram1.Instance = FSMC_NORSRAM_DEVICE;  hsram1.Extended =FSMC_NORSRAM_EXTENDED_DEVICE;  /* hsram1.Init */hsram1.Init.NSBank = FSMC_NORSRAM_BANK4;hsram1.Init.DataAddressMux =FSMC_DATA_ADDRESS_MUX_DISABLE;hsram1.Init.MemoryType=FSMC_MEMORY_TYPE_NOR;hsram1.Init.MemoryDataWidth =FSMC_NORSRAM_MEM_BUS_WIDTH_16;hsram1.Init.BurstAccessMode =FSMC_BURST_ACCESS_MODE_DISABLE;hsram1.Init.WaitSignalPolarity =FSMC_WAIT_SIGNAL_POLARITY_LOW;hsram1.Init.WrapMode =FSMC_WRAP_MODE_DISABLE;hsram1.Init.WaitSignalActive =FSMC_WAIT_TIMING_BEFORE_WS;hsram1.Init.WriteOperation =FSMC_WRITE_OPERATION_ENABLE;hsram1.Init.WaitSignal =FSMC_WAIT_SIGNAL_DISABLE;hsram1.Init.ExtendedMode =FSMC_EXTENDED_MODE_DISABLE;hsram1.Init.AsynchronousWait =FSMC_ASYNCHRONOUS_WAIT_DISABLE;hsram1.Init.WriteBurst =FSMC_WRITE_BURST_DISABLE;  /* Timing */ Timing.AddressSetupTime = 0x04; Timing.AddressHoldTime = 0x02; Timing.DataSetupTime = 0x08; Timing.BusTurnAroundDuration = 0x00; Timing.CLKDivision = 0x00; Timing.DataLatency = 0x00; Timing.AccessMode = FSMC_ACCESS_MODE_B;  后面數(shù)值決定讀寫屏快慢。


FPC小編注意點(diǎn):
1  因?yàn)镾TM32的地址是32bit的,數(shù)據(jù)是按照8bit組織的,如果lcd的數(shù)據(jù)選擇8bit的話,地址A0就是正常的輸出,如0x60000000輸出A0=0;  0x6000 0001輸出A0=1;對(duì)應(yīng)數(shù)據(jù)是byte;如果lcd的數(shù)據(jù)選擇16bit的話,地址A0就,如0x60000000輸出A0=0;  而0x60000002對(duì)應(yīng)A0=1;對(duì)應(yīng)數(shù)據(jù)是word,也就是說每?jī)蓚€(gè)原來基于byte結(jié)構(gòu)的地址對(duì)應(yīng)一個(gè)地址線上實(shí)際的word長(zhǎng)度的地址;

#define Bank1_LCD_D   ((uint32_t)0x6C000002)    //DispData ADDR#define Bank1_LCD_C   ((uint32_t)0x6C000000)   //DispReg ADDR
void LCD_WR_REG(uint16_t index){       *(__IOuint16_t *) (Bank1_LCD_C) = index;}
uint16_t  LCD_READ_DATA(void){       uint16_ta = 0;        a=*(__IOuint16_t *) (Bank1_LCD_D); //L        return a;}


軟板廠:   Image2LCD軟件轉(zhuǎn)換時(shí)注意掃描方式和數(shù)據(jù)位寬度,以及高低為順序。

實(shí)際效果:

網(wǎng)友熱評(píng)