Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
ili9341
SPI
nuc980
NK-980IOT 测评之 硬件spi0驱动ili9341
发布于 2022-04-05 21:35:55 浏览:1111
订阅该版
硬件spi0驱动ili9341显示屏 #功能模块的硬件介绍 NK-980Iot spi0引脚已经引出来,实物图位置:  芯片手册标出spi0有两组引脚可以控制分别是PC、PD    我选择了PD端口的引脚,涉及到引脚 PD8、PD9、PD10、PD11 >PD8-->CS >PD9-->CLK >PD10-->MOSI >PD11-->MISO ##官方手册介绍SPI0时序图  ILI9341芯片提供的时序图  ##功能模块的使用说明 ###硬件环境:  NU980Iot开发板 两根usb数据线 ###软件环境: RT-Thread Studio NuWriter Putty #外设性能指标测试 ##目标 使用硬件spi驱动lcd显示切换屏幕颜色 ##创建工程 File->New->RT-Thread Project 选择Base On Board  ##编写代码 创建crypto.c 文档 编写代码 ``` #include
#include
#include
#include
#include
#include "gpio.h" #define RED 0XF800 //红色 #define GREEN 0X07E0 //绿色 #define BLUE 0X001F //蓝色 #define WHITE 0XFFFF //白色 #define BLACK 0X0000 //白色 #define LCD_CD PC0 #define LCD_RESET PC1 void LCD_CD_DATA(unsigned char val) { SPI_SET_SS_LOW(SPI0); LCD_CD=1; SPI_WRITE_TX(SPI0, val); while(SPI_IS_BUSY(SPI0)); SPI_SET_SS_HIGH(SPI0); } void LCD_CD_REG(unsigned char reg) { SPI_SET_SS_LOW(SPI0); LCD_CD=0; SPI_WRITE_TX(SPI0, reg); while(SPI_IS_BUSY(SPI0)); SPI_SET_SS_HIGH(SPI0); } void LCD_Init() { outpw(REG_CLK_PCLKEN1, inpw(REG_CLK_PCLKEN1) | 0x20); outpw(REG_SYS_GPD_MFPH, (inpw(REG_SYS_GPD_MFPH) & 0xFFFF0000) | 0x00001111); SPI_Open(SPI0, SPI_MASTER, SPI_MODE_0, 8, 5000000); SPI_DisableAutoSS(SPI0); GPIO_SetMode(PC, BIT0, GPIO_MODE_OUTPUT); //dc GPIO_SetMode(PC, BIT1, GPIO_MODE_OUTPUT); //rest GPIO_SetMode(PB, BIT8, GPIO_MODE_OUTPUT); PB8=0; rt_thread_delay(500); PB8=1; rt_thread_delay(500); PB8=0; LCD_RESET=0; rt_thread_delay(1); LCD_RESET=0; rt_thread_delay(10); LCD_RESET=1; rt_thread_delay(120); LCD_CD_REG(0xCF); LCD_CD_DATA(0x00); LCD_CD_DATA(0xC1); LCD_CD_DATA(0X30); LCD_CD_REG(0xED); LCD_CD_DATA(0x64); LCD_CD_DATA(0x03); LCD_CD_DATA(0X12); LCD_CD_DATA(0X81); LCD_CD_REG(0xE8); LCD_CD_DATA(0x85); LCD_CD_DATA(0x10); LCD_CD_DATA(0x7A); LCD_CD_REG(0xCB); LCD_CD_DATA(0x39); LCD_CD_DATA(0x2C); LCD_CD_DATA(0x00); LCD_CD_DATA(0x34); LCD_CD_DATA(0x02); LCD_CD_REG(0xF7); LCD_CD_DATA(0x20); LCD_CD_REG(0xEA); LCD_CD_DATA(0x00); LCD_CD_DATA(0x00); LCD_CD_REG(0xC0); //Power control LCD_CD_DATA(0x1B); //VRH[5:0] LCD_CD_REG(0xC1); //Power control LCD_CD_DATA(0x01); //SAP[2:0];BT[3:0] LCD_CD_REG(0xC5); //VCM control LCD_CD_DATA(0x30); //3F LCD_CD_DATA(0x30); //3C LCD_CD_REG(0xC7); //VCM control2 LCD_CD_DATA(0XB7); LCD_CD_REG(0x36); // Memory Access Control LCD_CD_DATA(0x48); LCD_CD_REG(0x3A); LCD_CD_DATA(0x55); LCD_CD_REG(0xB1); LCD_CD_DATA(0x00); LCD_CD_DATA(0x1A); LCD_CD_REG(0xB6); // Display Function Control LCD_CD_DATA(0x0A); LCD_CD_DATA(0xA2); LCD_CD_REG(0xF2); // 3Gamma Function Disable LCD_CD_DATA(0x00); LCD_CD_REG(0x26); //Gamma curve selected LCD_CD_DATA(0x01); LCD_CD_REG(0xE0); //Set Gamma LCD_CD_DATA(0x0F); LCD_CD_DATA(0x2A); LCD_CD_DATA(0x28); LCD_CD_DATA(0x08); LCD_CD_DATA(0x0E); LCD_CD_DATA(0x08); LCD_CD_DATA(0x54); LCD_CD_DATA(0XA9); LCD_CD_DATA(0x43); LCD_CD_DATA(0x0A); LCD_CD_DATA(0x0F); LCD_CD_DATA(0x00); LCD_CD_DATA(0x00); LCD_CD_DATA(0x00); LCD_CD_DATA(0x00); LCD_CD_REG(0XE1); //Set Gamma LCD_CD_DATA(0x00); LCD_CD_DATA(0x15); LCD_CD_DATA(0x17); LCD_CD_DATA(0x07); LCD_CD_DATA(0x11); LCD_CD_DATA(0x06); LCD_CD_DATA(0x2B); LCD_CD_DATA(0x56); LCD_CD_DATA(0x3C); LCD_CD_DATA(0x05); LCD_CD_DATA(0x10); LCD_CD_DATA(0x0F); LCD_CD_DATA(0x3F); LCD_CD_DATA(0x3F); LCD_CD_DATA(0x0F); LCD_CD_REG(0x2B); LCD_CD_DATA(0x00); LCD_CD_DATA(0x00); LCD_CD_DATA(0x01); LCD_CD_DATA(0x3f); LCD_CD_REG(0x2A); LCD_CD_DATA(0x00); LCD_CD_DATA(0x00); LCD_CD_DATA(0x00); LCD_CD_DATA(0xef); LCD_CD_REG(0x11); //Exit Sleep rt_thread_delay(120); LCD_CD_REG(0x29); //display on } void LCD_SetArea(unsigned int stx,unsigned int sty,unsigned int endx,unsigned int endy) { LCD_CD_REG(0x2A); LCD_CD_DATA(stx>>8); LCD_CD_DATA(stx&0xff); LCD_CD_DATA(endx>>8); LCD_CD_DATA(endx&0xff); LCD_CD_REG(0x2B); LCD_CD_DATA(sty>>8); LCD_CD_DATA(sty&0xff); LCD_CD_DATA(endy>>8); LCD_CD_DATA(endy&0xff); } void LcdWirteColorData(unsigned int color) { SPI_SET_SS_LOW(SPI0); LCD_CD=1; SPI_WRITE_TX(SPI0, color>>8); while(SPI_IS_BUSY(SPI0)); SPI_WRITE_TX(SPI0, color); while(SPI_IS_BUSY(SPI0)); SPI_SET_SS_HIGH(SPI0); } void LCD_Clear(unsigned int color) { unsigned int i,j; LCD_SetArea(0,0,239,319); LCD_CD_REG(0x2C); for(i=0;i<320;i++) { for(j=0;j<240;j++) { LcdWirteColorData(color); } } } void spi_lcd_test(void) { LCD_Init(); LCD_Clear(RED); LCD_Clear(WHITE); LCD_Clear(GREEN); LCD_Clear(BLACK); LCD_Clear(BLUE); LCD_Clear(WHITE); } MSH_CMD_EXPORT(spi_lcd_test, test lcd display); ``` ##编译烧写 编译代码  打开终端Putty 设置com,115200 复位nu980  烧写代码到内存  现象结果 逻辑分析仪抓到的时序图    #[bilibili地址](https://www.bilibili.com/video/BV1J3411H7XA/) #可编译下载的代码gitee地址 [gitee地址](https://gitee.com/want_to_be_a_vassal/nu980-iot_crypto_qspi_ili9341lcd_test) #心得体会 参考了stm32驱动ili9341,需要搞清楚芯片时序要求
3
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
想当诸侯的小蚂蚁
这家伙很懒,什么也没写!
文章
7
回答
5
被采纳
0
关注TA
发私信
相关文章
1
BBB的SPI驱动
2
求个SPI上挂两个或多个设备的使用例子
3
SPI设备有个bug
4
spi flash 的fatfs使用一段时间后读写文件出现故障
5
SPI驱动
6
请教rt_spi_configure函数理解
7
SPI FLASH挂载的问题
8
SPI-FLASH 文件系统 SPIFFS
9
求助一个完整的 spi flash 驱动
10
关于同时使用文件系统与SPI FLASH的问题
推荐文章
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
rt-smart
FAL
cubemx
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
GD32
定时器
ADC
flashDB
编译报错
socket
中断
rt_mq_消息队列_msg_queue
keil_MDK
Debug
SFUD
ulog
msh
C++_cpp
MicroPython
本月问答贡献
lchnu
5
个答案
3
次被采纳
三世执戟
9
个答案
2
次被采纳
张世争
1
个答案
2
次被采纳
a1012112796
14
个答案
1
次被采纳
聚散无由
5
个答案
1
次被采纳
本月文章贡献
jinchanchan
12
篇文章
14
次点赞
ssdd45555
3
篇文章
2
次点赞
lvdongchina
2
篇文章
1
次点赞
聚散无由
1
篇文章
4
次点赞
RTT_逍遥
1
篇文章
3
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部