GD32H759I-EVAL开发板板载一个RGB的液晶屏,使用了MCU的TLI外设来驱动的,这个TLI外设很强大,是专用于驱动RGB液晶屏的接口。TLI支持两个独立的显示层,并支持层窗口和层混叠功能。

下面就来试试这个TLI外设驱动LCD屏测试一下效果。

开发板的mcu与RGB屏接口如下。要注意跳线帽配置,因为RGB液晶屏占用GPIO比较多,与其他外设有共用引脚。

image.png

下面就开始初始化TLI外设。参考例子代码,首先初始化用到的GPIO引脚,然后就是TLI。代码如下:

这里使用了SDRAM作为LCD的显存,还要添加SDRAM驱动。

  1. #include "gd32h759i_lcd_eval.h"
  2. #include "gd32h759i_eval_exmc_sdram.h"
  3. #include <string.h>

  4. #define LCD_FRAME_BUFFER         ((uint32_t)0xC0000000)
  5. #define BUFFER_OFFSET            ((uint32_t)0x7F800)    //480*272*4

  6. static font_struct *current_font;
  7. static uint16_t current_textcolor = 0x0000;
  8. static uint16_t current_backcolor = 0xFFFF;
  9. static uint32_t current_framebuffer = LCD_FRAME_BUFFER;
  10. static uint32_t current_layer = LCD_LAYER_BACKGROUND;

  11. static void lcd_char_draw(uint16_t xpos, uint16_t ypos, const uint16_t *c);
  12. static void lcd_vertical_char_draw(uint16_t xpos, uint16_t ypos, const uint16_t *c);
  13. static void pixel_set(int16_t x, int16_t y);

  14. #define HORIZONTAL_SYNCHRONOUS_PULSE  41
  15. #define HORIZONTAL_BACK_PORCH         2
  16. #define ACTIVE_WIDTH                  480
  17. #define HORIZONTAL_FRONT_PORCH        2

  18. #define VERTICAL_SYNCHRONOUS_PULSE    10
  19. #define VERTICAL_BACK_PORCH           2
  20. #define ACTIVE_HEIGHT                 272
  21. #define VERTICAL_FRONT_PORCH          2

  22. /*!
  23.     \brief    initialize the LCD GPIO and TLI
  24.     \param[in]  none
  25.     \param[out] none
  26.     \retval     none
  27. */
  28. void lcd_init(void)
  29. {
  30.     tli_parameter_struct tli_init_struct;

  31.     /* enable GPIO clock */
  32.     rcu_periph_clock_enable(RCU_GPIOA);
  33.     rcu_periph_clock_enable(RCU_GPIOB);
  34.     rcu_periph_clock_enable(RCU_GPIOC);
  35.     rcu_periph_clock_enable(RCU_GPIOD);
  36.     rcu_periph_clock_enable(RCU_GPIOE);
  37.     rcu_periph_clock_enable(RCU_GPIOF);
  38.     rcu_periph_clock_enable(RCU_GPIOH);
  39.     rcu_periph_clock_enable(RCU_GPIOG);

  40.     /* configure HSYNC(PE15), VSYNC(PA7), PCLK(PG7) */
  41.     gpio_af_set(GPIOE, GPIO_AF_14, GPIO_PIN_15);
  42.     gpio_af_set(GPIOA, GPIO_AF_14, GPIO_PIN_7);
  43.     gpio_af_set(GPIOG, GPIO_AF_14, GPIO_PIN_7);
  44.     gpio_mode_set(GPIOE, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_15);
  45.     gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_15);
  46.     gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_7);
  47.     gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_7);
  48.     gpio_mode_set(GPIOG, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_7);
  49.     gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_7);

  50.     /* configure LCD_R7(PG6), LCD_R6(PH12), LCD_R5(PH11), LCD_R4(PA5), LCD_R3(PH9),LCD_R2(PH8),
  51.                  LCD_R1(PH3), LCD_R0(PH2) */
  52.     gpio_af_set(GPIOG, GPIO_AF_14, GPIO_PIN_6);
  53.     gpio_af_set(GPIOH, GPIO_AF_14, GPIO_PIN_12);
  54.     gpio_af_set(GPIOH, GPIO_AF_14, GPIO_PIN_11);
  55.     gpio_af_set(GPIOA, GPIO_AF_14, GPIO_PIN_5);
  56.     gpio_af_set(GPIOH, GPIO_AF_14, GPIO_PIN_9);
  57.     gpio_af_set(GPIOH, GPIO_AF_14, GPIO_PIN_8);
  58.     gpio_af_set(GPIOH, GPIO_AF_14, GPIO_PIN_3);
  59.     gpio_af_set(GPIOH, GPIO_AF_14, GPIO_PIN_2);

  60.     gpio_mode_set(GPIOG, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_6);
  61.     gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_6);
  62.     gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_12);
  63.     gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_12);
  64.     gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_11);
  65.     gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_11);
  66.     gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_5);
  67.     gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_5);
  68.     gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_9);
  69.     gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_9);
  70.     gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_8);
  71.     gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_8);
  72.     gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_3);
  73.     gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_3);
  74.     gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_2);
  75.     gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_2);

  76.     /* configure  LCD_G7(PD3), LCD_G6(PC7), LCD_G5(PC1), LCD_G4(PH15), LCD_G3(PH14), LCD_G2(PH13),LCD_G1(PB0), LCD_G0(PB1) */
  77.     gpio_af_set(GPIOD, GPIO_AF_14, GPIO_PIN_3);
  78.     gpio_af_set(GPIOC, GPIO_AF_14, GPIO_PIN_7);
  79.     gpio_af_set(GPIOC, GPIO_AF_14, GPIO_PIN_1);
  80.     gpio_af_set(GPIOH, GPIO_AF_14, GPIO_PIN_15);
  81.     gpio_af_set(GPIOH, GPIO_AF_14, GPIO_PIN_14);
  82.     gpio_af_set(GPIOH, GPIO_AF_14, GPIO_PIN_13);
  83.     gpio_af_set(GPIOB, GPIO_AF_14, GPIO_PIN_0);
  84.     gpio_af_set(GPIOB, GPIO_AF_14, GPIO_PIN_1);

  85.     gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_3);
  86.     gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_3);
  87.     gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_7);
  88.     gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_7);
  89.     gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_1);
  90.     gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_1);
  91.     gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_15);
  92.     gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_15);
  93.     gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_14);
  94.     gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_14);
  95.     gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_13);
  96.     gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_13);
  97.     gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_0);
  98.     gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_0);
  99.     gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_1);
  100.     gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_1);

  101.     /* configure LCD_B7(PB9), LCD_B6(PB8), LCD_B5(PB5), LCD_B4(PC11), LCD_B3(PG11),LCD_B2(PG10), LCD_B1(PG12), LCD_B0(PG14) */
  102.     gpio_af_set(GPIOB, GPIO_AF_14, GPIO_PIN_9);
  103.     gpio_af_set(GPIOB, GPIO_AF_14, GPIO_PIN_8);
  104.     gpio_af_set(GPIOB, GPIO_AF_3, GPIO_PIN_5);
  105.     gpio_af_set(GPIOC, GPIO_AF_14, GPIO_PIN_11);
  106.     gpio_af_set(GPIOG, GPIO_AF_14, GPIO_PIN_11);
  107.     gpio_af_set(GPIOG, GPIO_AF_14, GPIO_PIN_10);
  108.     gpio_af_set(GPIOG, GPIO_AF_14, GPIO_PIN_12);
  109.     gpio_af_set(GPIOG, GPIO_AF_14, GPIO_PIN_14);

  110.     gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_9);
  111.     gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_9);
  112.     gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_8);
  113.     gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_8);
  114.     gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_5);
  115.     gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_5);
  116.     gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_11);
  117.     gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_11);
  118.     gpio_mode_set(GPIOG, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_11);
  119.     gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_11);
  120.     gpio_mode_set(GPIOG, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_10);
  121.     gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_10);
  122.     gpio_mode_set(GPIOG, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_12);
  123.     gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_12);
  124.     gpio_mode_set(GPIOG, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_14);
  125.     gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_14);

  126.     /* configure LCD_DE(PF10) */
  127.     gpio_af_set(GPIOF, GPIO_AF_14, GPIO_PIN_10);
  128.     gpio_mode_set(GPIOF, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_10);
  129.     gpio_output_options_set(GPIOF, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_10);
  130.     /* LCD PWM BackLight(PG13) */
  131.     gpio_mode_set(GPIOG, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_PIN_13);
  132.     gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_13);
  133.     gpio_bit_set(GPIOG, GPIO_PIN_13);

  134.     rcu_periph_clock_enable(RCU_TLI);

  135.     /* configure PLL2 to generate TLI clock 25MHz/25*192/3 = 64MHz*/
  136.     rcu_pll_input_output_clock_range_config(IDX_PLL1,RCU_PLL1RNG_1M_2M,RCU_PLL1VCO_192M_836M);
  137.     if(ERROR == rcu_pll2_config(25,192,3,3,3)){
  138.         while(1){
  139.         }
  140.     }
  141.     rcu_pll_clock_output_enable(RCU_PLL2R);
  142.     rcu_tli_clock_div_config(RCU_PLL2R_DIV8);
  143.    
  144.     rcu_osci_on(RCU_PLL2_CK);
  145.    
  146.     if(ERROR == rcu_osci_stab_wait(RCU_PLL2_CK)){
  147.         while(1){
  148.         }
  149.     }

  150.     /* configure the EXMC access mode */
  151.     exmc_synchronous_dynamic_ram_init(EXMC_SDRAM_DEVICE0);

  152.     /* TLI initialization */
  153.     tli_init_struct.signalpolarity_hs = TLI_HSYN_ACTLIVE_LOW;
  154.     tli_init_struct.signalpolarity_vs = TLI_VSYN_ACTLIVE_LOW;
  155.     tli_init_struct.signalpolarity_de = TLI_DE_ACTLIVE_LOW;
  156.     tli_init_struct.signalpolarity_pixelck = TLI_PIXEL_CLOCK_INVERTEDTLI;

  157.     /* LCD display timing configuration */
  158.     tli_init_struct.synpsz_hpsz   = HORIZONTAL_SYNCHRONOUS_PULSE - 1;
  159.     tli_init_struct.synpsz_vpsz   = VERTICAL_SYNCHRONOUS_PULSE   - 1;
  160.     tli_init_struct.backpsz_hbpsz = HORIZONTAL_SYNCHRONOUS_PULSE + HORIZONTAL_BACK_PORCH - 1;
  161.     tli_init_struct.backpsz_vbpsz = VERTICAL_SYNCHRONOUS_PULSE   + VERTICAL_BACK_PORCH   - 1;
  162.     tli_init_struct.activesz_hasz = HORIZONTAL_SYNCHRONOUS_PULSE + HORIZONTAL_BACK_PORCH + ACTIVE_WIDTH  - 1;
  163.     tli_init_struct.activesz_vasz = VERTICAL_SYNCHRONOUS_PULSE   + VERTICAL_BACK_PORCH   + ACTIVE_HEIGHT - 1;
  164.     tli_init_struct.totalsz_htsz  = HORIZONTAL_SYNCHRONOUS_PULSE + HORIZONTAL_BACK_PORCH + ACTIVE_WIDTH  + HORIZONTAL_FRONT_PORCH - 1;
  165.     tli_init_struct.totalsz_vtsz  = VERTICAL_SYNCHRONOUS_PULSE   + VERTICAL_BACK_PORCH   + ACTIVE_HEIGHT + VERTICAL_FRONT_PORCH   - 1;

  166.     /* LCD background color configure*/
  167.     tli_init_struct.backcolor_red   = 0xFF;
  168.     tli_init_struct.backcolor_green = 0xFF;
  169.     tli_init_struct.backcolor_blue  = 0xFF;
  170.     tli_init(&tli_init_struct);
  171. }

