开发板:野火指南者(STM32F103VE)
STM32库版本:STM32F10x_StdPeriph_Lib_V3.5.0
IDE:KEIL5(代码编写很不方便,只在编译的时候用到)
代码编写工具:Source Insight 4.0(跟读代码、编写代码的最佳工具)
硬件原理图:
新建user_fsmc_lcd.h、user_fsmc_lcd.c、main.c 3个文件,并从STM32官方库的例子中将stm32f10x_it.c、stm32f10x_it.h、stm32f10x_conf.h拷贝到自己的工程目录下。


1 #ifndef __USER_FSMC_LCD_H 2 #define __USER_FSMC_LCD_H 3 4 #include "stm32f10x.h" 5 6 #define LCD_CMD ((uint32_t)0x60000000) 7 #define LCD_DATA ((uint32_t)0x60020000) 8 9 #define TEXTCOLOR 0xF800 10 #define BACKGROUND 0x0000 11 12 13 14 void time_delay(uint32_t t); //时间延时函数 15 void user_lcd_display_string(char * pchar); //显示英文字符串函数 16 void user_lcd_fill_color(uint32_t fill_lcd, uint16_t color); //整个屏幕填充的颜色函数 17 void user_lcd_clear(void); //清屏函数,将屏幕配置为黑色 18 void user_lcd_display_char(uint16_t x, uint16_t y, char ch); //单个字符显示函数 19 void user_View_Window(uint16_t lcd_x, uint16_t lcd_y, uint16_t lcd_width, uint16_t lcd_height); //初始化整个屏幕 20 void user_LCD_Init(void); //LCD初始化函数 21 void user_LCD_Scan(void); //LCD扫描函数,这里配置为模式六,即X--240, Y--320,X从左到右,Y从上到下扫描 22 void user_LCD_DATA(uint16_t data); //LCD数据写入函数 23 void user_LCD_CMD(uint16_t cmd); //LCD命令操作函数 24 void user_LCD_REG_Config(void); //LCD对应的IC控制寄存器配置函数,这个配置与LCD上控制芯片相关,如何配置应该是向供应商获取的 25 void user_FSMC_Config(void); //FSMC配置函数 26 void user_LCD_BL(FunctionalState Status); //LCD背光信号控制函数 27 void user_LCD_RST(FunctionalState Status); //LCD复位信号控制函数 28 void user_LCD_GPIO_Config(void); //LCD相关GPIO PIN初始化函数 29 30 31 32 #endif




1 #include "stm32f10x.h" 2 #include "user_fsmc_lcd.h" 3 4 5 int main(void) 6 { 7 user_LCD_Init(); 8 9 //user_LCD_Scan(); 10 11 while(1) 12 { 13 user_lcd_clear(); 14 15 user_lcd_display_string("it's test!"); 16 17 time_delay(0xFFFFFF); 18 19 } 20 21 }
总结:
2. 本实验有个很奇怪的现象就是,每次开关开发的电源时,LCD会白屏一段时间,其多次开关后,会一直白屏,原因暂未找到
实验源码:
链接:https://pan.baidu.com/s/1xo0L4i4MnQllpgtzd1n2Hg
提取码:whaa