如何使用STMWin图形库并从CubeMX工具默认配置开始为STM32F469探索板构建GUI应用程序?
当选择ST开发板(如STM32F469 Discovery 1)时,建议使用一些默认设置(即启用和配置了一些外围设备)。
如果启用了GUI(图形用户界面)所需的所有外围设备,则它们的配置需要一些调整,此外,就GUI应用程序而言,还启用了一些无用的外围设备。
最后,生成的代码也需要更新,以应对CubeMX中的一些已知限制。
本文将指导客户完成以下3个步骤:
  1. 禁用不需要的外围设备
  2. 调整所需配置
  3. 修复生成的源代码
本教程适用于CubeMX 5.3.0,特别是步骤3可能在未来版本中变得不必要。
下面的步骤分为两部分,第一部分对所有IDE都是通用的。
对于Atolic、AC6 System Workbench和CubeIDE,您也可以按照第二节的步骤进行操作。

1.所有IDE

1.1。启动CubeMX并从Board Selector(板选择器)列表中选择STM32F469 Discovery,然后单击“Start Project(启动项目)”

注意:对于CubeIDE,遵循相同的步骤,但从CubeIDE启动CubeMX,接口是相同的。
 

1.2、。单击对话框中的“是”,同意将外围设备初始化为其默认设置

1.3。将外围设备列表更改为A->Z过滤

1.4。开始禁用一些无用的(从GUI应用程序的角度来看)外围设备

脂肪:取消选中“SD卡”
I2C1型:设置为“禁用”
I2C2型:设置为“禁用”
SAI1型:将SAI A模式设置为“禁用”
SDIO公司:将模式设置为“禁用”
美国3:将模式设置为“禁用”
美国第6条:将模式设置为“禁用”
美国邮政:将FS IP的类设置为“禁用”
USB_OTG_FS公司:将模式设置为“禁用”

1.5中。更新某些外围设备的配置

低密度直流电-模式:设置显示器类型至“RGB565(16位)-DSI模式”
低密度直流电-配置-参数设置:设置活动宽度至400
低密度直流电-配置-图层设置:设置第0层窗口水平停止至400
低密度直流电-配置-图层设置:设置层0颜色帧缓冲区行长度至400
二次似然-配置-显示界面:设置最大命令大小至400
图形-模式-图形框架:选择“STemWin”
图形-模式-显示接口:选择“使用LTC-DSIHOST显示串行接口”
图形-配置-参数设置:将“用户GUIBuilder工具”设置为“启用”
图形-配置-参数设置:设置物理显示器尺寸-X尺寸至“800”
图形-配置-平台设置:选择PH7作为LCD复位引脚

1.6。从“项目管理器”->“项目”部分的列表中选择IDE

1.7、。生成代码一次

1.8。返回引脚输出和配置,然后在GRAPHICS外围设备中
在配置中,单击执行启动GUIBuilder

1.9中。在GUIBuilder中,我们只需添加一个按钮

1.10。选择“文件->保存”,同意覆盖现有文件

1.11。关闭GUIBuilder并再次生成代码


2.代码编辑

硬件_信息.c 需要手动更新,取决于所选的IDE,此文件位于目标文件夹中或src公司
需要更新:
代替OTM8009A_方位_肖像通过OTM8009A_方位_横向 在里面OTM8009A_初始化呼叫:
解释
此发现板上的DSI显示器具有特殊性,可强制将其刷新分为两个步骤,以避免闪烁。
就LTCC和DSI而言,显示器的宽度被设置为400而不是800。
不幸的是,指定将被传输到显示器低级驱动器的显示器方向的参数是基于从LTCC配置中提取的宽度和高度之间的比率。
在这种情况下,宽度小于高度,因此选择PORTRAIT模式,景观变灰:

这就是为什么必须直接在源代码中进行修改每次从CubeMX重新生成代码时都必须再次执行


3.基于Eclipse的IDE(Atolic、AC6 System Workbench、CubeIDE)

对于这些IDE,与CubeMX中配置的重置引脚相对应的源代码没有正确生成,必须手动完成。
打开Stemwin_wrapper.c公司文件,查找LCD_L_Reset(无效)函数声明,并将其替换为:

静态无效LCD_L_Reset(无效)
{
/*激活XRES激活低*/
HAL_GPIO_WritePin(GPIOH、GPIO_PIN_7、GPIO_PIN_RESET);
HAL_播放(20);/*等待20毫秒*/
/*去活化XRES*/
HAL_GPIO_WritePin(GPIOH、GPIO_PIN_7和GPIO_PIN_SET);
/*释放XRES后等待10ms,然后再发送命令*/
HAL_延迟(10);
}

然后在图形_HW_Init()函数,调用函数:

无效GRAPHICS_HW_Init(无效)

MX_FMC_Init();
MX_SDRAM_InitEx();
  /*用户代码开始LCD_reset_pin*/
LCD_LL_Reset();
/*用户代码结束LCD_reset_pin*/

MX_LCD_Init();/*LTCC结构、层结构*/
MX_DMA2D_Init();
DMA2D_Init();
MX_DSI_Init();
}


本教程到此结束,我希望它会有所帮助。
 

客户注意事项:
1) 您可以通过点击“创建者”信息中提供的姓名来联系这篇文章的作者。
2) 所有其他评论或反馈你可以通过电子邮件发送到community@st.com
3.)如果您需要特定(产品)支持请咨询我们的支持中心(https://www.st.com/content/st_com/en/support/support-home.html)您可以从各种在线支持选项中进行选择,并选择最符合您要求的服务。