由于要通过fsmc驱动TFTLCD,计划参考下FSMC驱动sdram在RT-Thread studio下看了下没找到使能SDRAM的地方,看了其他教程需要在ENV中开启,我使用的是正点原子的探索者F407,则在RT-Thread的rt-thread-master\rt-thread-master\bsp\stm32\stm32f407-atk-explorer目录下打开ENV,进入Onborad Peripheral Drvers中没有找到SDRAM,只找到了SRAM。我尝试了下在stm32f767-atk-apollo、stm32f429-atk-apollo目录下打开ENV能够找到SDRAM的驱动,具体为啥F407没有。原因还不明。

FSMC:灵活的静态存储控制器,能够与同步或异步存储器和16位PC存储卡连接,STM32F407的FSMC接口支持包括SRAM、NAND FLASH、NOR FLASH和PSRAM等存储器。

在这里,准备用TFTLCD测试下FSMC接口,驱动TFTLCD屏幕显示可以理解为通过FSMC接口像读写外部SRAM基本一样,把需要显示的数据,写入9341的显存就可以完成显示操作,一般的SRAM的控制一般有:地址线(如A0~A18)、数据线(如D0~D15),写信号WE、读信号OE、片选信号CS,如果SRAM支持字节控制,那么还有UB/LB信号。而TFTLCD的信号包括:RS、D0~D15、WR、RD、CS、RST和BL等,其中在操作TFTLCD时,用到的仅有RS、D0~D15、WR、RD、CS。TFTLCD操作的时序和SRAM的控制完全类似,不同的是TFTLCD有RS信号,但是没有地址信号。

TFTLCD通过RS信号来决定传输的数据是数据还是命令。

STM32F4的FSMC支持8/16/32位数据宽度,正点原子的LCD的16位宽度。

STM32F4的FSMC将外部存储器划分为固定大小为256M字节的四个存储块。从图里可得出,FSMC最高可管理1G的外部空间,拥有4个存储块,使用块1驱动TFTLCD。

第一个存储块被分成了4个区,每个区管理64M字节空间,寻址空间如下图

中途去忙其他事了,又得从头来慢慢学起。

我这里使用的是正点原子的4.3 TFTLCD屏幕,驱动IC是9341,这里引用屋脊雀写的FSMC-TFTLCD调试记录的内容:

在红色框1: 说明的9341这个IC支持RGB、串口、MCU接口,其中MCU接口就是6800或8800时序口,正点原子的屏幕对应的是8800口。

红色框2:就是9341的显存,驱动lcd就是将显示数据写到这个地方

红色框3和4:9341跟屏幕连接的地方。

接下来看下TFTLCD的引脚定义

1号引脚CS是片选信号,2号引脚RS是写命令/数据选择(0:命令,1:数据),3号引脚WR是控制向TFTLCD写入数据,4号引脚RD是从TFTLCD读取数据,5号引脚RESET是屏幕的复位信号,6-21引脚是双向数据线,22、26、27是地,23号引脚LCD_BL是背光控制,24、25、28是3.3V电源。28是5V电源,29、30、31、33、34为触摸控制信号。

接下来就是在STM33cubemx中设置FSMC,生成代码。

到  https://github.com/RT-Thread/rt-thread/tree/master/bsp/stm32/stm32f407-atk-explorer/board/ports  https://github.com/RT-Thread/rt-thread/tree/master/bsp/stm32/stm32f407-atk-explorer/board/ports地址下载drv_lcd.c/drv_lcd.h,并复制到工程的drivers文件夹下,并将其添加到工程中。到stm32f4xx_hal_conf.h中找到取消#define HAL_SRAM_MODULE_ENABLED的注释(注意不是HAL_SDRAM_MODULE_ENABLED)编译通过。

在drv_lcd.h中加入以下代码,用以指定画笔颜色。

//画笔颜色
#define WHITE            0xFFFF
#define BLACK            0x0000
#define BLUE             0x001F
#define BRED             0XF81F
#define GRED             0XFFE0
#define GBLUE            0X07FF
#define RED              0xF800
#define MAGENTA          0xF81F
#define GREEN            0x07E0
#define CYAN             0x7FFF
#define YELLOW           0xFFE0
#define BROWN            0XBC40
#define BRRED            0XFC07
#define GRAY             0X8430#define DARKBLUE         0X01CF
#define LIGHTBLUE        0X7D7C
#define GRAYBLUE         0X5458#define LIGHTGREEN       0X841F
#define LGRAY            0XC618#define LGRAYBLUE        0XA651
#define LBBLUE           0X2B12

在main.c中输入以下代码,编译、下载、在串口控制台输入lcd_fill,屏幕就开始刷新了。

