wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 395|回復: 4
打印 上一主題 下一主題
收起左側

HC32F460JEUA使用SPI無法驅動LCD

[復制鏈接]
跳轉到指定樓層
樓主
ID:1066795 發表于 2025-11-15 16:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
50黑幣
LCD的配置是之前點亮過得現在只是換了個芯片 有點不熟悉這款芯片有路過的大佬能指點一下么.c 文件

  1. #include "tftlcd.h"
  2. extern uint32_t test_var;
  3. // 緩沖區定義
  4. #define COLOR_FILL_BUFFER_SIZE (240 * 4)
  5. uint16_t color_fill_buffer[COLOR_FILL_BUFFER_SIZE];

  6. void LCD_GPIO_Init(void)
  7. {
  8.     stc_gpio_init_t stcGpioInit;              // 定義GPIO結構體
  9.     GPIO_SetDebugPort(GPIO_PIN_TDO, DISABLE); // 關閉調試端口,釋放相關引腳
  10.     GPIO_SetDebugPort(GPIO_PIN_SWO, DISABLE);

  11.     (void)GPIO_StructInit(&stcGpioInit); // 使用默認參數配置結構體

  12.     stcGpioInit.u16PinState = PIN_STAT_SET;           // 高電平
  13.     stcGpioInit.u16PinDir = PIN_DIR_OUT;              // 輸出模式
  14.     stcGpioInit.u16PinOutputType = PIN_OUT_TYPE_CMOS; // 推挽輸出
  15.     stcGpioInit.u16PinDrv = PIN_HIGH_DRV;             // 驅動能力高
  16.     stcGpioInit.u16PullUp = PIN_PU_OFF;               

  17.     // SCLK
  18.     (void)GPIO_Init(LCD_POART, LCD_SCLK_PIN, &stcGpioInit);
  19.     // MOSI = SDA
  20.     (void)GPIO_Init(LCD_POART, LCD_MOSI_PIN, &stcGpioInit);
  21.     // RES
  22.     (void)GPIO_Init(LCD_RST_PORT, LCD_RST_PIN, &stcGpioInit);
  23.     // DC
  24.     (void)GPIO_Init(LCD_POART, LCD_DC_PIN, &stcGpioInit);
  25.     // CS
  26.     (void)GPIO_Init(LCD_POART, LCD_CS_PIN, &stcGpioInit);
  27.     // BLK
  28.     (void)GPIO_Init(LCD_POART, LCD_BLK_PIN, &stcGpioInit);

  29.     // SCLK MOSI 引腳設為復用模式
  30.     GPIO_SetFunc(LCD_POART, LCD_SCLK_PIN, LCD_SCLK_FUNC);
  31.     GPIO_SetFunc(LCD_POART, LCD_MOSI_PIN, LCD_MOSI_FUNC);

  32.     stc_spi_init_t stcSpiInit;
  33.     stc_spi_delay_t stcSpiDelayCfg;

  34.     // 使用默認參數初始化結構體
  35.     (void)SPI_StructInit(&stcSpiInit);
  36.     (void)SPI_DelayStructInit(&stcSpiDelayCfg);

  37.     // 開啟SPI時鐘
  38.     FCG_Fcg1PeriphClockCmd(SPI_FCG, ENABLE);

  39.     // 清空SPI配置
  40.     SPI_DeInit(LCD_SPI);

  41.     // 設置SPI必要參數
  42.     stcSpiInit.u32WireMode = SPI_4_WIRE; // SPI3線模式
  43.     stcSpiInit.u32TransMode = SPI_FULL_DUPLEX;
  44.     stcSpiInit.u32MasterSlave = SPI_MASTER; // SPI主機
  45.     stcSpiInit.u32ModeFaultDetect = SPI_MD_FAULT_DETECT_DISABLE;
  46.     stcSpiInit.u32SuspendMode = SPI_COM_SUSP_FUNC_OFF;  // 不自動掛起
  47.     stcSpiInit.u32Parity = SPI_PARITY_INVD;             // 不開奇偶校驗
  48.     stcSpiInit.u32SpiMode = SPI_MD_0;                   // 空閑低電平,奇數邊沿采樣
  49.     stcSpiInit.u32BaudRatePrescaler = SPI_BR_CLK_DIV64; // 64分頻
  50.     stcSpiInit.u32DataBits = SPI_DATA_SIZE_8BIT;        // 一次傳輸8位
  51.     stcSpiInit.u32FirstBit = SPI_FIRST_MSB;             // 高位在前

  52.     // 初始化SPI
  53.     (void)SPI_Init(LCD_SPI, &stcSpiInit);

  54.     // 配置SPI延時必要參數
  55.     stcSpiDelayCfg.u32IntervalDelay = SPI_INTERVAL_TIME_8SCK; // t3:下次存取延時
  56.     stcSpiDelayCfg.u32ReleaseDelay = SPI_RELEASE_TIME_8SCK;   // t2:振蕩停止到片選無效時間
  57.     stcSpiDelayCfg.u32SetupDelay = SPI_SETUP_TIME_1SCK;       // t1:片選有效到開始振蕩時間
  58.     (void)SPI_DelayTimeConfig(LCD_SPI, &stcSpiDelayCfg);

  59.     // 使能SPI
  60.     SPI_Cmd(LCD_SPI, ENABLE);

  61.     // // CS 拉高
  62.     LCD_CS_Set();
  63. }

  64. /******************************************************************************
  65.       函數說明:LCD串行數據寫入函數
  66.       入口數據:dat  要寫入的串行數據
  67.       返回值:  無
  68. ******************************************************************************/
  69. void LCD_Writ_Bus(uint8_t dat)
  70. {
  71.     LCD_CS_Clr();

  72.    
  73.     uint8_t RecvData = 0;

  74.     // 等待發送緩沖區為空
  75.     while( RESET == SPI_GetStatus(LCD_SPI,  SPI_FLAG_TX_BUF_EMPTY) );

  76.     // 發送并接收數據
  77.     SPI_TransReceive(LCD_SPI, &dat, &RecvData, 1, HCLK_VALUE);


  78.     LCD_CS_Set();
  79. }

  80. /******************************************************************************
  81.       函數說明:LCD寫入數據
  82.       入口數據:dat 寫入的數據
  83.       返回值:  無
  84. ******************************************************************************/
  85. void LCD_WR_DATA8(uint8_t dat)
  86. {
  87.      LCD_DC_Set(); // 寫數據
  88.     LCD_Writ_Bus(dat);
  89. }

  90. /******************************************************************************
  91.       函數說明:LCD寫入數據
  92.       入口數據:dat 寫入的數據
  93.       返回值:  無
  94. ******************************************************************************/
  95. void LCD_WR_DATA(uint16_t dat)
  96. {
  97.         LCD_Writ_Bus(dat >> 8);
  98.         LCD_Writ_Bus(dat & 0xff);
  99. }

  100. /******************************************************************************
  101.       函數說明:LCD寫入命令
  102.       入口數據:dat 寫入的命令
  103.       返回值:  無
  104. ******************************************************************************/
  105. void LCD_WR_REG(uint8_t dat)
  106. {
  107.         LCD_DC_Clr(); // 寫命令
  108.         LCD_Writ_Bus(dat);
  109.         LCD_DC_Set(); // 寫數據
  110. }

  111. /**
  112. * @brief       設置顯示窗口
  113. * @param       x1:窗口列起始地址
  114. * @param       y1:坐標行起始地址
  115. * @param       x2:窗口列結束地址
  116. * @param       y2:坐標行結束地址
  117. * @retval      無
  118. */
  119. void LCD_Address_Set(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
  120. {
  121.     LCD_WR_REG(0x2a); // 列地址設置
  122.     LCD_WR_DATA(x1);
  123.     LCD_WR_DATA(x2);
  124.     LCD_WR_REG(0x2b); // 行地址設置
  125.     LCD_WR_DATA(y1);
  126.     LCD_WR_DATA(y2);
  127.     LCD_WR_REG(0x2c); // 儲存器寫
  128. }

  129. /**
  130. * @brief LCD初始化
  131. */
  132. void LCD_Init(void)
  133. {
  134.     // 初始化GPIO、SPI和DMA
  135.      LCD_GPIO_Init();

  136.     LCD_RES_Clr(); // 復位
  137.     DDL_DelayMS(120);
  138.     LCD_RES_Set();
  139.     DDL_DelayMS(120);
  140.     LCD_BLK_Set(); // 打開背光
  141.     DDL_DelayMS(120);

  142.     LCD_WR_REG(0x11);
  143.     // 延時至少120ms
  144.     DDL_DelayMS(120);

  145.     LCD_WR_REG(0x36);
  146.     if (USE_HORIZONTAL == 0)
  147.         LCD_WR_DATA8(0x00);
  148.     else if (USE_HORIZONTAL == 1)
  149.         LCD_WR_DATA8(0xC0);
  150.     else if (USE_HORIZONTAL == 2)
  151.         LCD_WR_DATA8(0x70);
  152.     else
  153.         LCD_WR_DATA8(0xA0);

  154.     LCD_WR_REG(0x3A);
  155.     LCD_WR_DATA8(0x05);

  156.     LCD_WR_REG(0xB2);
  157.     LCD_WR_DATA8(0x0C);
  158.     LCD_WR_DATA8(0x0C);
  159.     LCD_WR_DATA8(0x00);
  160.     LCD_WR_DATA8(0x33);
  161.     LCD_WR_DATA8(0x33);

  162.     LCD_WR_REG(0xB7);
  163.     LCD_WR_DATA8(0x35);

  164.     LCD_WR_REG(0xBB);
  165.     LCD_WR_DATA8(0x1A);

  166.     LCD_WR_REG(0xC0);
  167.     LCD_WR_DATA8(0x2C);

  168.     LCD_WR_REG(0xC2);
  169.     LCD_WR_DATA8(0x01);

  170.     LCD_WR_REG(0xC3);
  171.     LCD_WR_DATA8(0x0B);

  172.     LCD_WR_REG(0xC4);
  173.     LCD_WR_DATA8(0x20);

  174.     LCD_WR_REG(0xC6);
  175.     LCD_WR_DATA8(0x0F);

  176.     LCD_WR_REG(0xD0);
  177.     LCD_WR_DATA8(0xA4);
  178.     LCD_WR_DATA8(0xA1);

  179.     LCD_WR_REG(0x21);
  180.     LCD_WR_REG(0xE0);
  181.     LCD_WR_DATA8(0xF0);
  182.     LCD_WR_DATA8(0x00);
  183.     LCD_WR_DATA8(0x04);
  184.     LCD_WR_DATA8(0x04);
  185.     LCD_WR_DATA8(0x04);
  186.     LCD_WR_DATA8(0x05);
  187.     LCD_WR_DATA8(0x29);
  188.     LCD_WR_DATA8(0x33);
  189.     LCD_WR_DATA8(0x3E);
  190.     LCD_WR_DATA8(0x38);
  191.     LCD_WR_DATA8(0x12);
  192.     LCD_WR_DATA8(0x12);
  193.     LCD_WR_DATA8(0x28);
  194.     LCD_WR_DATA8(0x30);

  195.     LCD_WR_REG(0xE1);
  196.     LCD_WR_DATA8(0xF0);
  197.     LCD_WR_DATA8(0x07);
  198.     LCD_WR_DATA8(0x0A);
  199.     LCD_WR_DATA8(0x0D);
  200.     LCD_WR_DATA8(0x0B);
  201.     LCD_WR_DATA8(0x07);
  202.     LCD_WR_DATA8(0x28);
  203.     LCD_WR_DATA8(0x33);
  204.     LCD_WR_DATA8(0x3E);
  205.     LCD_WR_DATA8(0x36);
  206.     LCD_WR_DATA8(0x14);
  207.     LCD_WR_DATA8(0x14);
  208.     LCD_WR_DATA8(0x29);
  209.     LCD_WR_DATA8(0x32);

  210.     LCD_WR_REG(0x20); // 反色St7789

  211.     LCD_WR_REG(0x11);
  212.     LCD_Fill(0, 0, LCD_HEIGHT, LCD_WIDTH, 0x0000);
  213.     LCD_WR_REG(0x29);
  214.     test_var = 1000;
  215. }
  216. void LCD_Fill(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t color)
  217. {
  218.     uint16_t i, j;
  219.     LCD_Address_Set(xsta, ysta, xend - 1, yend - 1);
  220.     for (i = ysta; i < yend; i++)
  221.     {
  222.         for (j = xsta; j < xend; j++)
  223.         {
  224.             LCD_WR_DATA(color);
  225.         }
  226.     }
  227. }
復制代碼
.h文件
  1. #ifndef __LCD_H
  2. #define __LCD_H
  3. #include "main.h"
  4. #include "stdio.h"
  5. #include "lvgl.h"
  6. // LCD的寬和高定義
  7. #define USE_HORIZONTAL 2 // 設置橫屏或者豎屏顯示 0或1為豎屏 2或3為橫屏

  8. #if USE_HORIZONTAL == 0 || USE_HORIZONTAL == 1

  9. #define LCD_WIDTH  240
  10. #define LCD_W      240
  11. #define LCD_HEIGHT 240
  12. #define LCD_H      240

  13. #else
  14. #define LCD_W      240
  15. #define LCD_WIDTH  240

  16. #define LCD_H      320
  17. #define LCD_HEIGHT 320
  18. #endif

  19. // GPIO_SetFunc(GPIO_PORT_B, GPIO_PIN_06, GPIO_FUNC_43); // SPI3_SCK
  20. // GPIO_SetFunc(GPIO_PORT_B, GPIO_PIN_07, GPIO_FUNC_40); // SPI3_MOSI

  21. #define LCD_POART                   GPIO_PORT_B

  22. #define LCD_SCLK_PIN                GPIO_PIN_06
  23. #define LCD_SCLK_FUNC               GPIO_FUNC_43

  24. #define LCD_MOSI_PIN                GPIO_PIN_07
  25. #define LCD_MOSI_FUNC               GPIO_FUNC_40


  26. #define SPI_FCG                     FCG1_PERIPH_SPI3    // 時鐘
  27. #define LCD_SPI                     CM_SPI3

  28. #define LCD_CS_PORT  GPIO_PORT_A
  29. #define LCD_CS_PIN   GPIO_PIN_01
  30. #define LCD_DC_PORT  GPIO_PORT_B
  31. #define LCD_DC_PIN   GPIO_PIN_08
  32. #define LCD_RST_PORT GPIO_PORT_B
  33. #define LCD_RST_PIN  GPIO_PIN_09
  34. #define LCD_BLK_PORT GPIO_PORT_B
  35. #define LCD_BLK_PIN  GPIO_PIN_03

  36. // 控制引腳操作宏定義
  37. #define LCD_CS_Clr()  GPIO_ResetPins(LCD_CS_PORT, LCD_CS_PIN)
  38. #define LCD_CS_Set()  GPIO_SetPins(LCD_CS_PORT, LCD_CS_PIN)
  39. #define LCD_DC_Clr()  GPIO_ResetPins(LCD_DC_PORT, LCD_DC_PIN)
  40. #define LCD_DC_Set()  GPIO_SetPins(LCD_DC_PORT, LCD_DC_PIN)



  41. #define LCD_RES_Clr() GPIO_ResetPins(LCD_RST_PORT, LCD_RST_PIN)
  42. #define LCD_RES_Set() GPIO_SetPins(LCD_RST_PORT, LCD_RST_PIN)

  43. #define LCD_BLK_Set() GPIO_ResetPins(LCD_BLK_PORT, LCD_BLK_PIN)
  44. #define LCD_BLK_Clr() GPIO_SetPins(LCD_BLK_PORT, LCD_BLK_PIN)

  45. void LCD_Init(void);
  46. void LCD_Fill(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);

  47. #endif
復制代碼
主循環
  1. int32_t main(void)
  2. {
  3.     /* Register write unprotected for some required peripherals. */
  4.     LL_PERIPH_WE(LL_PERIPH_ALL);
  5.     // Clock Config
  6.     App_ClkCfg();
  7.     // Port Config
  8.     App_PortCfg();

  9.     // Setup
  10.     LCD_Init();
  11.     DDL_DelayMS(1U);

  12.     /* Register write protected for some required peripherals. */
  13.     // LL_PERIPH_WP(LL_PERIPH_ALL);
  14.     for (;;)
  15.     {

  16.         LCD_Fill(0, 0, LCD_WIDTH-1, LCD_HEIGHT-1, 0x0000);
  17.         DDL_DelayMS(500U);
  18.         LCD_Fill(0, 0, LCD_WIDTH-1, LCD_HEIGHT-1, 0xFFFF);
  19.         DDL_DelayMS(500U);
  20.     }
  21. }
復制代碼






分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1153607 發表于 2025-11-16 09:02 | 只看該作者
雖說叫SPI不同的工作方式還是存在的,首先要搞清楚芯片的SPI與負載的SPI工作方式是否一致,如果有邏輯分析儀可以看看波形就知道問題在哪里了。
回復

使用道具 舉報

板凳
ID:1162651 發表于 2025-11-17 11:33 | 只看該作者
1,背光開沒開
2,初始化到底3線還是4線// 設置SPI必要參數
    stcSpiInit.u32WireMode = SPI_4_WIRE; // SPI3線模式
    stcSpiInit.u32TransMode = SPI_FULL_DUPLEX;
3,stcSpiInit.u32SpiMode = SPI_MD_0;這個可能要匹配正確
4,發數據,你的DC線呢?發數據前的片選是默認接地了嗎
void LCD_Fill(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t color)
{
    LCD_CS_LOW();
    LCD_Address_Set(xsta, ysta, xend - 1, yend - 1);
    LCD_DC_Set();
.....
}
5,檢查你屏幕的時間脈沖間隔,你64分頻還延時
回復

使用道具 舉報

地板
ID:1066795 發表于 2025-11-18 09:09 | 只看該作者
nglskey 發表于 2025-11-17 11:33
1,背光開沒開
2,初始化到底3線還是4線// 設置SPI必要參數
    stcSpiInit.u32WireMode = SPI_4_WIRE; / ...

GPIO沒有對應配置
回復

使用道具 舉報

5#
ID:1066795 發表于 2025-11-18 09:09 | 只看該作者
  1. #ifndef __LCD_H
  2. #define __LCD_H
  3. #include "main.h"
  4. #include "stdio.h"
  5. #include "lvgl.h"
  6. // LCD的寬和高定義
  7. #define USE_HORIZONTAL 2// 設置橫屏或者豎屏顯示 0或1為豎屏 2或3為橫屏

  8. #if USE_HORIZONTAL == 0 || USE_HORIZONTAL == 1

  9. #define LCD_WIDTH  240
  10. #define LCD_W      240
  11. #define LCD_HEIGHT 320
  12. #define LCD_H      320

  13. #else
  14. #define LCD_W      240
  15. #define LCD_WIDTH  240

  16. #define LCD_H      320
  17. #define LCD_HEIGHT 320
  18. #endif

  19. // GPIO_SetFunc(GPIO_PORT_B, GPIO_PIN_06, GPIO_FUNC_43); // SPI3_SCK
  20. // GPIO_SetFunc(GPIO_PORT_B, GPIO_PIN_07, GPIO_FUNC_40); // SPI3_MOSI

  21. #define LCD_POART                   GPIO_PORT_B

  22. #define LCD_SCLK_PIN                GPIO_PIN_06
  23. #define LCD_SCLK_FUNC               GPIO_FUNC_43

  24. #define LCD_MOSI_PIN                GPIO_PIN_07
  25. #define LCD_MOSI_FUNC               GPIO_FUNC_40


  26. #define SPI_FCG                     FCG1_PERIPH_SPI3    // 時鐘
  27. #define LCD_SPI                     CM_SPI3

  28. #define LCD_CS_PORT  GPIO_PORT_A
  29. #define LCD_CS_PIN   GPIO_PIN_01
  30. #define LCD_DC_PORT  GPIO_PORT_B
  31. #define LCD_DC_PIN   GPIO_PIN_08
  32. #define LCD_RST_PORT GPIO_PORT_B
  33. #define LCD_RST_PIN  GPIO_PIN_09
  34. #define LCD_BLK_PORT GPIO_PORT_B
  35. #define LCD_BLK_PIN  GPIO_PIN_03

  36. // 控制引腳操作宏定義
  37. #define LCD_CS_Clr()  GPIO_ResetPins(LCD_CS_PORT, LCD_CS_PIN)
  38. #define LCD_CS_Set()  GPIO_SetPins(LCD_CS_PORT, LCD_CS_PIN)
  39. #define LCD_DC_Clr()  GPIO_ResetPins(LCD_DC_PORT, LCD_DC_PIN)
  40. #define LCD_DC_Set()  GPIO_SetPins(LCD_DC_PORT, LCD_DC_PIN)



  41. #define LCD_RES_Clr() GPIO_ResetPins(LCD_RST_PORT, LCD_RST_PIN)
  42. #define LCD_RES_Set() GPIO_SetPins(LCD_RST_PORT, LCD_RST_PIN)

  43. #define LCD_BLK_Set() GPIO_ResetPins(LCD_BLK_PORT, LCD_BLK_PIN)
  44. #define LCD_BLK_Clr() GPIO_SetPins(LCD_BLK_PORT, LCD_BLK_PIN)

  45. void LCD_Init(void);
  46. void LCD_Fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, lv_color_t *color);

  47. #endif