然后就是初始化TLI的独立显示层Layer0和Layer1。

  1. /*!
  2.     \brief    initialize TLI layer0 or layer1
  3.     \param[in]  layer: LCD layer
  4.       \arg        LCD_LAYER_BACKGROUND
  5.       \arg        LCD_LAYER_FOREGROUND
  6.     \param[in]  width: width of the window
  7.     \param[in]  height: height of the window
  8.     \param[out] none
  9.     \retval     none
  10. */
  11. void lcd_layer_init(uint32_t layer,uint16_t x_offset, uint16_t y_offset, uint16_t width, uint16_t height,uint8_t alpha)
  12. {
  13.     tli_layer_parameter_struct  tli_layer_init_struct;
  14.     if(LCD_LAYER_BACKGROUND == layer){
  15.         /* TLI layer0 configuration */
  16.         tli_layer_init_struct.layer_window_leftpos = (x_offset + HORIZONTAL_SYNCHRONOUS_PULSE + HORIZONTAL_BACK_PORCH);
  17.         tli_layer_init_struct.layer_window_rightpos = (x_offset + width + HORIZONTAL_SYNCHRONOUS_PULSE + HORIZONTAL_BACK_PORCH - 1);
  18.         tli_layer_init_struct.layer_window_toppos = (y_offset + VERTICAL_SYNCHRONOUS_PULSE + VERTICAL_BACK_PORCH);
  19.         tli_layer_init_struct.layer_window_bottompos = (y_offset + height + VERTICAL_SYNCHRONOUS_PULSE + VERTICAL_BACK_PORCH - 1);
  20.         tli_layer_init_struct.layer_ppf = LAYER_PPF_RGB565;
  21.         tli_layer_init_struct.layer_sa = alpha;
  22.         tli_layer_init_struct.layer_default_blue = 0x00;
  23.         tli_layer_init_struct.layer_default_green = 0x00;
  24.         tli_layer_init_struct.layer_default_red = 0x00;
  25.         tli_layer_init_struct.layer_default_alpha = 0xFF;
  26.         tli_layer_init_struct.layer_acf1 = LAYER_ACF1_PASA;
  27.         tli_layer_init_struct.layer_acf2 = LAYER_ACF2_PASA;
  28.         tli_layer_init_struct.layer_frame_bufaddr = LCD_FRAME_BUFFER;
  29.         tli_layer_init_struct.layer_frame_line_length = ((width * 2) + 3);
  30.         tli_layer_init_struct.layer_frame_buf_stride_offset = (width * 2);
  31.         tli_layer_init_struct.layer_frame_total_line_number = height;
  32.         tli_layer_init(LAYER0, &tli_layer_init_struct);
  33.     }else if(LCD_LAYER_FOREGROUND == layer){
  34.         /* TLI layer1 configuration */
  35.         tli_layer_init_struct.layer_window_leftpos = (x_offset + HORIZONTAL_SYNCHRONOUS_PULSE + HORIZONTAL_BACK_PORCH);
  36.         tli_layer_init_struct.layer_window_rightpos = (x_offset + width + HORIZONTAL_SYNCHRONOUS_PULSE + HORIZONTAL_BACK_PORCH - 1);
  37.         tli_layer_init_struct.layer_window_toppos = (y_offset + VERTICAL_SYNCHRONOUS_PULSE + VERTICAL_BACK_PORCH);
  38.         tli_layer_init_struct.layer_window_bottompos = (y_offset + height + VERTICAL_SYNCHRONOUS_PULSE + VERTICAL_BACK_PORCH - 1);
  39.         tli_layer_init_struct.layer_ppf = LAYER_PPF_RGB565;
  40.         tli_layer_init_struct.layer_sa = alpha;
  41.         tli_layer_init_struct.layer_default_blue = 0xFF;
  42.         tli_layer_init_struct.layer_default_green = 0xFF;
  43.         tli_layer_init_struct.layer_default_red = 0xFF;
  44.         tli_layer_init_struct.layer_default_alpha = 0x0;
  45.         tli_layer_init_struct.layer_acf1 = LAYER_ACF1_PASA;
  46.         tli_layer_init_struct.layer_acf2 = LAYER_ACF2_PASA;
  47.         tli_layer_init_struct.layer_frame_bufaddr = LCD_FRAME_BUFFER + BUFFER_OFFSET;
  48.         tli_layer_init_struct.layer_frame_line_length = ((width * 2) + 3);
  49.         tli_layer_init_struct.layer_frame_buf_stride_offset = (width * 2);
  50.         tli_layer_init_struct.layer_frame_total_line_number = height;
  51.         tli_layer_init(LAYER1, &tli_layer_init_struct);
  52.     }

  53.     tli_reload_config(TLI_REQUEST_RELOAD_EN);
  54.     lcd_font_set(&LCD_DEFAULT_FONT);
  55. }

