返回列表 发新帖我要提问本帖赏金: 30.00元(功能说明)

[AT32F405] 【AT-START-F405测评】驱动tft-lcd屏

[复制链接]
 楼主| yinwuqing110 发表于 2024-5-26 23:33 | 显示全部楼层 |阅读模式
本帖最后由 yinwuqing110 于 2024-5-26 23:52 编辑

    前段时间一直在调试,想在F405开发板上连接DS18B20模块,采集周围环境温度并于内部ADC温度采集值进行对比,但调试的结果值一直是某一固定值,似乎是IO口的设置存在问题,因为DS18B20采用的是单总线通讯,因此对IO的时序操作比较严苛,后续有时间再研究。此次就AT-START-F405开发板正常驱动SPI TFT彩屏内容进行简单分享,抛砖引玉。
      此次借助电子森林提供的SPI电阻式触摸屏做为TFT屏外设,该屏是集成XPT2046TS触摸屏控制器+ST7735S屏显驱动器,本次只分享正常驱动屏显示。基本工程框架可以使用“AT32 Work Bench”工具生成,然后根据屏厂大王“中景园”提供的参考示例代码进行移植。
管脚的分布如下,均采用杜邦线与AT-START-F405开发板相连。
对应关系.png
      然后结合电子森林提供的扩展底板部分的电路原理图进行硬件上的连线。
