Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread Studio
lcd驱动
RT-Thread Stduio + ST7789LCD液晶显示屏
发布于 2020-03-21 17:11:46 浏览:3040
订阅该版
我用的开发板是野火的挑战者F429的核心板 我弄了两天也没弄出来,SPI的驱动参考的是官方的例子 http://www.elecfans.com/d/663089.html 这里例子同样是SPI驱动显示屏,除了驱动部分基本是照抄了,依旧驱动不起来,还请大神指点一二。 主函数里就是和写裸机程序一样初始化液晶屏 lcd.c文件内就是主要的程序,SPI也在这里设置 ```c #include "lcd.h" #include "oledfont.h" #include "bmp.h" #include "board.h" #define SPI_BUS_NAME "spi1" //SPI设备总线名称 #define SPI_ST7789_DEVICE_NAME "spi10" //SPI设备名称 static struct rt_spi_device spi_dev_st7789; //SPI设备对象 static struct stm32_hw_spi_cs spi_cs; //SPI设备CS片选引脚 static int rt_hw_st7789_config(void) { rt_err_t res; spi_cs.GPIOx = GPIOB; spi_cs.GPIO_Pin = GPIO_PIN_14; rt_pin_mode(CS_PIN, PIN_MODE_OUTPUT); /* 设置片选管脚模式为输出 */ res = rt_spi_bus_attach_device ( &spi_dev_st7789, SPI_ST7789_DEVICE_NAME, SPI_BUS_NAME, (void*)&spi_cs); //挂载到总线 !!!!!可以试试指针类型 if (res != RT_EOK) { rt_kprintf("rt_spi_bus_attach_device err!
"); return res; } else rt_kprintf("rt_spi_bus_attach_device success!
"); //配置SPI模式 struct rt_spi_configuration cfg; cfg.data_width = 8; //数据宽度 cfg.mode = RT_SPI_MASTER | RT_SPI_MODE_0 | RT_SPI_MSB; //SPI模式 cfg.max_hz = 20 * 1000 *1000; //最大HZ rt_spi_configure(&spi_dev_st7789, &cfg); return RT_EOK; } INIT_DEVICE_EXPORT(rt_hw_st7789_config); uint16_t BACK_COLOR; //背景色 static void LCD_GPIO_Init(void) { rt_pin_mode(RES_PIN, PIN_MODE_OUTPUT); rt_pin_mode(DC_PIN, PIN_MODE_OUTPUT); // rt_pin_mode(CS_PIN, PIN_MODE_OUTPUT); rt_pin_mode(BLK_PIN, PIN_MODE_OUTPUT); rt_pin_write(RES_PIN, PIN_LOW); rt_pin_write(DC_PIN, PIN_LOW); rt_pin_write(BLK_PIN, PIN_LOW); } /****************************************************************************** 函数说明:LCD串行数据写入函数 入口数据:dat 要写入的串行数据 返回值: 无 ******************************************************************************/ void LCD_Writ_Bus(const rt_uint8_t dat) { rt_size_t len; rt_pin_write(DC_PIN, PIN_LOW); /* 命令低电平 */ len = rt_spi_send(&spi_dev_st7789, &dat, 1); if (len != 1) { rt_kprintf("ssd1351_write_cmd error. %d
",len); } } /****************************************************************************** 函数说明:LCD写入数据 入口数据:dat 写入的数据 返回值: 无 ******************************************************************************/ void LCD_WR_DATA8(const rt_uint8_t dat) { OLED_DC_Set();//写数据 LCD_Writ_Bus(dat); } /****************************************************************************** 函数说明:LCD写入数据 入口数据:dat 写入的数据 返回值: 无 ******************************************************************************/ void LCD_WR_DATA(rt_uint16_t dat) { rt_uint16_t a = dat>>8; rt_uint16_t b = dat; OLED_DC_Set();//写数据 LCD_Writ_Bus(a); LCD_Writ_Bus(b); } /****************************************************************************** 函数说明:LCD写入命令 入口数据:dat 写入的命令 返回值: 无 ******************************************************************************/ void LCD_WR_REG(const rt_uint8_t dat) { OLED_DC_Clr();//写命令 LCD_Writ_Bus(dat); } /****************************************************************************** 函数说明:设置起始和结束地址 入口数据:x1,x2 设置列的起始和结束地址 y1,y2 设置行的起始和结束地址 返回值: 无 ******************************************************************************/ void LCD_Address_Set(rt_uint16_t x1,rt_uint16_t y1,rt_uint16_t x2,rt_uint16_t y2) { if(USE_HORIZONTAL==0) { LCD_WR_REG(0x2a);//列地址设置 LCD_WR_DATA(x1); LCD_WR_DATA(x2); LCD_WR_REG(0x2b);//行地址设置 LCD_WR_DATA(y1); LCD_WR_DATA(y2); LCD_WR_REG(0x2c);//储存器写 } else if(USE_HORIZONTAL==1) { LCD_WR_REG(0x2a);//列地址设置 LCD_WR_DATA(x1); LCD_WR_DATA(x2); LCD_WR_REG(0x2b);//行地址设置 LCD_WR_DATA(y1+80); LCD_WR_DATA(y2+80); LCD_WR_REG(0x2c);//储存器写 } else if(USE_HORIZONTAL==2) { LCD_WR_REG(0x2a);//列地址设置 LCD_WR_DATA(x1); LCD_WR_DATA(x2); LCD_WR_REG(0x2b);//行地址设置 LCD_WR_DATA(y1); LCD_WR_DATA(y2); LCD_WR_REG(0x2c);//储存器写 } else { LCD_WR_REG(0x2a);//列地址设置 LCD_WR_DATA(x1+80); LCD_WR_DATA(x2+80); LCD_WR_REG(0x2b);//行地址设置 LCD_WR_DATA(y1); LCD_WR_DATA(y2); LCD_WR_REG(0x2c);//储存器写 } } /****************************************************************************** 函数说明:LCD初始化函数 入口数据:无 返回值: 无 ******************************************************************************/ int rt_hw_st7789_init(void) { LCD_GPIO_Init(); // rt_hw_st7789_config(); OLED_RST_Clr(); HAL_Delay(200); OLED_RST_Set(); OLED_BLK_Set(); HAL_Delay(200); //************* Start Initial Sequence **********// LCD_WR_REG(0x36); if(USE_HORIZONTAL==0)LCD_WR_DATA8(0x00); else if(USE_HORIZONTAL==1)LCD_WR_DATA8(0xC0); else if(USE_HORIZONTAL==2)LCD_WR_DATA8(0x70); else LCD_WR_DATA8(0xA0); LCD_WR_REG(0x3A); LCD_WR_DATA8(0x05); LCD_WR_REG(0xB2); LCD_WR_DATA8(0x0C); LCD_WR_DATA8(0x0C); LCD_WR_DATA8(0x00); LCD_WR_DATA8(0x33); LCD_WR_DATA8(0x33); LCD_WR_REG(0xB7); LCD_WR_DATA8(0x35); LCD_WR_REG(0xBB); LCD_WR_DATA8(0x19); LCD_WR_REG(0xC0); LCD_WR_DATA8(0x2C); LCD_WR_REG(0xC2); LCD_WR_DATA8(0x01); LCD_WR_REG(0xC3); LCD_WR_DATA8(0x12); LCD_WR_REG(0xC4); LCD_WR_DATA8(0x20); LCD_WR_REG(0xC6); LCD_WR_DATA8(0x0F); LCD_WR_REG(0xD0); LCD_WR_DATA8(0xA4); LCD_WR_DATA8(0xA1); LCD_WR_REG(0xE0); LCD_WR_DATA8(0xD0); LCD_WR_DATA8(0x04); LCD_WR_DATA8(0x0D); LCD_WR_DATA8(0x11); LCD_WR_DATA8(0x13); LCD_WR_DATA8(0x2B); LCD_WR_DATA8(0x3F); LCD_WR_DATA8(0x54); LCD_WR_DATA8(0x4C); LCD_WR_DATA8(0x18); LCD_WR_DATA8(0x0D); LCD_WR_DATA8(0x0B); LCD_WR_DATA8(0x1F); LCD_WR_DATA8(0x23); LCD_WR_REG(0xE1); LCD_WR_DATA8(0xD0); LCD_WR_DATA8(0x04); LCD_WR_DATA8(0x0C); LCD_WR_DATA8(0x11); LCD_WR_DATA8(0x13); LCD_WR_DATA8(0x2C); LCD_WR_DATA8(0x3F); LCD_WR_DATA8(0x44); LCD_WR_DATA8(0x51); LCD_WR_DATA8(0x2F); LCD_WR_DATA8(0x1F); LCD_WR_DATA8(0x1F); LCD_WR_DATA8(0x20); LCD_WR_DATA8(0x23); LCD_WR_REG(0x21); LCD_WR_REG(0x11); //Delay (120); LCD_WR_REG(0x29); return 0; } /****************************************************************************** 函数说明:LCD清屏函数 入口数据:无 返回值: 无 ******************************************************************************/ void LCD_Clear(rt_uint16_t Color) { uint16_t i,j; LCD_Address_Set(0,0,LCD_W-1,LCD_H-1); for(i=0;i
"); } ``` 还有很多功能函数没有贴上去,因给连初始化的清屏都实现不了。
查看更多
1
个回答
默认排序
按发布时间排序
822527563
2020-03-23
这家伙很懒,什么也没写!
问题解决了,使用开发板的时候,一些SPI I2C的引脚需要自己进行硬件引脚的配置,在board->CubeMX_Config->Src的文件夹下自stm32f4xx_hal_msp.c中要添加所需的引脚配置。 习惯了使用CubeMX后引脚配置都不会了,都忘了使用SPI之类的东西需要自己配置一些参数!!!!!!
撰写答案
登录
注册新账号
关注者
0
被浏览
3k
关于作者
822527563
这家伙很懒,什么也没写!
提问
3
回答
3
被采纳
0
关注TA
发私信
相关问题
1
rt_thread studio 啥时候能用呢
2
RT_Thread使用反馈帖子
3
RTT studio 下的 AT指令问题。
4
什么时候RTT Sdudio支持Ubuntu,Deepin和UOS操作系统
5
rt thread Studio 关于J-LINK下载问题
6
RT-Thread studio 调试设置问题
7
RTT-Studio 如何设置调试配置参数?
8
rt_thread studio 软件包配置
9
RT-Studio目前只能开发STM32的项目吗?
10
rtt studio 生成hex名字修改
推荐文章
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组件
最新文章
1
开源共生 商业共赢 | RT-Thread 2024开发者大会议程正式发布!
2
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
3
RT-Thread EtherKit开源以太网硬件正式发布
4
如何在master上的BSP中添加配置yml文件
5
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
热门标签
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
MicroPython
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
19
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
6
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
5
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部