野火霸道-V2+3.2寸屏+FreeRTOS+LVGL移植

摘要

  • 基于野火霸道-V2+3.2寸屏的开发板,下载器为STLINK
  • 分为两个版本,FreeRTOS和裸机版本

裸机

裸机准备

  • lvgl v8.2版本的源码
  • 野火的《触摸画板-3.2寸》与《基本定时器》的代码例程
    野火霸道-V2+3.2寸屏+FreeRTOS+LVGL移植_第1张图片

移植

  1. 将基本定时器代码移植到触摸画板-3.2寸的例程中,实现LED的正常反转
    野火霸道-V2+3.2寸屏+FreeRTOS+LVGL移植_第2张图片
  2. 将lvgl的源码移植到工程里,此处可以参考正点原子的视频
    野火霸道-V2+3.2寸屏+FreeRTOS+LVGL移植_第3张图片
  3. 修改lv_port_disp_template文件
    • 实现disp_init函数并将缓冲区方法设置为1或者2,要注意ILI9341_Init函数里扫描方向要设置为3
      野火霸道-V2+3.2寸屏+FreeRTOS+LVGL移植_第4张图片野火霸道-V2+3.2寸屏+FreeRTOS+LVGL移植_第5张图片
      野火霸道-V2+3.2寸屏+FreeRTOS+LVGL移植_第6张图片
    • 实现disp_flush函数,ILI9341_DrawPixel函数需要自己加上,并添加到头文件里
      野火霸道-V2+3.2寸屏+FreeRTOS+LVGL移植_第7张图片野火霸道-V2+3.2寸屏+FreeRTOS+LVGL移植_第8张图片
  4. 修改lv_port_indev_template文件
    • 注释掉不用的函数,保留触摸相关函数 -野火霸道-V2+3.2寸屏+FreeRTOS+LVGL移植_第9张图片

    • 实现touchpad_init,touchpad_is_pressed,touchpad_get_xy函数

    • XPT2046_TouchDetect是内部函数,注意将其在头文件声明野火霸道-V2+3.2寸屏+FreeRTOS+LVGL移植_第10张图片

  5. 在定时器中断回调函数中,调用lv_tick_inc(1),给LVGL提供时钟源
    野火霸道-V2+3.2寸屏+FreeRTOS+LVGL移植_第11张图片
  6. 主函数如图所示
    野火霸道-V2+3.2寸屏+FreeRTOS+LVGL移植_第12张图片
  7. Hello world的代码效果是蓝底上显示Hello world,Button的代码效果是有个按键触摸能够滑动
注意
  • 头文件LV_CONF中的LV_MEM_SIZE 这个宏定义请注意大小,我设的25kb,太大可能导致报错No space
  • lv_port_disp_template中的缓冲区, static lv_color_t buf_1[MY_DISP_HOR_RES * 20],20这个数也别太大,大了显示的更快,但也可能报错No space

RTOS

RTOS准备

  • FreeRTOS的触摸画板例程

移植

  • RTOS不再赘述,只需要注意别忘记在SysTick_Handler中调用xPortSysTickHandler
    野火霸道-V2+3.2寸屏+FreeRTOS+LVGL移植_第13张图片
  • 完成后,创建任务测试任务调度运行情况,画板是否可以画画,LED灯是否翻转

lvgl移植

  1. 继续移植LVGL源码,与裸机相同
  2. 实现disp和indev文件,与裸机相同
  3. 自定义tick源,LV_TICK_CUSTOM设置为1,不需要定时器中断
    在这里插入图片描述
  4. main文件内容
    野火霸道-V2+3.2寸屏+FreeRTOS+LVGL移植_第14张图片
    野火霸道-V2+3.2寸屏+FreeRTOS+LVGL移植_第15张图片
注意
  1. FreertosConfig头文件中,也需要申请数组空间,configTOTAL_HEAP_SIZE,我在此设置的15kb
  2. lv_port_disp_template中的缓冲区lv_color_t buf_1,我设置了10行
  3. LV_MEM_SIZE宏定义设置为20kb,这几个参数不合适很容易报错No space
  4. 如果使用的是正点的lv_conf头文件,LV_MEM_ADR记得设置为0
  5. LVGL模板资源
    野火霸道-V2+3.2寸屏+FreeRTOS+LVGL移植_第16张图片

你可能感兴趣的:(单片机)