整体初始化,调用之后就可以显示LCD界面了。

  1. /*!
  2.     \brief      initializes the LCD of GD EVAL board
  3.     \param[in]  none
  4.     \param[out] none
  5.     \retval     none
  6. */
  7. void gd_eval_lcd_init(void)
  8. {
  9.     lcd_init();
  10.     lcd_layer_init(LCD_LAYER_BACKGROUND, 0,0,LCD_PIXEL_WIDTH, LCD_PIXEL_HEIGHT,0xff);
  11.     lcd_layer_init(LCD_LAYER_FOREGROUND, 0,0,LCD_PIXEL_WIDTH, LCD_PIXEL_HEIGHT,0x00);
  12.     tli_layer_enable(LAYER0);
  13.     tli_layer_enable(LAYER1);
  14.     tli_enable();
  15.   
  16.     lcd_layer_set(LCD_LAYER_BACKGROUND);
  17.     lcd_transparency_set(255);
  18.     lcd_clear(LCD_COLOR_WHITE);
  19.    
  20.     lcd_layer_set(LCD_LAYER_FOREGROUND);
  21.     lcd_transparency_set(128);
  22.     lcd_clear(LCD_COLOR_WHITE);
  23. }

在下面是我添加的绘图函数,其他画点,画线,填充和字符显示使用例子的代码。
  1. void lcd_draw_image(uint16_t xpos, uint16_t ypos,uint16_t width, uint16_t height, uint16_t *fb_color)
  2. {
  3.     uint32_t x,y = 0;
  4.     for (y = 0; y < height; y++)
  5.     {
  6.         for (x = 0; x < width; x++)
  7.         {
  8.             *(__IO uint16_t*)(current_framebuffer + (2*(x+xpos) + (y+ypos) * LCD_PIXEL_WIDTH * 2)) = *fb_color++;
  9.         }
  10.     }
  11. }

下面是main函数添加测试代码:   

  1. int main(void)
  2. {
  3.     /* enable the CPU cache */
  4.     /* enable i-cache */
  5.     SCB_EnableICache();
  6.     /* enable d-cache */
  7.     SCB_EnableDCache();
  8.     /* configure systick */
  9.     systick_config();
  10.     init_cycle_counter(true);
  11.    
  12.     gpio_config();
  13.     usart_config();
  14.    
  15.     /* output a message on hyperterminal using printf function */
  16.     printf("\r\n USART printf example.\r\n");
  17.    
  18.     gd_eval_lcd_init();
  19.     delay_ms(200);
  20.    
  21.     lcd_layer_set(LCD_LAYER_FOREGROUND);
  22.     lcd_text_color_set(LCD_COLOR_RED);
  23.     lcd_background_color_set(LCD_COLOR_BLACK);
  24.     delay_ms(400);
  25.    
  26.     lcd_layer_set(LCD_LAYER_BACKGROUND);
  27.     lcd_transparency_set(128);
  28.     lcd_clear(LCD_COLOR_RED);
  29.     lcd_string_display(80,(uint8_t *)"RED    ");
  30.     delay_ms(400);
  31.     lcd_clear(LCD_COLOR_GREEN);
  32.     lcd_string_display(80,(uint8_t *)"GREEN  ");
  33.     delay_ms(400);
  34.     lcd_clear(LCD_COLOR_BLUE);
  35.     lcd_string_display(80,(uint8_t *)"BLUE   ");
  36.     delay_ms(400);
  37.     lcd_clear(LCD_COLOR_YELLOW);
  38.     lcd_string_display(80,(uint8_t *)"YELLOW ");
  39.     delay_ms(400);
  40.     lcd_clear(LCD_COLOR_CYAN);
  41.     lcd_string_display(80,(uint8_t *)"CYAN   ");
  42.     delay_ms(400);
  43.     lcd_clear(LCD_COLOR_MAGENTA);
  44.     lcd_string_display(80,(uint8_t *)"MAGENTA");
  45.     delay_ms(400);
  46.     lcd_clear(LCD_COLOR_WHITE);
  47.     lcd_string_display(40,(uint8_t *)"GD32H759 LCD Layer0 Color.");
  48.    
  49.     delay_ms(1000);
  50.     lcd_layer_set(LCD_LAYER_FOREGROUND);
  51.     lcd_transparency_set(255);
  52.     lcd_clear(LCD_COLOR_RED);
  53.     lcd_string_display(120,(uint8_t *)"RED    ");
  54.     delay_ms(400);
  55.     lcd_clear(LCD_COLOR_GREEN);
  56.     lcd_string_display(120,(uint8_t *)"GREEN  ");
  57.     delay_ms(400);
  58.     lcd_clear(LCD_COLOR_BLUE);
  59.     lcd_string_display(120,(uint8_t *)"BLUE   ");
  60.     delay_ms(400);
  61.     lcd_clear(LCD_COLOR_YELLOW);
  62.     lcd_string_display(120,(uint8_t *)"YELLOW ");
  63.     delay_ms(400);
  64.     lcd_clear(LCD_COLOR_CYAN);
  65.     lcd_string_display(120,(uint8_t *)"CYAN   ");
  66.     delay_ms(400);
  67.     lcd_clear(LCD_COLOR_MAGENTA);
  68.     lcd_string_display(120,(uint8_t *)"MAGENTA");
  69.     delay_ms(400);
  70.     lcd_clear(LCD_COLOR_BLUE);
  71.     lcd_string_display(0,(uint8_t *)"GD32H759 LCD Layer1 Color.");
  72.    
  73.     for(int i=0;i<100;i+=10)
  74.     {
  75.         lcd_draw_image(20+i*2,30+i,247,118,(uint16_t *)gImage_image1);
  76.         delay_ms(200);
  77.     }
  78.    
  79.     while(1)
  80.     {
  81.         GPIO_TG(LED2_GPIO_PORT) = LED2_PIN;
  82.         delay_1ms(100);
  83.         GPIO_TG(LED1_GPIO_PORT) = LED1_PIN;
  84.         delay_1ms(100);
  85.         
  86.         if(gpio_input_bit_get(TAMPER_KEY_GPIO_PORT, TAMPER_KEY_PIN) == RESET)
  87.         {
  88.             printf("\r\n TAMPER_KEY Press.\r\n");
  89.         }
  90.         if(gpio_input_bit_get(WAKEUP_KEY_GPIO_PORT, WAKEUP_KEY_PIN) == RESET)
  91.         {
  92.             printf("\r\n WAKEUP_KEY Press.\r\n");
  93.         }
  94.         if(gpio_input_bit_get(USER_KEY_GPIO_PORT, USER_KEY_PIN) == RESET)
  95.         {
  96.             printf("\r\n USER_KEY Press.\r\n");
  97.         }
  98.     }
  99. }

整体工程结构如下:

1712326509104.jpg



工程如下:
GDH7_Demo.zip (2.71 MB, 下载次数: 8)
全部回复 1
  • 0 主题
  • 5 帖子
  • 219 积分
身份:LV1 技术小白
E币:204
大佬你好,想租用以下GD32H759I-EVAL板子参加验电赛用,诚心,可以联系我哦微信T17754923932
回复楼主
您需要登录后才可以评论 登录 立即注册