扩展底板原理图.png
        连接好硬件电路后,在基本工程框架中移植ST7735S驱屏源码,这里展示下部分代码:
  1. #define TFT_RST_GPIO_PORT    GPIOA
  2. #define TFT_RST_PIN          GPIO_PINS_0
  3. #define TFT_DC_GPIO_PORT     GPIOA
  4. #define TFT_DC_PIN           GPIO_PINS_1
  5. #define TFT_CS_GPIO_PORT     GPIOA
  6. #define TFT_CS_PIN           GPIO_PINS_4
  7. #define TFT_SCLK_GPIO_PORT   GPIOA
  8. #define TFT_SCLK_PIN         GPIO_PINS_5
  9. #define TFT_MOSI_GPIO_PORT   GPIOA
  10. #define TFT_MOSI_PIN         GPIO_PINS_7
  11. #define TFT_BLK_GPIO_PORT    GPIOB
  12. #define TFT_BLK_PIN          GPIO_PINS_12

  13. #define LCD_RES_LOW()   gpio_bits_reset(TFT_RST_GPIO_PORT, TFT_RST_PIN)//RES
  14. #define LCD_RES_HIGH()  gpio_bits_set(TFT_RST_GPIO_PORT, TFT_RST_PIN)

  15. #define LCD_DC_LOW()    gpio_bits_reset(TFT_DC_GPIO_PORT, TFT_DC_PIN) //DC
  16. #define LCD_DC_HIGH()   gpio_bits_set(TFT_DC_GPIO_PORT, TFT_DC_PIN)
  17.                      
  18. #define LCD_BLK_LOW()   gpio_bits_reset(TFT_BLK_GPIO_PORT, TFT_BLK_PIN) //BLK
  19. #define LCD_BLK_HIGH()  gpio_bits_set(TFT_BLK_GPIO_PORT, TFT_BLK_PIN)

  20. #define LCD_CS_LOW()    gpio_bits_reset(TFT_CS_GPIO_PORT, TFT_CS_PIN) //CS
  21. #define LCD_CS_HIGH()   gpio_bits_set(TFT_CS_GPIO_PORT, TFT_CS_PIN)

  22. #define LCD_SCLK_LOW()  gpio_bits_reset(TFT_SCLK_GPIO_PORT, TFT_SCLK_PIN) //SCLK
  23. #define LCD_SCLK_HIGH() gpio_bits_set(TFT_SCLK_GPIO_PORT, TFT_SCLK_PIN)

  24. #define LCD_MOSI_LOW()  gpio_bits_reset(TFT_MOSI_GPIO_PORT, TFT_MOSI_PIN) //MOSI
  25. #define LCD_MOSI_HIGH() gpio_bits_set(TFT_MOSI_GPIO_PORT, TFT_MOSI_PIN)
  1. int main(void)
  2. {
  3.   system_clock_config();
  4.   nvic_config();
  5.   uart_print_init(115200);
  6.   usart_init_conf();
  7.   gpio_config();
  8.   delay_init();
  9.   LcdInit();
  10.   while(1)
  11.   {
  12.        Display_Test();
  13.   }
  14. }
  1. void Display_Test(void)
  2. {
  3.         LcdFill(0,0,LCD_W,LCD_H,BLACK);
  4.         LcdShow16x16Hz(8, 0, 0, YELLOW, BLACK);
  5.         LcdShow16x16Hz(24, 0, 1, YELLOW, BLACK);
  6.         LcdShow16x16Hz(40, 0, 2, YELLOW, BLACK);
  7.         LcdShow16x16Hz(56, 0, 3, YELLOW, BLACK);
  8.         LcdShow16x16Hz(72, 0, 4, YELLOW, BLACK);
  9.         LcdShow16x16Hz(88, 0, 5, YELLOW, BLACK);
  10.         LcdShow16x16Hz(104,0, 6, YELLOW, BLACK);
  11.         LcdShowString(12,24,"AT32F405",RED, BLACK,24);
  12.         delay_ms(300);
  13.         LcdShow16x16Hz(38,60, 7, BLUE, WHITE);
  14.         delay_ms(300);
  15.         LcdShow16x16Hz(56,60, 8, BLUE, WHITE);
  16.         delay_ms(300);
  17.         LcdShow16x16Hz(74,60, 9, BLUE, WHITE);
  18.         delay_ms(1000);
  19.         LCD_ShowPicture(0,0,128,160,gImage_1);
  20.         delay_ms(1000);
  21. }
  1. void system_clock_config(void)
  2. {
  3.   /* reset crm */
  4.   crm_reset();

  5.   /* config flash psr register */
  6.   flash_psr_set(FLASH_WAIT_CYCLE_6);

  7.   /* enable pwc periph clock */
  8.   crm_periph_clock_enable(CRM_PWC_PERIPH_CLOCK, TRUE);
  9.   
  10.   /* config ldo voltage */
  11.   pwc_ldo_output_voltage_set(PWC_LDO_OUTPUT_1V3);

  12.   /* enable lick */
  13.   crm_clock_source_enable(CRM_CLOCK_SOURCE_LICK, TRUE);

  14.   /* wait till lick is ready */
  15.   while(crm_flag_get(CRM_LICK_STABLE_FLAG) != SET)
  16.   {
  17.   }

  18.   /* enable hick */
  19.   crm_clock_source_enable(CRM_CLOCK_SOURCE_HICK, TRUE);

  20.   /* wait till hick is ready */
  21.   while(crm_flag_get(CRM_HICK_STABLE_FLAG) != SET)
  22.   {
  23.   }

  24.   /* config pll clock resource */
  25.   crm_pll_config(CRM_PLL_SOURCE_HICK, 108, 1, CRM_PLL_FP_4);
  26.   /* config pllu div */
  27.   crm_pllu_div_set(CRM_PLL_FU_18);
  28.   /* enable pll */
  29.   crm_clock_source_enable(CRM_CLOCK_SOURCE_PLL, TRUE);
  30.   /* wait till pll is ready */
  31.   while(crm_flag_get(CRM_PLL_STABLE_FLAG) != SET)
  32.   {
  33.   }
  34.   /* config ahbclk */
  35.   crm_ahb_div_set(CRM_AHB_DIV_1);

  36.   /* config apb2clk, the maximum frequency of APB2 clock is 216 MHz  */
  37.   crm_apb2_div_set(CRM_APB2_DIV_1);

  38.   /* config apb1clk, the maximum frequency of APB1 clock is 120 MHz  */
  39.   crm_apb1_div_set(CRM_APB1_DIV_2);

  40.   /* enable auto step mode */
  41.   crm_auto_step_mode_enable(TRUE);

  42.   /* select pll as system clock source */
  43.   crm_sysclk_switch(CRM_SCLK_PLL);

  44.   /* wait till pll is used as system clock source */
  45.   while(crm_sysclk_switch_status_get() != CRM_SCLK_PLL)
  46.   {
  47.   }

  48.    /* enable gpioa periph clock */
  49.   crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);

  50.    /* enable gpiob periph clock */
  51.   crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
  52.         
  53.   /* enable usart1 periph clock */
  54.   crm_periph_clock_enable(CRM_USART1_PERIPH_CLOCK, TRUE);
  55.         
  56.   /* disable auto step mode */
  57.   crm_auto_step_mode_enable(FALSE);

  58.   /* update system_core_clock global variable */
  59.   system_core_clock_update();
  60. }
       移植完后编译下载到开发板中,即可看到TFT屏刷出字符图片效果,当然这里的字符显示需要借助“PCtoLCD2002”工具,而彩色图片制作借助与“Img2Lcd‘工具,这里的中文字符设置跟0.96寸OLED屏设置一样,彩色图片制作需要注意制作的原始图片是bmp格式,并且不能超过屏的最大尺寸,即128 X 160(竖屏显示),当然源码中也有提供横屏或竖屏显示的宏定义设置。如果超过最大尺寸再交由“Img2Lcd‘工具处理,最后在TFT屏上显示则得不到自己想看到的效果。 制图.png
      这里将LCD字符与图片取模工具分享出来,感兴趣的坛友可自行下载尝试。
LCD取模工具.zip (1.36 MB, 下载次数: 4)
      关于该屏显驱动芯片ST7735S数据手册如下附件:
ST7735S_Preliminary V0.1_20101215.pdf (4.05 MB, 下载次数: 5)
       工程展现的显示效果如下,总体来说AT-START-F405性能稳定,刷屏流畅不迟滞。此次就简单分享下,后续再对DS18B20模块进行调试,完成屏的触摸功能。
显示效果.gif
近看.gif




打赏榜单

ArteryMCU 打赏了 30.00 元 2024-06-07
理由:[F405开发板评测活动]内容优质

LEDyyds 发表于 2024-6-17 16:05 | 显示全部楼层
优质内容,很不错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

106

主题

1098

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部