復制代碼
  1. #include "tftlcd.h"
  2. extern uint32_t test_var;
  3. // 緩沖區定義
  4. #define COLOR_FILL_BUFFER_SIZE (240 * 4)
  5. uint16_t color_fill_buffer[COLOR_FILL_BUFFER_SIZE];

  6. void LCD_GPIO_Init(void)
  7. {
  8.     stc_gpio_init_t stcGpioInit;              // 定義GPIO結構體
  9.     GPIO_SetDebugPort(GPIO_PIN_TDO, DISABLE); // 關閉調試端口,釋放相關引腳
  10.     GPIO_SetDebugPort(GPIO_PIN_SWO, DISABLE);

  11.     (void)GPIO_StructInit(&stcGpioInit); // 使用默認參數配置結構體

  12.     stcGpioInit.u16PinState = PIN_STAT_SET;           // 高電平
  13.     stcGpioInit.u16PinDir = PIN_DIR_OUT;              // 輸出模式
  14.     stcGpioInit.u16PinOutputType = PIN_OUT_TYPE_CMOS; // 推挽輸出
  15.     stcGpioInit.u16PinDrv = PIN_HIGH_DRV;             // 驅動能力高
  16.     stcGpioInit.u16PullUp = PIN_PU_OFF;

  17.     // SCLK
  18.     (void)GPIO_Init(LCD_POART, LCD_SCLK_PIN, &stcGpioInit);
  19.     // MOSI = SDA
  20.     (void)GPIO_Init(LCD_POART, LCD_MOSI_PIN, &stcGpioInit);
  21.     // RES
  22.     (void)GPIO_Init(LCD_RST_PORT, LCD_RST_PIN, &stcGpioInit);
  23.     // DC
  24.     (void)GPIO_Init(LCD_DC_PORT, LCD_DC_PIN, &stcGpioInit);
  25.     // CS
  26.     (void)GPIO_Init(LCD_CS_PORT, LCD_CS_PIN, &stcGpioInit);
  27.     // BLK
  28.     (void)GPIO_Init(LCD_BLK_PORT, LCD_BLK_PIN, &stcGpioInit);

  29.     // SCLK MOSI 引腳設為復用模式
  30.     GPIO_SetFunc(LCD_POART, LCD_SCLK_PIN, LCD_SCLK_FUNC);
  31.     GPIO_SetFunc(LCD_POART, LCD_MOSI_PIN, LCD_MOSI_FUNC);

  32.     stc_spi_init_t stcSpiInit;
  33.     stc_spi_delay_t stcSpiDelayCfg;

  34.     // 使用默認參數初始化結構體
  35.     (void)SPI_StructInit(&stcSpiInit);
  36.     (void)SPI_DelayStructInit(&stcSpiDelayCfg);

  37.     // 開啟SPI時鐘
  38.     FCG_Fcg1PeriphClockCmd(SPI_FCG, ENABLE);

  39.     // 清空SPI配置
  40.     SPI_DeInit(LCD_SPI);

  41.     // 設置SPI必要參數
  42.     stcSpiInit.u32WireMode = SPI_3_WIRE; // SPI3線模式
  43.     stcSpiInit.u32TransMode = SPI_FULL_DUPLEX;
  44.     stcSpiInit.u32MasterSlave = SPI_MASTER; // SPI主機
  45.     stcSpiInit.u32ModeFaultDetect = SPI_MD_FAULT_DETECT_DISABLE;
  46.     stcSpiInit.u32SuspendMode = SPI_COM_SUSP_FUNC_OFF; // 不自動掛起
  47.     stcSpiInit.u32Parity = SPI_PARITY_INVD;            // 不開奇偶校驗
  48.     stcSpiInit.u32SpiMode = SPI_MD_0;                  // 空閑低電平,奇數邊沿采樣
  49.     stcSpiInit.u32BaudRatePrescaler = SPI_BR_CLK_DIV2; //
  50.     stcSpiInit.u32DataBits = SPI_DATA_SIZE_8BIT;       // 一次傳輸8位
  51.     stcSpiInit.u32FirstBit = SPI_FIRST_MSB;            // 高位在前

  52.     // 初始化SPI
  53.     (void)SPI_Init(LCD_SPI, &stcSpiInit);

  54.     //         // 配置SPI延時必要參數
  55.     //         stcSpiDelayCfg.u32IntervalDelay = SPI_INTERVAL_TIME_1SCK; // t3:下次存取延時
  56.     //         stcSpiDelayCfg.u32ReleaseDelay = SPI_RELEASE_TIME_1SCK;   // t2:振蕩停止到片選無效時間
  57.     //         stcSpiDelayCfg.u32SetupDelay = SPI_SETUP_TIME_1SCK;       // t1:片選有效到開始振蕩時間
  58.     //         (void)SPI_DelayTimeConfig(LCD_SPI, &stcSpiDelayCfg);

  59.     // 使能SPI
  60.     SPI_Cmd(LCD_SPI, ENABLE);

  61.     // // CS 拉高
  62.     LCD_CS_Set();
  63. }

  64. /******************************************************************************
  65.       函數說明:LCD串行數據寫入函數
  66.       入口數據:dat  要寫入的串行數據
  67.       返回值:  無
  68. ******************************************************************************/
  69. void LCD_Writ_Bus(uint8_t dat)
  70. {
  71.     LCD_CS_Clr();

  72.     uint8_t RecvData = 0;

  73.     // 等待發送緩沖區為空
  74.     while (RESET == SPI_GetStatus(LCD_SPI, SPI_FLAG_TX_BUF_EMPTY))
  75.         ;

  76.     // 發送并接收數據
  77.     SPI_TransReceive(LCD_SPI, &dat, &RecvData, 1, HCLK_VALUE);

  78.     LCD_CS_Set();
  79. }

  80. /******************************************************************************
  81.       函數說明:LCD寫入數據
  82.       入口數據:dat 寫入的數據
  83.       返回值:  無
  84. ******************************************************************************/
  85. void LCD_WR_DATA8(uint8_t dat)
  86. {
  87.     LCD_DC_Set(); // 寫數據
  88.     LCD_Writ_Bus(dat);
  89. }

  90. /******************************************************************************
  91.       函數說明:LCD寫入數據
  92.       入口數據:dat 寫入的數據
  93.       返回值:  無
  94. ******************************************************************************/
  95. void LCD_WR_DATA(uint16_t dat)
  96. {
  97.     LCD_Writ_Bus(dat >> 8);
  98.     LCD_Writ_Bus(dat & 0xff);
  99. }

  100. /******************************************************************************
  101.       函數說明:LCD寫入命令
  102.       入口數據:dat 寫入的命令
  103.       返回值:  無
  104. ******************************************************************************/
  105. void LCD_WR_REG(uint8_t dat)
  106. {
  107.     LCD_DC_Clr(); // 寫命令
  108.     LCD_Writ_Bus(dat);
  109.     LCD_DC_Set(); // 寫數據
  110. }

  111. /**
  112. * @brief       設置顯示窗口
  113. * @param       x1:窗口列起始地址
  114. * @param       y1:坐標行起始地址
  115. * @param       x2:窗口列結束地址
  116. * @param       y2:坐標行結束地址
  117. * @retval      無
  118. */
  119. void LCD_Address_Set(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
  120. {
  121.     if (USE_HORIZONTAL == 0)
  122.     {
  123.         LCD_WR_REG(0x2a); // 列地址設置
  124.         LCD_WR_DATA(x1);
  125.         LCD_WR_DATA(x2);
  126.         LCD_WR_REG(0x2b); // 行地址設置
  127.         LCD_WR_DATA(y1);
  128.         LCD_WR_DATA(y2);
  129.         LCD_WR_REG(0x2c); // 儲存器寫
  130.     }
  131.     else if (USE_HORIZONTAL == 1)
  132.     {
  133.         LCD_WR_REG(0x2a); // 列地址設置
  134.         LCD_WR_DATA(x1);
  135.         LCD_WR_DATA(x2);
  136.         LCD_WR_REG(0x2b); // 行地址設置
  137.         LCD_WR_DATA(y1);
  138.         LCD_WR_DATA(y2);
  139.         LCD_WR_REG(0x2c); // 儲存器寫
  140.     }
  141.     else if (USE_HORIZONTAL == 2)
  142.     {
  143.         LCD_WR_REG(0x2a); // 列地址設置
  144.         LCD_WR_DATA(x1);
  145.         LCD_WR_DATA(x2);
  146.         LCD_WR_REG(0x2b); // 行地址設置
  147.         LCD_WR_DATA(y1);
  148.         LCD_WR_DATA(y2);
  149.         LCD_WR_REG(0x2c); // 儲存器寫
  150.     }
  151.     else
  152.     {
  153.         LCD_WR_REG(0x2a); // 列地址設置
  154.         LCD_WR_DATA(x1);
  155.         LCD_WR_DATA(x2);
  156.         LCD_WR_REG(0x2b); // 行地址設置
  157.         LCD_WR_DATA(y1);
  158.         LCD_WR_DATA(y2);
  159.         LCD_WR_REG(0x2c); // 儲存器寫
  160.     }
  161. }

  162. /**
  163. * @brief LCD初始化
  164. */
  165. void LCD_Init(void)
  166. {
  167.     // 初始化GPIO、SPI和DMA
  168.     LCD_GPIO_Init();

  169.     LCD_RES_Clr(); // 復位
  170.     DDL_DelayMS(120);
  171.     LCD_RES_Set();
  172.     DDL_DelayMS(120);
  173.     LCD_BLK_Set(); // 打開背光
  174.     DDL_DelayMS(120);

  175.     LCD_WR_REG(0x11);
  176.     // 延時至少120ms
  177.     DDL_DelayMS(120);

  178.     LCD_WR_REG(0x36);
  179.     if (USE_HORIZONTAL == 0)
  180.         LCD_WR_DATA8(0x00);
  181.     else if (USE_HORIZONTAL == 1)
  182.         LCD_WR_DATA8(0xC0);
  183.     else if (USE_HORIZONTAL == 2)
  184.         LCD_WR_DATA8(0x70);
  185.     else
  186.         LCD_WR_DATA8(0xA0);

  187.     LCD_WR_REG(0x3A);
  188.     LCD_WR_DATA8(0x05);

  189.     LCD_WR_REG(0xB2);
  190.     LCD_WR_DATA8(0x0C);
  191.     LCD_WR_DATA8(0x0C);
  192.     LCD_WR_DATA8(0x00);
  193.     LCD_WR_DATA8(0x33);
  194.     LCD_WR_DATA8(0x33);

  195.     LCD_WR_REG(0xB7);
  196.     LCD_WR_DATA8(0x35);

  197.     LCD_WR_REG(0xBB);
  198.     LCD_WR_DATA8(0x1A);

  199.     LCD_WR_REG(0xC0);
  200.     LCD_WR_DATA8(0x2C);

  201.     LCD_WR_REG(0xC2);
  202.     LCD_WR_DATA8(0x01);

  203.     LCD_WR_REG(0xC3);
  204.     LCD_WR_DATA8(0x0B);

  205.     LCD_WR_REG(0xC4);
  206.     LCD_WR_DATA8(0x20);

  207.     LCD_WR_REG(0xC6);
  208.     LCD_WR_DATA8(0x0F);

  209.     LCD_WR_REG(0xD0);
  210.     LCD_WR_DATA8(0xA4);
  211.     LCD_WR_DATA8(0xA1);

  212.     LCD_WR_REG(0x21);
  213.     LCD_WR_REG(0xE0);
  214.     LCD_WR_DATA8(0xF0);
  215.     LCD_WR_DATA8(0x00);
  216.     LCD_WR_DATA8(0x04);
  217.     LCD_WR_DATA8(0x04);
  218.     LCD_WR_DATA8(0x04);
  219.     LCD_WR_DATA8(0x05);
  220.     LCD_WR_DATA8(0x29);
  221.     LCD_WR_DATA8(0x33);
  222.     LCD_WR_DATA8(0x3E);
  223.     LCD_WR_DATA8(0x38);
  224.     LCD_WR_DATA8(0x12);
  225.     LCD_WR_DATA8(0x12);
  226.     LCD_WR_DATA8(0x28);
  227.     LCD_WR_DATA8(0x30);

  228.     LCD_WR_REG(0xE1);
  229.     LCD_WR_DATA8(0xF0);
  230.     LCD_WR_DATA8(0x07);
  231.     LCD_WR_DATA8(0x0A);
  232.     LCD_WR_DATA8(0x0D);
  233.     LCD_WR_DATA8(0x0B);
  234.     LCD_WR_DATA8(0x07);
  235.     LCD_WR_DATA8(0x28);
  236.     LCD_WR_DATA8(0x33);
  237.     LCD_WR_DATA8(0x3E);
  238.     LCD_WR_DATA8(0x36);
  239.     LCD_WR_DATA8(0x14);
  240.     LCD_WR_DATA8(0x14);
  241.     LCD_WR_DATA8(0x29);
  242.     LCD_WR_DATA8(0x32);

  243.     LCD_WR_REG(0x20); // 反色St7789

  244.     LCD_WR_REG(0x11);
  245.     LCD_Fill(0, 0, LCD_HEIGHT, LCD_WIDTH, 0x0000);
  246.     LCD_WR_REG(0x29);
  247.     test_var = 1000;
  248. }
  249. // void LCD_Fill(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t color)
  250. // {
  251. //     uint16_t i, j;
  252. //     LCD_Address_Set(xsta, ysta, xend - 1, yend - 1);
  253. //     for (i = ysta; i < yend; i++)
  254. //     {
  255. //         for (j = xsta; j < xend; j++)
  256. //         {
  257. //             LCD_WR_DATA(color);
  258. //         }
  259. //     }
  260. // }
  261. void LCD_Fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, lv_color_t *color)
  262. {
  263.     uint16_t i, j;
  264.     uint32_t k = 0;
  265.     uint32_t x = 0, y = 0;
  266.     uint16_t height, width;
  267.     width = ex - sx + 1;  // 得到填充的寬度
  268.     height = ey - sy + 1; // 高度

  269.     LCD_Address_Set(sx, sy, ex, ey);

  270.     for (y = 0; y < width * height; y++)
  271.     {
  272.         LCD_WR_DATA(color->full);
  273.         color++;
  274.     }
  275. }
