⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 STM32 FSMC中文资料及FSMC控制LCD例程
💻 C
字号:
#include <iostm32f10xxE.h>
#include "stm32f10x_it.h"
/*******************尚文欢  shangwenhuan@126.com*********************/

volatile unsigned long en=0;
/*********************************************************************/
volatile void delay_us(unsigned int tmr){  
  while(--tmr);
}
volatile void delay_ms(unsigned int tmr){
  while(tmr--){
    delay_us(1000);
  }
}
/**********************************************************************/
volatile void MCU_PWR_INITIAL (void){
    PWR_CR |= (7<<5)|(1<<4);     //enable PDR PVD=2.9V
}
/**********************************************************************/
volatile void MCU_CLK_INITIAL (void){
    RCC_CR |= (1<<16);
    RCC_CR &= ~(1<<0);    
    RCC_CFGR |= (4<<24)|(2<<18)|(1<<17)|(1<<16)|(2<<2)|(2<<0);
    RCC_CFGR |= (4<<8); //APB1 36MHz
    RCC_CR |= (1<<24);
}
/**********************************************************************/
volatile void SysTick_intial (void){
    SYSTICKRVR = 40000;//10ms
    SYSTICKCSR |= (1<<1)|(1<<0);//systick clk from AHB
}
/**********************************************************************/
/**********************************************************************/
volatile void USART1_INITIAL (void){
    RCC_APB2RSTR |= (1<<14);
    RCC_APB2RSTR &= ~(1<<14);
    RCC_APB2ENR |= (unsigned long)(1<<14);//enable the clk of USART1
    USART1_CR1 |= (unsigned long)(1<<13);//enable USART1 
    USART1_BRR |= (unsigned long)0xd05;//Budrad = 9600
    USART1_CR1 |= (unsigned long)(1<<3); 
    USART1_CR1 |= (unsigned long)(1<<2);
}
/**********************************************************************/
/**********************************************************************/
volatile void GPIO_INITIAL (void){
    RCC_APB2ENR |= (1<<8)|(1<<7)|(1<<6)|(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<0);
    
    GPIOA_CRH = 0x444444bb; //PA 15~8
    GPIOA_CRL = 0x44444444; //PA 7 ~0
    
    GPIOB_CRH = 0x44444444; //PB 15~8
    GPIOB_CRL = 0x44444444; //PB 7 ~0
    
    GPIOC_CRH = 0x99999999;//PC 15~8
    GPIOC_CRL = 0x44424444;//PC 7 ~0
    
    GPIOD_CRH = 0x99999999;//PD 15~8
    GPIOD_CRL = 0x99999999;//PD 7 ~0
    
    GPIOE_CRH = 0x99999999;//PE 15~8
    GPIOE_CRL = 0x99999944;//PE 7 ~0
    
    GPIOF_CRH = 0x99994444;//PF 15~8
    GPIOF_CRL = 0x44999999;//PF 7 ~0
    
    GPIOG_CRH = 0x49999994;//PG 15~8
    GPIOG_CRL = 0x44999999;//PG 7 ~0
}
/**********************************************************************/
volatile void FSMC_INITIAL (void){
    RCC_AHBENR |= (1<<8); // enable FSMC clk
    FSMC_BCR3 |= (1<<0);    
}
/**********************************************************************/
volatile void MCU_SYS_INITIAL (void){
    MCU_PWR_INITIAL ();
    MCU_CLK_INITIAL ();
    SysTick_intial ();
    GPIO_INITIAL ();
    USART1_INITIAL ();
    FSMC_INITIAL ();
}
/**********************************************************************/
void SysTickHandler(void)
{
  if(en<100) en++;
  else en=0;
}

void USART1_TRAN (unsigned char temp){ 
      USART1_DR = temp; 
}
/**********************************************************************/
unsigned short *LCD_Index  = (unsigned short *)0x68000000;
unsigned short *LCD_DATA = (unsigned short *)0x68ff0000; 
/**********************************************************************/
volatile void TFT_LCD_INITIAL (void){
    GPIOC_ODR &= ~(1<<4);
    delay_ms(2000);
    GPIOC_ODR |= (1<<4);
    delay_ms(100);
    *LCD_Index = 0x0007;
    *LCD_DATA  = 0x0000;
    *LCD_Index = 0x0012;
    *LCD_DATA  = 0x0000;
    delay_ms(20);
    *LCD_Index = 0x0000;
    *LCD_Index = 0x0000;
    *LCD_Index = 0x0000;
    *LCD_Index = 0x0000;
    delay_ms(10);
    *LCD_Index = 0x00a4;
    *LCD_DATA  = 0x0001;
    *LCD_Index = 0x0060;
    *LCD_DATA  = 0x2700;
    *LCD_Index = 0x0008;
    *LCD_DATA  = 0x0503;
    //GAMMA SETTING
    *LCD_Index = 0x0007;
    *LCD_DATA  = 0x0001;
    *LCD_Index = 0x0017;
    *LCD_DATA  = 0x0001;
    *LCD_Index = 0x0010;
    *LCD_DATA  = 0x10b0;
    *LCD_Index = 0x0011;
    *LCD_DATA  = 0x0117;
    *LCD_Index = 0x0012;
    *LCD_DATA  = 0x011a;
    *LCD_Index = 0x0013;
    *LCD_DATA  = 0x0a00;
    *LCD_Index = 0x0029;
    *LCD_DATA  = 0x000b;
    *LCD_Index = 0x0012;
    *LCD_DATA  = 0x013a;
    //USER DISPLAY MODE SETTING
    *LCD_Index = 0x0020;
    *LCD_DATA  = 0x0000;
    *LCD_Index = 0x0021;
    *LCD_DATA  = 0x0000;
    //DISPLAY ON SEQUENCE
    *LCD_Index = 0x0022;
    *LCD_DATA  = 0xffff;
    
} 
void main(void)
{    
  //unsigned char j;
  MCU_SYS_INITIAL();
  TFT_LCD_INITIAL();
  while(1){      
    if(USART1_SR & (1<<5)){                 
        //GPIOF_ODR ^= (1<<6);
        USART1_TRAN (USART1_DR);
        delay_ms(10);
    }
  }    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -