你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F401CCU6快速移植littleVGL

[复制链接]
dzwwzd6699 发布时间:2021-5-25 09:30
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
1.JPG
引脚定义:
       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
2.JPG
时钟树配置
3.JPG
硬件SPI设置
         SPI1配置为主发送模式,高位在前,CPOL为1,CPHA设为2 Edge,NSS选择软件模式。
4.JPG          5.JPG
  TIM2 定时器设置
     定时器2选择内部时钟源,向下计数模式,使能自动重装载寄存器,每隔1ms进入中断服务(84000000/(84*1000)=1ms),在NVIC Interrupt Table中开启定时器2中断。调试接口选择Serial Wire,时钟源选择SysTick。项目导出前将堆、栈大小设置为0x2000。
6.JPG           7.JPG
堆栈设置与库文件导出设置
2.TIM2测试、ili9341测试
      (1)在main()函数中添加LL_TIM_EnableIT_UPDATE(TIM2);与LL_TIM_EnableCounter(TIM2);语句,使能定时器2更新,在stm32f4xx_it.c中补全中断服务函数,通过PC13引脚电平翻转只管判断定时器2工作状态,中断服务函数中须更新标志位。
8.JPG
TIM2定时器更新使能
9.JPG                      10.jpg
             TIM2中断服务函数                                                                 实验结果
(2)硬件SPI测试
      在spi.c函数中构造SPI_WriteByte()函数,并在主函数中进行调用SPI_WriteByte(SPI1,0x4C);,通过逻辑分析仪抓取数据,判断函数工作状态。
11.JPG                12.JPG
SPI_WriteByte()函数                                                     数据抓取
(3)ili9341移植
       利用SPI_WriteByte();函数进行ili9341初始化函数移植,并保留画点函数、刷屏函数与刷屏范围函数。在主函数中利用刷屏函数进行ili9341驱动测试。
13.JPG
ili9341驱动函数
14.JPG           15.jpg
测试函数                                                          测试结果
3.littleVGL移植
        littleVGL移植主要是利用ili9341画点函数进行disp_flush();屏幕刷新函数的补全、初始化lv_port_disp_init();显示接口函数,并通过定时器Tim2中断服务中添加lv_tick_inc();函数,为littleVGL提供心跳。本试验采用的littleVGL版本号为7.10。
16.JPG
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值更改为屏幕分辨率。
17.JPG
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提供心跳,修改后的函数如下图所示:
18.JPG
disp_flush()刷屏函数
19.JPG
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()函数中。
20.JPG          21.JPG
lv_ex_conf.h文件重命名
22.JPG
Demo函数
24.JPG
主函数
25.jpg                    26.jpg
实验效果图
收藏 评论0 发布时间:2021-5-25 09:30

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版