復制代碼

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
www.亚洲.com| 羞羞答答一区二区| 国产黄色片中文字幕| 黄色香蕉视频在线观看| 欧美在线视频二区| 最近的2019中文字幕免费一页| 亚洲精品欧美激情| 久久久久在线| 伊人精品久久| 国产最新在线| 亚洲AV成人精品| 日韩免费毛片| 国产精品久久久久av免费| 欧美www视频| 国产精品免费看片| 日产欧产美韩系列久久99| 久久夜色电影| 国产福利在线免费观看| 夜色福利刺激| 国产剧情在线一区| 国产影视一区二区| 永久免费未视频| 中日韩av在线播放| 欧美在线播放一区| 亚洲精品视频在线观看视频| 欧美日韩国产精品一区二区三区四区 | 国产精品久久99久久| 中文字幕日韩高清| 日韩久久久久久| 性做久久久久久久久| 99国产精品99久久久久久| 亚洲日本欧美| 成人三级视频| 国产亚洲亚洲国产一二区| av电影免费在线观看| 在线小视频网址| 芬兰videosfree性少妇| 久色视频网站| 精品黑人一区二区三区国语馆| 久久r这里只有精品| 日本三级日本三级日本三级极| 无码中文字幕色专区| 日本一区二区久久精品| 亚洲最大福利网| 日本欧美中文字幕| 久久综合伊人77777蜜臀| 欧美精品一区二区三| 欧美日韩视频在线一区二区| www国产亚洲精品久久麻豆| 久久精品99国产精品日本| 日本免费专区| 国内精品久久久久久影院8f| www.天天干.com| 中文字幕自拍偷拍| 精品无码m3u8在线观看| 97超碰在线资源| 91精产国品一二三| 午夜免费福利网站| xxww在线观看| 三级在线免费看| 日韩欧美国产免费| 奇米精品一区二区三区| av一区二区三区免费观看| 亚洲精蜜桃久在线| 亚洲免费av网| www.18av.com| 久久艹国产精品| 精品视频免费在线播放| 国产h视频在线播放| wwwxxx黄色片| www.桃色.com| 手机在线成人av| 538国产视频| 国产美女免费网站| 成年人看的免费视频| 亚洲天堂精品一区| 欧美黑人猛猛猛| 久久精品www| 久久精品欧美一区二区| 国产在线视频第一页| 日韩精品在线观看免费| 日日骚av一区二区| 国产精品露脸视频| 国产精品福利电影| www.xxx国产| 视频一区 中文字幕| 中文字幕你懂得| 久久精品视频在线观看榴莲视频| 欧美18一14sex性处hd| 韩国18福利视频免费观看| 在线观看91| 黄网网址免费| 好男人看片在线观看免费观看国语| 快灬快灬一下爽蜜桃在线观看| 日本黄色录像片| 日本理论中文字幕| 91精品一区二区三区蜜桃| 久久久久久久国产精品毛片| 天天干天天操天天爱| 99热这里只有精| 男女作爱免费网站| www91在线观看| 天堂中文字幕一二区| 黄色高清在线观看| 美女国产在线| 色豆豆成人网| 开心激情综合| 午夜精品毛片| 免费看的黄色欧美网站| 国产精品88av| 亚洲欧洲国产日本综合| 在线观看视频欧美| 日韩成人免费视频| 欧美激情精品久久久久久| 国产精品丝袜久久久久久不卡| 国产精品国产精品| 免费国产成人看片在线| 91淫黄看大片| 亚洲最大成人网站| 久久黄色精品视频| 天天躁日日躁狠狠躁喷水| 天堂免费视频| 你懂的在线视频| 三妻四妾完整版在线观看电视剧| 视频一区在线| 精品福利av| a亚洲天堂av| 欧洲一区在线观看| 欧美成人午夜激情视频| 国产精品乱子乱xxxx| av日韩在线看| 天堂www中文在线资源| 欧美精品xxxxx| 亚洲精品久久久久久久久久久久久久| 户外露出精品视频国产| 波多野结衣av在线| 蜜臀国产一区| 日韩av密桃| 激情综合一区二区三区| 中文字幕一区二区在线观看| 欧美精品少妇一区二区三区| 久热精品视频在线免费观看| www.成人av.com| 日韩精品在线观看av| 2一3sex性hd| 7799精品视频天天看| 色欧美在线观看| 在线视频专区| 亚洲狼人综合| 亚洲无线视频| 国产欧美一区二区精品秋霞影院| 欧美精品99久久久**| 国内精品在线一区| 一级特黄录像免费播放全99| 成年人小视频在线观看| www.色国产| 黄漫在线播放| 亚洲男同gay网站| 妖精视频一区二区三区免费观看 | 日韩欧美美女一区二区三区| 国产91成人在在线播放| 国产精品h视频| 精品人妻一区二区三区日产乱码卜| 成人免费一级片| 女生裸体无遮挡天堂网站免费| 女女色综合影院| 美女av一区| 精品在线免费视频| 91久久线看在观草草青青 | 亚洲国产精品欧美一二99| 宅男66日本亚洲欧美视频| 国产原创精品| avtt中文字幕| 999免费视频| 亚洲精品666| 在线观看视频一区二区三区| 韩日av一区二区| 欧美日韩国产精品成人| 国产suv精品一区二区三区88区| 免费看欧美黑人毛片| 无码人妻精品中文字幕| 免费日韩一级片| 奇米色在线视频| 色欧美激情视频在线| 国产99亚洲| 久久免费电影网| 亚洲日本欧美日韩高观看| 麻豆av一区| 国产真人真事毛片视频| 日本三级电影在线播放| 黄色精品视频网站| 大尺度一区二区| 亚洲男人天堂2023| 亚洲在线观看一区| 日本少妇xxxx动漫| 日本福利视频| 成人区精品一区二区婷婷| 亚洲视频一二区| 国产69精品久久久| 午夜免费福利视频在线观看| 亚洲国产精品久久久久久久| 免费黄色在线观看| 99热这里只有精品8| 欧美人体做爰大胆视频| 久久久久久久免费| 五月天婷婷丁香网| 天天摸天天干| 久草成人在线| 亚洲午夜在线观看视频在线| 国产精品久久久999| 日韩精品视频一区二区| 国产欧美日韩精品综合| 久久国产三级| 国产欧美一区二区精品秋霞影院| 国内外成人免费激情在线视频| 人人干人人干人人| 1区2区视频| 国产另类xxxxhd高清| 99精品视频在线观看| 久久天天躁狠狠躁夜夜av| 成人在线观看黄| 国产三级按摩推拿按摩| av片在线观看| 国产网站在线免费观看| 91久久午夜| 欧美刺激脚交jootjob| 蜜桃视频成人| 青花影视在线观看免费高清| 国产chinese男男gaygay网站 | 欧美二区在线视频| av一级黄色片| 黄色漫画在线免费看| a亚洲天堂av| 欧美一二三视频| 欧美精品久久久久久久自慰| 无套内谢大学处破女www小说| 成年网站免费观看| 成人日韩精品| 老司机免费视频一区二区三区| 色一区av在线| 一区不卡字幕| 国产女人被狂躁到高潮小说| 青青色在线视频| 精品国产一区二区三区| 中文字幕av资源一区| 色青青草原桃花久久综合| 国产又大又黄又猛| 一卡二卡三卡在线| 成人免费直播| 中文字幕一区av| 国内偷自视频区视频综合 | a毛片在线免费观看| 在线久久视频| 亚洲区小说区| 国产麻豆精品在线观看| 亚洲激情免费观看| 日本一区美女| 九九热国产在线| 欧美videos极品另类| 国产综合自拍| 在线观看91视频| 青青草免费在线视频观看| 国产无码精品在线观看| 免费女人黄页| 国产美女高潮在线观看| 国产精品免费av| 成人情视频高清免费观看电影| 国产精品免费精品一区| 色综合888| 精品免费av| 精品国产欧美一区二区| 视频一区二区三| 日韩黄色a级片| 国产传媒在线观看| 国产成人av电影在线| 这里只有精品久久| 中国极品少妇videossexhd| 国内一区二区三区精品视频| se69色成人网wwwsex| 午夜婷婷国产麻豆精品| 国产精品美女免费看| 人妻丰满熟妇av无码久久洗澡| 小明精品国产一区二区三区| 久久国产小视频| 色哟哟精品一区| 国产高清www| 国产成人亚洲欧美电影| 久草视频在线播放| 国产999精品久久| 国产在线精品一区二区不卡了| 欧洲美女免费图片一区| 国产美女视频免费观看下载软件| 97精品高清一区二区三区| 久久久久久久久久久久久久久久久久 | 成人片在线免费看| 午夜精品久久久久久久第一页按摩 | 日韩伦理在线观看| 国产精品入口麻豆九色| 日韩中文字幕在线免费观看| 91导航在线观看| 91精品国产一区二区三密臀| 国产精品自在在线| 久久久久久久久久久免费精品| 四虎成人在线播放| 一个人看的www片免费高清视频| 亚洲经典三级| 亚洲乱码一区二区| 狠狠热免费视频| 粉嫩tv在线播放| 蘑菇福利视频一区播放| 亚洲毛片在线观看| 日韩欧美理论片| 日本wwwwww| 国模大胆一区二区三区| 4438全国亚洲精品在线观看视频| 精品久久久久久中文字幕人妻最新| jjzzjjzzjjzz| 捆绑调教美女网站视频一区| 国产精品日韩久久久久| 熟女高潮一区二区三区| gratisvideos另类灌满| 久久久青草青青国产亚洲免观| 在线视频不卡一区二区| 精品国自产拍在线观看| 久久天堂久久| 免费人成精品欧美精品| 国产综合欧美在线看| 亚洲天堂狠狠干| 国产淫片在线观看| 欧美视频在线免费| 日韩欧美一级在线| 亚洲av色香蕉一区二区三区| 66视频精品| 一区二区三区天堂av| 日本少妇xxxx| 新版的欧美在线视频| 亚洲精品午夜久久久| 一区二区三区精品国产| 先锋影音在av资源看片| 国产成人亚洲综合a∨婷婷| 日韩精品一区二区三区色偷偷| 内射无码专区久久亚洲| 色狼人综合干| 97超级碰碰人国产在线观看| 久久久精品国产sm调教| jizz国产精品| 欧美大片在线观看一区二区| 88在线观看91蜜桃国自产| 国产呦小j女精品视频| 四虎精品在线| 国产美女诱惑一区二区| 国产精品嫩草在线观看| 亚洲黄色在线播放| 污污在线观看| 色综合久久66| www.色就是色| 亚洲电影视频在线| 亚洲高清免费观看| 蜜臀av无码一区二区三区| 91亚洲欧美| 日韩午夜三级在线| 日韩乱码在线观看| 日韩欧美专区| 欧美另类第一页| 国产无遮挡又黄又爽又色| 亚洲精品粉嫩美女一区| 久久久精品国产一区二区| 久久国产精品波多野结衣| 成人全视频在线观看在线播放高清 | www一区二区www免费| 5566先锋影音夜色资源站在线观看 | 久久亚洲捆绑美女| 欧美中文娱乐网| 91精品国自产在线偷拍蜜桃| 亚洲视频精品| 欧美成人综合一区| 一级网站免费观看| 欧美午夜不卡视频| 亚洲一区 视频| 91久久中文| 亚洲欧美日韩在线综合| 狠狠狠综合7777久夜色撩人| 欧美一区二区播放| 久草视频一区二区| 久久精品亚洲一区二区| 亚洲自拍偷拍第一页| 777奇米888色狠狠俺也去| 成人国产精品免费观看动漫| 青青久久av北条麻妃黑人| 天堂tv亚洲tv日本tv欧美人tv| 亚洲一级在线| 国产精品8888| 国产免播放器视频| 国产亚洲欧美日韩日本| 国产精品91av| 怡红院在线观看| 中文字幕中文字幕中文字幕亚洲无线 | 高清一区二区三区av| 日韩国产在线看| 精品一区二区三孕妇视频|