本文档以单片机为标准,说明移植过程
安装好MDK-ARM,这里使用的版本是5.38。建议使用最新版本
cmsis-5 和 cmsis-6 二选一
安装cmsis-5
安装cmsis-6 + Cortex DFP
安装cmsis-dsp
安装arm-2d的pack
安装perf_counter的pack
安装ldgui的pack
安装python,安装时注意勾选添加到系统环境变量的选项
准备带屏幕的开发板,可以正常显示图片的keil项目(lcd_project)
屏幕接口
void Disp0_DrawBitmap (uint32_t x,
uint32_t y,
uint32_t width,
uint32_t height,
const uint8_t *bitmap)
ldgui源码地址
ℹ️ 关于github下载慢的问题 |
---|
推荐使用Watt Toolkit加速 |
在keil的option选项,C/C++页面,Define项,加入宏定义IP=IPR(如有其他定义,注意使用英文逗号隔开)
没有最新pack的情况下,git方式下载源码
pack install配置界面中,选择manage local repositories
加入源码中的.pdsc文件
在lcd_project中加入arm-2d、perf_counter、DSP、CMSIS、ldgui keil中选择Project -> Manage -> Run-Time Environment
选择ac6编译器,并且选择gnu11
如果使用ac5编译器,则需要选择c99和gnu支持,但是不建议使用ac5
确保keil的CMSIS版本不得低于5.7.0,查看方式,Project -> Manage -> Select Software Packs
树目录中的Acceleration,找到arm_2d_cfg.h
编辑器的左下角选择 Configuration Wizard,进入图形配置界面,配置Extra下的colour depth(默认为16位色,一般无需修改)
ldConfig配置 (重要)
ldConfig.c中的ldCfgTouchGetPoint函数是触摸接口,需要根据用户实际触摸驱动进行对接
ldConfig.h可以使用keil的图形界面方式进行配置
如果不使用打印功能,请务必将USE_LOG_LEVEL配置为LOG_LEVEL_NONE
补全ldConfig.c中的函数Disp0_DrawBitmap
测试arm-2d的demo
将ldConfig.h中的 DISP0_CFG_DISABLE_DEFAULT_SCENE 设置为0
main.c中加入代码
#include "arm_2d.h"
#include "arm_2d_disp_adapters.h"
#include "perf_counter.h"
__attribute__((used))
void SysTick_Handler(void)
{
}
int main(void)
{
system_init(); // 包括 LCD 在内的系统初始化
init_cycle_counter(false);
arm_irq_safe
{
arm_2d_init(); // 初始化 arm-2d
}
disp_adapter0_init();
while(1)
{
disp_adapter0_task();
}
}
运行效果
ℹ️ 出现Undefined symbol错误,请勿勾选microLib |
---|
如果硬要勾选microLib,编译后,提示找不到__aeabi_h2f 、__aeabi_f2h,请升级编译器(安装新版本keil) |
假设用户文件目录为user,则将createUiFile.py复制到user目录
pack文件也带该脚本,在keil安装目录下,参考路径:Keil_v5\Packs\gzbkey\LingDongGUI\版本号\tools
运行createUiFile.py(自动生成),输入需要生成的页面名称。如果需要同时生成多个页面,则直接编辑pageList.txt,在运行脚本,输入回车即可自动生成
将文件导入项目中,main.c中添加页面文件的头文件
在main函数中使用宏定义LD_ADD_PAGE,设置页面列表
#include "uiHome.h"
#include "uiZigbee.h"
#include "uiWifi.h"
int main(void)
{
sysInit();
LD_ADD_PAGE(uiHome);//Home页面序号为0
LD_ADD_PAGE(uiZigbee);//Zigbee页面序号为1
LD_ADD_PAGE(uiWifi);//Wifi页面序号为2
arm_irq_safe {
arm_2d_init();
}
disp_adapter0_init();
arm_2d_scene0_init(&DISP0_ADAPTER);
while(1)
{
disp_adapter0_task();
}
}
请善用keil的优化等级
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。