【LCD】使用M61-32s 驱动 SPI1.3寸屏幕

[复制链接]
查看2827 | 回复20 | 2024-2-1 15:37:53 | 显示全部楼层 |阅读模式
本帖最后由 xiaoch669 于 2024-2-1 16:33 编辑

大家好,
最近我尝试使用 SDK中aithinker_Ai-M6X_SDK\bsp\common\lcd文件夹下的代码驱动1.3寸LCD,我想在这里分享一下我的经验和一些解决方案。希望这对那些遇到类似问题的人有所帮助。
驱动位置:
微信截图_20240201151021.png

屏幕参数:
微信图片_20240201151247.jpg

接口:SPI
微控制器:Ai-M61-32S-Kit
配置屏幕参数首先要新建自己的配置文件lcd_conf_user.h
根据自己屏幕的驱动在lcd_conf.h选择合适的参数写入lcd_conf_user.h中
lcd_conf_user.h如下:
包含引脚信息

  1. #ifndef _LCD_CONF_USER_H_
  2. #define _LCD_CONF_USER_H_

  3. #define LCD_SPI_ST7789V
  4. #define LCD_SPI_INTERFACE_TYPE 1

  5.     /* Selecting pixel format
  6.         1: rgb565
  7.     */
  8. #define ST7789V_SPI_PIXEL_FORMAT 1

  9.     /* enable the lcd reset function
  10.         0: Does not care about lcd hard reset
  11.         1: use gpio to reset the lcd
  12.     */
  13. #define LCD_RESET_EN 1

  14.     /* LCD width and height */
  15. #define ST7789V_SPI_W 240 //宽度
  16. #define ST7789V_SPI_H 240 //高度

  17. /* The offset of the area can be displayed */
  18. #define ST7789V_SPI_OFFSET_X 0
  19. #define ST7789V_SPI_OFFSET_Y 0
  20. /********** SPI hard 4-wire configuration ***********/
  21. #if (defined(LCD_SPI_INTERFACE_TYPE) && (LCD_SPI_INTERFACE_TYPE == 1))

  22.     /* spi idx */
  23. #define LCD_SPI_HARD_4_NAME "spi0"

  24. /* dma used by spi */
  25. #define LCD_SPI_HARD_4_DMA_NAME "dma0_ch3"

  26. /* The maximum pixel cnt to be transferred affects the number of LLI memory pools */
  27. #define LCD_SPI_HARD_4_PIXEL_CNT_MAX (800 * 640)

  28. /* spi pin, hardware controlled */
  29. #define LCD_SPI_HARD_4_PIN_CLK   GPIO_PIN_13  //SCL引脚
  30. #define LCD_SPI_HARD_4_PIN_DAT   GPIO_PIN_15 //SDA引脚
  31. /* cs/dc pin, software controlled */
  32. #define LCD_SPI_HARD_4_PIN_CS   GPIO_PIN_14 //CS引脚
  33. #define LCD_SPI_HARD_4_PIN_DC   GPIO_PIN_16 // DC引脚

  34. #endif

  35. /********** lcd reset configuration ***********/
  36. #if (defined(LCD_RESET_EN) && LCD_RESET_EN)

  37. /* lcd reset signal pin, please leave blank if not needed */
  38. #define LCD_RESET_PIN GPIO_PIN_12 //RES引脚
  39. /* lcd reset signal active level
  40.     0: lcd reset at low level
  41.     1: lcd reset at high level
  42. */
  43. #define LCD_RESET_ACTIVE_LEVEL  0

  44. /* lcd reset active hold time (ms) */
  45. #define LCD_RESET_HOLD_MS   10

  46. /* lcd recovery time after reset end (ms) */
  47. #define LCD_RESET_DELAY   100
  48. /********** lcd blk configuration ***********/
  49. /*BLK背光引脚不用可以悬空不接*/
  50. #define LCD_BLK_PIN GPIO_PIN_17 //BLK引脚
  51. #endif
  52. #endif
复制代码
如果需要配置BLK引脚,需要在lcd.c中增加以下代码
  1. #if LCD_BLK_PIN
  2.     bflb_gpio_init(gpio, LCD_BLK_PIN, GPIO_OUTPUT | GPIO_PULLUP);
  3.     bflb_gpio_set(gpio, LCD_BLK_PIN);
  4. #endif
复制代码


位置如下:
1706775943120.jpg
main.c如下
  1. #include "bflb_mtimer.h"
  2. #include "bflb_spi.h"
  3. #include "board.h"
  4. #include "bflb_gpio.h"
  5. #include "lcd.h"
  6. #include "spi\st7796_spi.h"
  7. #include "spi\bl_spi_hard_4.h"
  8. int main()
  9. {
  10.     lcd_color_t red = LCD_COLOR_RGB(255, 0, 0);
  11.     lcd_color_t white=LCD_COLOR_RGB(255,255,255);
  12.     board_init();
  13.     st7789v_spi_init();
  14.     lcd_init();
  15.     lcd_set_dir(0,0);
  16.     lcd_clear(white);
  17.     while (1)
  18.     {
  19.         //lcd_draw_line(0,0,20,20,my_color);
  20.         lcd_draw_str_ascii16(0,0,red,white,"hello world",11);
  21.         lcd_draw_area(80,80,200,200,red);
  22.     }
  23.    
  24. }





复制代码

CMakeLists.txt如下
  1. cmake_minimum_required(VERSION 3.15)

  2. include(proj.conf)

  3. find_package(bouffalo_sdk REQUIRED HINTS $ENV{BL_SDK_BASE})

  4. sdk_set_main_file(main.c)
  5. target_sources(app PRIVATE
  6.                 lcd_conf.h
  7.                 lcd.c
  8.                 lcd_conf_user.h
  9.                 lcd.h
  10.                 font.h
  11.                 font.c
  12.                 spi/bl_spi_hard_4.h
  13.                 spi/bl_spi_hard_4.c
  14.                 spi/st7789v_spi.h
  15.                 spi/st7789v_spi.c
  16.                    )
  17. sdk_add_include_directories(.)
  18. project(helloworld)
复制代码
实验现象
微信图片_20240201152958.jpg
驱动代码:
lcd.rar (77.91 KB, 下载次数: 15)

本帖被以下淘专辑推荐:

回复

使用道具 举报

noonezero | 2024-2-1 15:41:43 | 显示全部楼层
赞一个
回复

使用道具 举报

爱笑 | 2024-2-1 16:31:22 | 显示全部楼层
不错不错
用心做好保姆工作
回复

使用道具 举报

1084504793 | 2024-2-1 17:26:45 | 显示全部楼层
回复

使用道具 举报

7788 | 2024-2-1 21:37:27 | 显示全部楼层
回复

使用道具 举报

楚华 | 2024-2-2 08:24:38 | 显示全部楼层
回复

使用道具 举报

lazy | 2024-2-2 08:57:55 | 显示全部楼层
回复

使用道具 举报

WT_0213 | 2024-2-2 08:58:39 | 显示全部楼层
刚好有一块,回去试试
回复 支持 反对

使用道具 举报

bzhou830 | 2024-2-2 10:07:58 | 显示全部楼层
赞一个
选择去发光,而不是被照亮
回复

使用道具 举报

WT_0213 | 2024-2-3 12:22:52 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则