STM32F401CCU6快速移植littleVGL littleVGL是一个轻量化的开源GUI库,内存占用少(16MHz主频、64 kB Flash、16kB RAM)、界面精美、内置控件丰富、消耗资源小、可移植度高,能实现高级图形显示效。 1.CubeMX硬件配置: 主控为STM32F401CCU6,主频84MHz,256K Flash+64K RAM,屏幕为SPI接口的ili9341。主要用到TIM2、SPI1、RCC、GPIO等外设。 # J' f$ v; i3 o* K引脚定义: PC13--LED speed:low PA5--SPI1_CLK :硬件SPI speed:very high PA7--SPI_MOSI:硬件SPI speed:very high PB0--RST:复位 speed:very high PB1--RS:指令/数据 speed:very high PB2--CS:片选 speed:very high 时钟树配置 硬件SPI设置 SPI1配置为主发送模式,高位在前,CPOL为1,CPHA设为2 Edge,NSS选择软件模式。 TIM2 定时器设置 定时器2选择内部时钟源,向下计数模式,使能自动重装载寄存器,每隔1ms进入中断服务(84000000/(84*1000)=1ms),在NVIC Interrupt Table中开启定时器2中断。调试接口选择Serial Wire,时钟源选择SysTick。项目导出前将堆、栈大小设置为0x2000。 堆栈设置与库文件导出设置 2.TIM2测试、ili9341测试 (1)在main()函数中添加LL_TIM_EnableIT_UPDATE(TIM2);与LL_TIM_EnableCounter(TIM2);语句,使能定时器2更新,在stm32f4xx_it.c中补全中断服务函数,通过PC13引脚电平翻转只管判断定时器2工作状态,中断服务函数中须更新标志位。 TIM2定时器更新使能 TIM2中断服务函数 实验结果 (2)硬件SPI测试 在spi.c函数中构造SPI_WriteByte()函数,并在主函数中进行调用SPI_WriteByte(SPI1,0x4C);,通过逻辑分析仪抓取数据,判断函数工作状态。 SPI_WriteByte()函数 数据抓取 (3)ili9341移植 利用SPI_WriteByte();函数进行ili9341初始化函数移植,并保留画点函数、刷屏函数与刷屏范围函数。在主函数中利用刷屏函数进行ili9341驱动测试。 ili9341驱动函数 测试函数 测试结果 3.littleVGL移植 littleVGL移植主要是利用ili9341画点函数进行disp_flush();屏幕刷新函数的补全、初始化lv_port_disp_init();显示接口函数,并通过定时器Tim2中断服务中添加lv_tick_inc();函数,为littleVGL提供心跳。本试验采用的littleVGL版本号为7.10。 lv_conf_template.h文件重命名 将LVGL源文件中examples、src文件夹、lv_conf_template.h、lvgl.h等文件复制到lvgl文件夹中,打开lv_conf_template.h并置1,根据#ifndef LV_CONF_H将其重命名为lv_conf.h,将LV_HOR_RES_MAX与LV_VER_RES_MAX值更改为屏幕分辨率。 lv_port_disp_template.c文件 双击进入examples\porting文件夹中,存在lv_port_disp_template.c、lv_port_fs_template.c、lv_port_indev_template.c等函数,分别为底层显示、文件系统与输入设备驱动。本实验旨在利用ili9341进行GUI绘制,主要关注lv_port_disp_template.c文件。利用ili9341.c中Gui_DrawPoint()函数对disp_flush()函数进行补全、lv_port_disp_init函数保留第一种写缓存的方式,并在lv_port_disp_teplate.h中添加lv_port_disp_init()显示接口函数。在TIM2中断服务中添加lv_tick_inc(1),为littleVGL提供心跳,修改后的函数如下图所示: disp_flush()刷屏函数 littleVGL心跳 4.demo移植 下载对应版本的Demo包,保留src文件夹、lv_ex_conf_template.h与lv_examples.h文件,双击进入lv_ex_conf_template.h,将0改为1,根据#ifndefLV_EX_CONF_H将其文件名改成lv_ex_conf.h,通过更改DEMO USAGE栏的宏定义选择demo,并将demo函数添加至main()函数中。 lv_ex_conf.h文件重命名 Demo函数 主函数 实验效果图 |
基于STM32连接参数更新进程后导致断连的问题分析
基于STM32连接参数更新进程后导致断连的问题分析
STM32F3DISCOVERY + UCGUI3.90A的移植(源码+视频)
STM32MP135F-DK开发板评测-Linux系统下基于gtk的计算器应用
STM32MP135F-DK开发板评测-Linux系统下的GTK计算器
STM32MP135F-DK开发板评测-裸机LTDC亮屏
基于STM32的定时器不按设定超时产生中断
基于STM32GUI TouchGFX 屏幕切换功能经验分享
基于STM32利用TIMER事件和栈帧体验中断响应经验分享
基于STM32外部中断原理和配置代码经验分享