<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> STM32 >> 瀏覽文章

        stm32的fsmc控制NT35310液晶顯示屏

        作者:明入于地   來源:明入于地   點擊數:  更新時間:2014年06月14日   【字體:
        學了兩周的ARM9,感覺還是很難入門,再加上這個暑假找到了一個stm32的實習崗位,不得又回到了stm32的學習上,其中學習ARM9之前的STM32 FSMC部分學的很蛋疼,但學了ARM9之后搞清了SRAM SDRAM NOR NAND之間的區別,很多問題就迎刃而解了。



        控制LCD由以下幾部分:
        1.打開FSMC時鐘
         RCC->AHBENR|=1<<8;
        2.初始化FSMC用到的IO口
         RCC->APB2ENR|=3<<5;
         GPIOD->CRL&=0xff00ff00;
         GPIOD->CRL|=0x00bb00bb; //RD=PD4 WR=PD5
         GPIOD->CRH&=0x00fff000;
         GPIOD->CRH|=0xbb000bbb;
         GPIOD->ODR|=3<<0;
         GPIOD->ODR|=7<<8;
         GPIOD->ODR|=3<<14;

         GPIOE->CRL&=0x0fffffff;
         GPIOE->CRL|=0xb0000000;
         GPIOE->CRH&=0x00000000;
         GPIOE->CRH|=0xbbbbbbbb;
         GPIOE->ODR|=1<<7;
         GPIOE->ODR|=0xff<<8;

         RCC->APB2ENR|=1<<8;
         GPIOG->CRL&=0xfffffff0;
         GPIOG->CRL|=0x0000000b;//RS=PG0

         GPIOG->CRH&=0xfff0ffff;
         GPIOG->CRH|=0x000b0000;//CS=PG12

        3.FSMC初始化
        //寄存器清零
        //bank1有NE1~4,每一個有一個BCR+TCR,所以總共八個寄存器。
        //這里我們使用NE4 ,也就對應BTCR[6],[7]。    
        FSMC_Bank1->BTCR[6]=0X00000000;
        FSMC_Bank1->BTCR[7]=0X00000000;
        FSMC_Bank1E->BWTR[6]=0X00000000;
        //操作BCR寄存器 使用異步模式
        FSMC_Bank1->BTCR[6]|=1<<12; //存儲器寫使能
        FSMC_Bank1->BTCR[6]|=1<<14; //讀寫使用不同的時序
        FSMC_Bank1->BTCR[6]|=1<<4; //存儲器數據寬度為16bit    
        //操作BTR寄存器
        //讀時序控制寄存器    
        FSMC_Bank1->BTCR[7]|=0<<28; //模式A    
        FSMC_Bank1->BTCR[7]|=1<<0; //地址建立時間(ADDSET)為2個HCLK 1/36M=27ns  
        //因為液晶驅動IC的讀數據的時候,速度不能太快,尤其對1289這個IC。
        FSMC_Bank1->BTCR[7]|=0XF<<8;   //數據保存時間為16個HCLK  
        //寫時序控制寄存器  
        FSMC_Bank1E->BWTR[6]|=0<<28; //模式A    
        FSMC_Bank1E->BWTR[6]|=0<<0; //地址建立時間(ADDSET)為1個HCLK 
          //4個HCLK(HCLK=72M)因為液晶驅動IC的寫信號脈寬,最少也得50ns。72M/4=24M=55ns    
        FSMC_Bank1E->BWTR[6]|=3<<8; //數據保存時間為4個HCLK
        //使能BANK1,區域4
        FSMC_Bank1->BTCR[6]|=1<<0; //使能BANK1,區域4
        4.調用NT35310的初始化函數(代碼量太大就不粘貼了)

        然后就是根據數據手冊進行LCD的操作了,因為LCD是16位的所以內部的第11位連接外面的PA10,所以
        #define lcd_wr_r 0x6c000000  //寫命令 第11位為0
        #define lcd_wr_d 0x6c000800 //寫數據 第11位為1

        void LCD_WR_REG(u16 command)
        {
         *(u16*)(lcd_wr_r)=command;
        }
        void LCD_WR_DATA(u16 data)
        {
         *(u16*)(lcd_wr_d)=data;
        }

        void lcd_wr_cmd(u16 command,u16 data)
        {
         *(u16*)(lcd_wr_r)=command;
         *(u16*)(lcd_wr_d)=data;
        }

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