void lcd_fill(int argc, void **argv)
{static rt_uint8_t lcd_init = 0;rt_device_t lcd = RT_NULL;rt_uint8_t x=0;if(lcd_init == 0){lcd_init = 1;lcd = rt_device_find("lcd");//获取设备句柄rt_device_init(lcd);//初始化lcd}while(1){switch(x){//填充颜色测试case 0:LCD_Clear(WHITE);break;case 1:LCD_Clear(BLACK);break;case 2:LCD_Clear(BLUE);break;case 3:LCD_Clear(RED);break;case 4:LCD_Clear(MAGENTA);break;case 5:LCD_Clear(GREEN);break;case 6:LCD_Clear(CYAN);break;case 7:LCD_Clear(YELLOW);break;case 8:LCD_Clear(BRRED);break;case 9:LCD_Clear(GRAY);break;case 10:LCD_Clear(LGRAY);break;case 11:LCD_Clear(BROWN);break;};x++;if(x==12)x=0;rt_thread_mdelay(1000);}}
MSH_CMD_EXPORT(lcd_fill, lcd fill test for mcu lcd);

新人刚刚入手玩RTT,记录得有点乱,请大佬们轻喷。

RT-Thread studio学习笔记5-stm32F407 FSMC驱动TFTLCD相关推荐

  1. STM32 + RT Thread OS 学习笔记[五]

    1.  触摸屏驱动 触摸屏驱动的原理非常简单,从硬件得到坐标数据,数据加工(适配屏幕分辨率,偏移量调整),最后调用rtgui_server_post_event()函数向GUI服务端发送坐标信息. 奋 ...

  2. RT-Thread studio学习笔记6:触摸驱动

    在完成了TFTLCD驱动后,在使用LVGL之前,需驱动触摸芯片. 第一步,确认TFTLCD的触摸芯片,我这里用的是正点原子的TFTLCD的4.3寸电容触摸屏,在官方文档中,说是使用了OTT2001A. ...

  3. ROBOT STUDIO 学习笔记

    ROBOT STUDIO 学习笔记 机器人行业四大家族:库卡.ABB.安川.发那科 1.新建工作站 1.模型的插入 机器人 控制柜 末端执行器 工作台的插入 显示机器人的工作区域 将工作台移动到机器人 ...

  4. Android Studio --- [学习笔记]TCP(第2弹)、GridView、ScrollView

    说明 这篇主要接上一篇Android Studio - > [学习笔记]RadioButton.CheckBox.ImageView.ListView.TCP的三次握手 对上面回答的细解,并用J ...

  5. Android Studio --- [学习笔记]RadioButton、CheckBox、ImageView、ListView、TCP的三次握手

    说明 源代码 在2.x里有TCP的三次挥手与四次握手,先对它进行简单的回答(百度).预计在下一篇里,会继续说明TCP 接上一篇: Android Studio - > [学习笔记]Button. ...

  6. rt thread studio使用QBOOT和片外flash实现OTA升级

    我们这里要使用单片机外部flash作为OTA的下载分区,外部flash硬件连接关系 PB3-->SPI3_CLK PB4-->SPI3_MISO PB5-->SPI3_MOSI PE ...

  7. 安卓开发Android studio学习笔记12:读取解析XML(案例演示)

    Android studio学习笔记 第一步:配置Student.XML 第二步:配置activity_main.xml 第三步:配置student.xml 第四步:配置Student用户类 第五步: ...

  8. 【PIE-Engine Studio学习笔记05】图像分类——非监督分类

    [PIE-Engine Studio学习笔记05]图像分类--非监督分类 一.图像分类含义 图像分类是将图像中每个像元根据其在不同波段的光谱亮度.空间结构特征或者其他信息,按照某种规则或算法划分为不同 ...

  9. RT Thread利用STM32CUBEMX和RT Thread studio来创建模板工程

    (1)RT Thread利用STM32CUBEMX来创建模板工程 1.参考文档: 基于 CubeMX 移植 RT-Thread Nano:RT-Thread 文档中心 注意:串口2必须使能异步模式(启 ...

最新文章

  1. java中的随机生成算法_Java生成随机时间的简单随机算法
  2. 20155317《网络对抗》Exp4 恶意代码分析
  3. 浏览器地址栏运行HTML代码(谷歌)
  4. 分布式服务框架原理(一)设计和实现
  5. python2和python3的不同点_Python2和Python3的区别,新手学习Python应该如何选择
  6. 缺失值处理 - 拉格朗日插值法 - Python代码
  7. CentOS下如何配置LAMP环境
  8. 【Spring】模块
  9. polybase配置 sql_安装SQL Server 2016时提示“Polybase要求安装Oracle JRE 7更新51或更高版本”错误的解决方式...
  10. Linq 学习笔记(一)
  11. PHP使用redis防止大并发下二次写入
  12. 办公必备的WPS Office 2021 for mac(wps 2021中文版)
  13. UG NX 工程图视图概述
  14. STM32个人笔记--GPIO框图
  15. android 耗电分析工具,使用Battery Historian工具分析Android耗电分析
  16. iOS开发中如何理解“iPhone X不支持指纹”
  17. [USACO 2.2.1] Preface Numbering
  18. asp.net909-大型社区包裹代收与分发系统
  19. c语言strcat()/strcat_s()函数详解
  20. 洛克菲勒给他儿子的信

热门文章

  1. Ubuntu22.04卸载删除软件去除deb包
  2. 夜光:车载通讯系统详细设计 (一)
  3. c语言编写机床宏程序,数控车床宏程序运用的探索
  4. 虚幻与Unity引擎 之 ✨ 为什么国内那么多开发者喜欢用虚幻或者Unity?
  5. html文本角标设计,css实现角标
  6. 阿斯汤加瑜伽(Ashtanga Yoga)第一序列学习与实践笔记(二)
  7. matlab 奇异值求逆,你好,请问matlab对奇异矩阵求逆你有好的方法吗?
  8. 百胜道闸安装注意事项
  9. 利用python实时获取公网IP地址
  10. Termux安装与配置+python环境配置