潘多拉 rt thread lcd

学习目标:

掌握正点原子潘多拉板载LCD的用法,熟悉IIC和SPI的用法及其区别


学习内容:

1.LCD屏幕 潘多拉开发板板载LCD屏幕大小1.3寸,分辨率240*240,色彩深度16bit,使用ST7789V2液晶控制器,小巧细腻很喜欢。

潘多拉开发板板载的lcd硬件原理图如上所示,因为显示问题,所以只是写操作 ,不用读取。因而用到的引脚为:

屏幕美照

2.学会使用st7789驱动,芯片手册臭又长,网上有好多可以借鉴的例子。

这里定义了控制引脚的高低电平控制

#define LCD_PWR(n)      (n?\
                        HAL_GPIO_WritePin(LCD_PWR_GPIO_Port,LCD_PWR_Pin,GPIO_PIN_SET):\
                        HAL_GPIO_WritePin(LCD_PWR_GPIO_Port,LCD_PWR_Pin,GPIO_PIN_RESET))
#define LCD_WR_RS(n)    (n?\
                        HAL_GPIO_WritePin(LCD_WR_RS_GPIO_Port,LCD_WR_RS_Pin,GPIO_PIN_SET):\
                        HAL_GPIO_WritePin(LCD_WR_RS_GPIO_Port,LCD_WR_RS_Pin,GPIO_PIN_RESET))
#define LCD_RST(n)      (n?\
                        HAL_GPIO_WritePin(LCD_RST_GPIO_Port,LCD_RST_Pin,GPIO_PIN_SET):\
                        HAL_GPIO_WritePin(LCD_RST_GPIO_Port,LCD_RST_Pin,GPIO_PIN_RESET)

当然根据手册关键字,要有如下的宏定义:

//LCD屏幕分辨率定义
#define LCD_Width   240
#define LCD_Height  240
//颜色定义
#define WHITE   0xFFFF  //白色
#define YELLOW  0xFFE0  //黄色
#define BRRED   0XFC07  //棕红色
#define PINK    0XF81F  //粉色
#define RED     0xF800  //红色
#define BROWN   0XBC40  //棕色
#define GRAY    0X8430  //灰色
#define GBLUE   0X07FF  //兰色
#define GREEN   0x07E0  //绿色
#define BLUE    0x001F  //蓝色
#define BLACK   0x0000  //黑色

 

3.在程序编写时采用的RT-thread stdiuo 平台,在配置中使能spi硬件后,在config.h中 打开define SPI MODE ENABLE的注释,在board.c中添加宏定义#define BSP_USING_SPI3,这样在RT-thread为你配置好的很多预定义函数才会生效。最后不要忘了在board.c中添加关于用到的spi硬件引脚初始化(用cube生成void HAL_SPI_MspInit()后复制到board.c即可)

好,让我们复习一下spi吧!!!!!!!!!!!!!!!!!

SPI(串行外围接口,串行外设接口)是一种高速,全双工,同步通信总线,常用于短距离通讯,主要用于EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理SPI一般使用4根线通信,

  • MOSI –主机输出/从机输入数据线(SPI总线主输出/从输入)。

  • MISO –主机输入/从机输出数据线(SPI总线主输入/从输出)。

  • SCLK –串行时钟线(Serial Clock),主设备输出时钟信号至从设备。

  • CS –从设备选择线(芯片选择)。也叫SS,CSB,CSN,EN等,主设备输出片选信号至从设备SPI以主从方式工作,通常有一个主设备和一个或多个从设备。通信由主设备发起,主设备通过CS选择要通信的从设备,然后通过SCLK给从设备提供时钟信号,数据通过MOSI输出给从设备,同时通过MISO接收从设备发送的数据

在rt-thread中常用的spi相关API:

rt_err_t rt_spi_bus_attach_device(struct rt_spi_device *device, const char *name, const char *bus_name, void *user_data)

设备注册API,

设备SPI设备句柄
名称SPI设备名称
bus_nameSPI总线名称
用户数据用户数据指针

例子:rt_hw_spi_device_attach("spi3", "spi30", GPIOD, GPIO_PIN_7);对应函数

 rt_hw_spi_device_attach(const char *bus_name, const char *device_name, GPIO_TypeDef *cs_gpiox, uint16_t cs_gpio_pin)

{前面代码省略

 rt_spi_bus_attach_device(spi_device, device_name, bus_name, (void *)cs_pin);

}

配置spi设备:

rt_err_t rt_spi_configure(struct rt_spi_device *device, struct rt_spi_configuration *cfg)

struct rt_spi_configuration
{
    rt_uint8_t mode;
    rt_uint8_t data_width;
    rt_uint16_t reserved;

    rt_uint32_t max_hz;
};

发现spi设备,并确认注册:

static int rt_hw_lcd_config(void)
{
    spi_dev_lcd = (struct rt_spi_device *)rt_device_find("spi30");

    /* config spi */
    {
        struct rt_spi_configuration cfg;
        cfg.data_width = 8;
        cfg.mode = RT_SPI_MASTER | RT_SPI_MODE_0 | RT_SPI_MSB;
        cfg.max_hz = 42 * 1000 * 1000; /* 42M,SPI max 42MHz,lcd 4-wire spi */

        rt_spi_configure(spi_dev_lcd, &cfg);
    }

    return RT_EOK;
}

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值