Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
LCD
NXP 微控制器
基于FRDM-MCXN94的TFT模块评测
发布于 2024-04-23 19:31:49 浏览:354
订阅该版
[tocm] # 前言 首先感谢RTT官方与NXP官方共同举办的FRDM-MCXN947的评测活动,本人获得的任务是对TFT模块进行上手实践 # 硬件介绍 FRDM-MCXN947采用了NXP最新推出的MCX N94x芯片,基于双ARM-Cortex-M33内核,运行频率高达150Mhz,拥有丰富的外设,如最大2MB的闪存,最大512KB的SRAM,各种丰富的通信外设,以太网,USB FS/HS, CAN FD、I3C等等,还拥有高速16位ADC,12位和14位的DAC等等等等,最关键的一点还是该芯片里面加入一颗神经网络加速器eIQ NPU,可以用来跑机器学习。 直接看NXP官网对N94x的架构图更为清晰: ![架构图.png](https://oss-club.rt-thread.org/uploads/20240423/efa10f145093f225f15cf77e9e7be398.png.webp) 本次上手实践使用到的模块为FlexIO与eDMA。 1、FlexIO介绍:根据在NXP官方查找的资料中显示是一种能够模拟串行通信协议的模块,可以用来模拟uart、i2c、spi这一类的通信接口,按照本人的理解就是它们这么多引脚可以通过寄存器设置成相对应的串行通信模块,给予了用户极大的IO口自由。FlexIO是由移位器,定时器与引脚组成的,数据加载到移位器中,定时器生成相应的时钟信号通过引脚传输移位器中的数据。 2、eDMA介绍:eDMA则是一种增强型的DMA技术,eDMA在传统DMA只能内存到外设,外设到内存的简单数据传输的基础上进行了增强,根据NXP社区大佬的描述与查询到的资料,eDMA拥有更为灵活的配置,存在一个非常关键的传输控制描述符TCD,eDMA根据TCD的设置来灵活的传送各种数据。 #驱动TFT 首先下载了RTThread的软件包 ```c git clone https://github.com/RT-Thread/rt-thread.git ``` 务必将软件包下载到全英文目录下,保证RTThread的开发辅助工具Env与IDE平台keil的正常运行。 下载完成后,通过目录\rt-thread-master\bsp\nxp\mcx\mcxn\frdm-mcxn947进行第一次编译 ![首次编译.png](https://oss-club.rt-thread.org/uploads/20240423/14bfea95333fb34131c722da62de03ab.png) 有几个warning,关于分散加载文件的定义的,也有重复定义字段的。但是不重要,能跑就行,下载到开发板试试。 串口助手接收到如下信息: ![串口助手消息.png](https://oss-club.rt-thread.org/uploads/20240423/19341bd4872c2871e3154e19f6152b9e.png) RTThread顺利跑起来了,接下来需要使用Env助手来裁剪RTThread开发包,制造一个最小系统,保证不能引入其他BUG,减少失误的可能性。根据RTThread官网的消息安装完成Env之后,来到之前打开工程的目录处右击鼠标选择ConEmu Here打开Env工具,然后输入menuconfig开始图形化配置软件包。 ![Env裁剪.png](https://oss-club.rt-thread.org/uploads/20240423/d0aa6bbe8b896cfc2f62d93cbaf876de.png) 本人就只保留了串口与GPIO,根据官网的介绍来一步步操作,裁剪软件包还是很爽的,不需要浪费时间与大脑,点点点图形配置就好。 最后使用scons --target-mdk5生成工程,再次烧录,串口依然是相同的信息流传输,RTThread运行良好。 至此,RTThread这边的平台就已经准备完毕。 接下来,来到NXP的官网,在官网注册一个账号之后,搜索FRDM-MCXN947可以找到这次的开发板,在开发板的介绍页面可以找到开发资料的各种资料,然后可以找到芯片页面MCX-N94X-N54X,在芯片页面可以找到使用手册与数据手册等等资料。最后在software模块找到MCUXpresso Software Development Kit (SDK),点击进入在download模块处可以找到MCUXpresso SDK - SDK Builder,进入后就能够自行构建一个SDK用于芯片开发。 ![芯片介绍.png](https://oss-club.rt-thread.org/uploads/20240423/90b84bb111fd55c34055d8322b4b4f83.png.webp) ![SDK生成.png](https://oss-club.rt-thread.org/uploads/20240423/2cd94a978c48678b2e3e3d6312f9e0b2.png.webp) 因为本人只需要驱动TFT屏幕,所以只构建了一个包含LVGL的SDK文件包,如下图所示: ![构建SDK.png](https://oss-club.rt-thread.org/uploads/20240423/5893140c228f8522491cb1fd8853d47e.png.webp) 不得不说,NXP的这个SDK Builder界面相当的友好,拥有中文页面,完全傻瓜式的操作,也是点点点就完成了需要的SDK构建,很舒服。 下载完成之后,解压并且打开目录SDK_2_14_0_FRDM-MCXN947\boards\frdmmcxn947\lvgl_examples\lvgl_demo_benchmark_bm\cm33_core0\mdk下的工程进行编译,结果如下: ![编译NXPSDK.png](https://oss-club.rt-thread.org/uploads/20240423/d3ebe48c52c65b285d8e44b861abf35c.png) 关于硬件方面:本人因为需要实践TFT上手,所以必须拥有一块屏幕,此时特意在NXP官网上寻找到与开发板配套的LCD-PAR-S035屏幕,苦于NXP官方需要29美刀,为了经济实用的角度,根据了NXP的SDK猜测了屏幕的规格与参数,在淘宝购买了一块“青春版”屏幕。不过可惜的是并不是完全替代,购买之后才发现官网中有设置资料,直接有屏幕的厂商信息,拥有厂商信息之后购买即可,还是犯了偷懒的错误。当连线图如下: ![硬件连线图.jpg](https://oss-club.rt-thread.org/uploads/20240423/ff4426d764253d8476597df298ec7cfe.jpg.webp) 基本是按照板子上的丝印标识进行连接,但是本人购买的这块屏幕没有TE引脚,所以将开发板的TE脚悬空。 设置一下NXP的工程,在工程board目录下的lvgl_support.h中的BOARD_LCD_S035使能,SMARTDMA失能,因为暂时不明白SMARTDMA原理,所以暂时不启用,编译并下载,效果如下: [SDK效果.mp4](https://club.rt-thread.org/file_download/d74d59c8c9650788) 该工程完整的运行证明了硬件连接与设置没有问题,接下来将驱动移植到RTThread平台进行测试。首先使用Env工具添加lvgl软件包到RTThread工程中,然后按照RTT官网的移植指南RT-Thread文档中心->RT-Thread标准版本->软件包->LVGL用户手册->BSP的对接与移植中进行移植准备 首先创建lv_conf.h到applications中的新建文件夹lvgl中,然后移植NXP官方的lvgl_support.h/.c。最后将关联驱动文件加入RTThread的工程中。 具体的关联文件有:fsl_dbi_flexio_edma.h/.c,fsl_flexio_mculcd_edma.h/.c,fsl_flexio_mculcd.h/.c,fsl_st7796s.h/.c,fsl_gt911.h/.c,fsl_inputmux_connections.h,fsl_inputmux.h/.c等等,估计会有所遗漏或者增加,本人是直接按照keil的指示一步步进行添加的。实在抱歉,然后在RTThread工程的rt_hw_board_init()中添加时钟与引脚初始化 移植过程中可能会存在驱动库文件的冲突,因为本人下载的是官网全新的驱动包版本为2.14.0,如果存在冲突的情况,请使用最新的NXP驱动进行替换 ```c CLOCK_SetClkDiv(kCLOCK_DivFlexcom2Clk, 1u); CLOCK_AttachClk(kFRO12M_to_FLEXCOMM2); CLOCK_SetClkDiv(kCLOCK_DivFlexioClk, 1u); CLOCK_AttachClk(kPLL0_to_FLEXIO); /*init LCD pin */ BOARD_InitLcdPins(); ``` 根据RTThread官网的移植攻略,需要添加lv_rt_thread_port.c中三个函数lv_port_disp_init、lv_port_indev_init 和 lv_user_gui_init,其中前两个函数已经由NXP官方的lvgl_support.h/.c提供,只需要搞一个用户函数即可,函数如下: ```c void lv_user_gui_init(void) { /* display demo; you may replace with your LVGL application at here */ // extern void lv_demo_music(void); // lv_demo_music(); lv_obj_t * btn = lv_btn_create(lv_scr_act()); lv_obj_set_pos(btn, 10, 10); // 设置位置 lv_obj_set_size(btn, 120, 50); // 设置大小 lv_obj_t * label = lv_label_create(btn); lv_label_set_text(label, "Click me"); // 设置标签文本 } ``` 为了测试移植的成功与否,先设置一个按钮看看具体情况再跑lvgl的demo,编译并下载 ![首次RTTLVGL编译.jpg](https://oss-club.rt-thread.org/uploads/20240423/cd8d83da6ff81f028d2533d8f913c04d.jpg.webp) 颜色很奇怪,经过排查,需要将宏 LV_COLOR_16_SWAP 定义为0,再次编译并且下载 ![再次RTTLVGL编译.jpg](https://oss-club.rt-thread.org/uploads/20240423/14bad3696b7360100bbdc08421e1c85f.jpg.webp) 这次显示正常了,看起来没什么问题,加入lvgl demo试试效果 ![编译失败.png](https://oss-club.rt-thread.org/uploads/20240423/6b664d3e8a23b5591c609f69a0790ed7.png) 编译失败了,没有空间了,demo还是很占空间的,不过现在的优化等级是-O0.增加优化等级为-OZ image size试试。结果编译通过,下载测试一下效果 [RTTLVGL效果.mp4](https://club.rt-thread.org/file_download/cb2bb90f875814df) 跑起来了,但是颜色明显不对,最后的字符串输出也有点问题 ![RTTLVGL结果.jpg](https://oss-club.rt-thread.org/uploads/20240423/f46868d8f0c5332edc178921345eaa62.jpg.webp) 经过排查,发现在按钮测试的时候,颜色的输出就是反向的,发现在官方的设置中,进行了颜色的反向: ```c const st7796s_config_t st7796sConfig = {.driverPreset = kST7796S_DriverPresetLCDPARS035, .pixelFormat = kST7796S_PixelFormatRGB565, .orientationMode = kST7796S_Orientation270, .teConfig = kST7796S_TEDisabled, .invertDisplay = true, .flipDisplay = true, .bgrFilter = true}; ``` ```c typedef struct _st7796s_config { st7796s_driver_preset_t driverPreset; /*!< Driver configuration preset */ st7796s_pixel_format_t pixelFormat; /*!< Color format */ st7796s_orientation_mode_t orientationMode; /*!< Display orientation */ st7796s_te_config_t teConfig; /*!< TE line configuration */ bool invertDisplay; /*!< Invert display color */ bool flipDisplay; /*!< Mirror display image */ bool bgrFilter; /*!< Use BGR color filter instead of RGB */ } st7796s_config_t; ``` 其中成员invertDisplay为反转颜色,将其从true改为false,再次编译并烧录 [最终效果.mp4](https://club.rt-thread.org/file_download/b32bdb0e317b425a) 颜色对劲了,很爽,帧数最后看下来39帧。 #结语 再次感谢RTT与NXP官方的活动,本人第一次使用NXP的芯片与深入了解RTThread系统的基本操作方法,也通过参考论坛与爱好群大佬的指点,极为不熟练的驱动起来了TFT模块,并且在其中运行了LVGL图形库。接下来需要完善的问题为:1、如何使用RTThread自带的显示设备框架与触摸框架进行驱动FRDM-MCXN947开发板,2、了解并使用smartDMA,3、使用NXP官方提供的GUI Guider进行图形界面的开发 代码打包如下: 链接:https://pan.baidu.com/s/13ImsJPiH5ThC1Ebc9JIHRw?pwd=lvx4 提取码:lvx4
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
GaryLanj
这家伙很懒,什么也没写!
文章
1
回答
0
被采纳
0
关注TA
发私信
相关文章
1
试贴-消灭0主题
2
LPC M4的一些资料
3
LPC4088的临时分支
4
lpc1788 ad 不稳定
5
1788 LCD控制器缓冲区字节问题
6
一起来学习LPC4088吧
7
上传LPC4088的realtouch主工程
8
RealBoard 4088预定帖 [第一批板子不多,预定提前结束]
9
晒RealBoard LPC4088开箱照啦,速带小板凳前来围观
10
4088主程序需要的SD卡资源
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
RTT_逍遥
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部