STM32F103使用FSMC模拟8080时序驱动LCD屏幕(ILI9341)+ 配置使用STemWin

上篇文章移植StemWin的时候使用的是IIC的0.96寸屏幕。

实验平台:野火指南者开发板。

本次实验将0.96寸的小屏替换为3.2寸液晶屏。首先使用CubeMX驱动屏幕,然后再移植Stemwin。

 核心概念:

FSMC通讯需要的引脚以及时序和8080引脚以及时序: 

 拥有以上基础就知道应该如何实现功能了。

================================分隔线==================================

 配置CubeMx:

除了下图这几个引脚之外,我们还需要定义LCD的Reset和BK(背光)引脚。

 ==============================分割线================================

 疑问点:上面有个图片说奇数地址和偶数地址决定D/C引脚,但是程序中给的地址却是下面这两个

 在下面的文章中找到了答案:

 除了上面的CubeMX配置,两个额外的控制LCD的引脚的驱动函数也要替换一下。注意背光引脚低电平有效,参考下图。

 

 最后写个函数测试一下,屏幕成功点亮,然后继续移植STemWin。

 

================================分割线==================================

【Stemwin配置】:

需要配置的文件就只有下面这四个,GUIDRV_Template.c我们不需要了,因为emwin支持 ILI9341驱动。

 【GUIConf.c】只有内存大小需要设置

【GUIConf.h】文件如下设置 

 重点是【LCDConf_FlexColor_Template.c】文件:

        分辨率设置:

#define XSIZE_PHYS  240 // To be adapted to x-screen size
#define YSIZE_PHYS  320 // To be adapted to y-screen size

        LCD_X_Config函数: 

 ①:GUIDRV_FLEXCOLOR的选择  、GUICC_M565的选择

 GUICC_M565的选择根据颜色来选 RGB565就是 GUICC_M565,详情看emwin手册的颜色章节。

 ②:这里根据ILI9341的参数设置

③:要填充的几个函数

#define macFSMC_ILI9341_REG *(__IO uint16_t *)(0x60000000)
#define macFSMC_ILI9341_RAM *(__IO uint16_t *)(0x60020000)


static void LcdWriteReg(U16 Data) {
  // ... TBD by user
  macFSMC_ILI9341_REG = Data;
}

/********************************************************************
*
*       LcdWriteData
*
* Function description:
*   Writes a value to a display register
*/
static void LcdWriteData(U16 Data) {
  // ... TBD by user
  macFSMC_ILI9341_RAM = Data;
}

/********************************************************************
*
*       LcdWriteDataMultiple
*
* Function description:
*   Writes multiple values to a display register.
*/
static void LcdWriteDataMultiple(U16 * pData, int NumItems) {
  while (NumItems--) {
    // ... TBD by user
    macFSMC_ILI9341_RAM = *pData++;
  }
}

/********************************************************************
*
*       LcdReadDataMultiple
*
* Function description:
*   Reads multiple values from a display register.
*/
static void LcdReadDataMultiple(U16 * pData, int NumItems) {
  while (NumItems--) {
    // ... TBD by user
    *pData++ = macFSMC_ILI9341_RAM;
  }
}

 ④:根据硬件进行选择填充的数据

其实设置就这么多,但是我也理解了一天,主要是要明白每个参数的意义,要掌握举一反三的能力才行。 

 ===============================分割线================================ 

编译运行一下,就可以看到屏幕画出了几个圈圈!!

  • 2
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
STM32F103是一款基于ARM Cortex-M3内核的微控制器,具有强大的性能和丰富的外设资源,适合用于各种嵌入式系统的开发。FSMC(Flexible Static Memory Controller)是STM32F103系列微控制器上的外设之一,用于连接外部存储器或外设,如SRAM、NOR Flash和NAND Flash等。PWM(Pulse Width Modulation)是一种常用的数字信号调制技术,可以用来控制电机、LED灯等设备的亮度和速度。 要在STM32F103配置FSMC和PWM,首先需要在芯片手册和相关的技术文档中了解这两个外设的寄存器配置和工作原理。然后,在开发环境中,可以使用ST官方提供的CubeMX或者Keil等开发工具,通过图形化界面或者C语言编程,对FSMC和PWM进行配置和初始化。 在使用STM32CubeMX进行配置时,首先选择相应型号的STM32F103芯片,然后在"Pinout & Configuration"选项卡中分配FSMC和PWM的引脚功能,接着在"Configuration"选项卡中设置FSMC和PWM的时钟、模式、分辨率等参数。最后生成代码后,将相应的初始化函数调用放入主程序中,即可实现对FSMC和PWM的配置。 在Keil等集成开发环境中,可以直接编写C语言代码来对FSMC和PWM进行配置和初始化,具体的操作步骤包括设置相应的寄存器值、配置时钟、模式和中断等。 总之,对于STM32F103系列微控制器来说,配置FSMC和PWM需要仔细阅读官方文档,了解外设的特性和工作原理,然后通过适当的工具和编程语言进行配置和初始化,从而实现对外部存储器和PWM信号的有效控制和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值