zoukankan      html  css  js  c++  java
  • STM32F103 FSMC详解以及驱动LCD的应用

    http://www.docin.com/p-481164347.html

    FSMC硬件

    对于STM32F103,无论是VET还是ZET6系列,FSMC的16位数据引脚D0~D15分别对应

    D0->PD14,  D1->PD15,  D2->PD0,  D3->PD1,  D4->PE7,  D5->PE8,  D6->PE9,  D7->PE10

    D8->PE11,  D9->PE12,  D10->PE13, D11->PE14, D12->PE15, D13->PD8,  D14->PD9,     D15->PD10

     控制线:手控板,战舰,奋斗版

    都是LCD RD 和WR对应FSMC_NOE和FSMC_NWR,分别是PD4,PD5

    战舰上,LCD片选使用NE4,对应PG12.手控板和奋斗版使用NE1,对应PD7

    mini板接线图

    数据线由PB0~PB15对应。

    LCD背光PC10,

    CS-》PC9,RS->PC8,WR->PC7,RD-》PC6

     LCD硬件

    2个都是16bit 80并口驱动。左侧为正点原子的LCD,ili9341驱动,右侧是手控板的LCDili9325驱动。

    其中RS表示对LCD操作是命令还是数据,RS=0命令,RS=1数据

     

    以代码形式说明LCD的读写时序

    注意:下列分别是8bit和16bit位宽,以LPC1114和STM32F103RCT6的GPIO方式读写LCD

    写命令,RS拉低,准备好数据后,WR信号来一个上升沿。(8bit位宽)

    void LCD_WR_REG(uint16_t reg)        
    {    
      LPC_GPIO3->DATA &=~(1<<0);    //RS=0;
        LPC_GPIO3->DATA &=~(1<<1);    //CS=0;    
      OUT_DATA(reg>>8);
      LPC_GPIO3->DATA &=~(1<<2);    //WR=0;
        LPC_GPIO3->DATA |= (1<<2);    //WR=1;
        OUT_DATA(reg);    
        LPC_GPIO3->DATA &=~(1<<2);    //WR=0;
        LPC_GPIO3->DATA |= (1<<2);    //WR=1;
        LPC_GPIO3->DATA |= (1<<0);    //RS=1;        
    }
    void LCD_WR_DATA(uint16_t val)
    {  
        LPC_GPIO3->DATA |= (1<<0);  //RS=1;
        LPC_GPIO3->DATA &=~(1<<1);    //CS=0;
         OUT_DATA(val>>8);                        
        LPC_GPIO3->DATA &=~(1<<2);    //WR=0;
        LPC_GPIO3->DATA |= (1<<2);    //WR=1;
        OUT_DATA(val);                    
        LPC_GPIO3->DATA &=~(1<<2);    //WR=0;
        LPC_GPIO3->DATA |= (1<<2);    //WR=1;
        LPC_GPIO3->DATA |= (1<<1);    //CS=1;    
    }

    16bit位宽版本

    void LCD_WR_REG(u16 data)
    { 
        LCD_RS_CLR;//写命令
         LCD_CS_CLR; 
        DATAOUT(data); 
        LCD_WR_CLR; 
        LCD_WR_SET; 
         LCD_CS_SET;   
    }

    16bit读寄存器

    u16 LCD_ReadReg(u16 LCD_Reg)
    {                                           
         LCD_WR_REG(LCD_Reg);  //写入要读取的寄存器号
        return LCD_RD_DATA(); 
    } 
    u16 LCD_RD_DATA(void)
    {                                           
        u16 t;
         GPIOB->CRL=0X88888888; //PB0-7  上拉输入
        GPIOB->CRH=0X88888888; //PB8-15 上拉输入
        GPIOB->ODR=0X0000;     //输出0
    
        LCD_RS_SET;
        LCD_CS_CLR;
        
        LCD_RD_CLR;
        //拉低RD信号,从DATAIN数据线读数据后,再拉高                       
        t=DATAIN;  
        LCD_RD_SET;
        LCD_CS_SET; 
    
        GPIOB->CRL=0X33333333; //PB0-7  上拉输出
        GPIOB->CRH=0X33333333; //PB8-15 上拉输出
        GPIOB->ODR=0XFFFF;    //输出1
        return t;  
    }
  • 相关阅读:
    关于rollaxis与swapaxes的使用
    三角函数诱导公式、恒等变换公式
    二阶导数为什么写成 d2y/dx2 的形式
    哔哩哔哩批量合并缓存音视频利用python3+ffmpeg
    机器视觉光源选型(一)-光源颜色选择
    机器视觉光源选型(四)-环形光源
    机器视觉光源选型(三)-同轴光源
    机器视觉光源选型(二)-低角度环形光源
    机器视觉光源选型(六)-不同照明技术对比
    机器视觉光源选型(五)-圆顶光源
  • 原文地址:https://www.cnblogs.com/legion/p/7942838.html
Copyright © 2011-2022 走看看