0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用MultiTimer进行ILI9341 TFT屏驱动移植

冬至子 来源:兆易创新GD32 MCU 作者:小虎 2022-10-11 15:27 次阅读

1.多任务运行说明

此次测试是在之前MultiTimer的基础上增加ILI9341 TFT屏驱动,并同时运行led灯闪+串口打印+TFT屏显示三个任务,看起来像是同时运行的,实际上是利用了MultiTimer的功能进行时间片轮询操作。

2.TFT屏驱动移植

TFT屏驱动采用GDF310的硬件SPI,IO口接法如下;由于都是数据往屏幕写,没有涉及返回的数据,实际上PA6<--SPI0_MISO可以不接;另外就是注意PA5只连到了JP2的中间脚,如果接线到JP7或者JP8上的PA5,需要在JP2上街跳线帽;我的线是接到JP8的PA5脚的,因此用跳线帽将JP2的PA5与Dx相连;

PA5 SPI0_SCK
PA6 SPI0_MISO
PA7 SPI0_MOSI
PB5 LCD_CS
PB4 LCD_RST
PB3 LCD_D/C

驱动代码我参考了GD32F150R的SPI_TFT_LCD_Driver,运气比较好,拿过来小改了一下就可以跑了;以下是屏幕测试代码,

void tft_test_func(void)
{
    switch(tft_test.state)
    {
        case 0:
            num_test2(); 
            break;

        case 1:
            font_test2_1();
            break;

        case 2:
            font_test2_2();
            break;

        case 3:
            color_test2(BLUE,YELLOW,"Yellow");
            break;     
        case 4:
            color_test2(BLACK,WHITE,"White");            
            break;

        case 5:
            color_test2(WHITE,BLACK,"Black");            
            break;

        case 6:
            color_test2(WHITE,RED,"Red");            
            break;

        case 7:
            color_test2(BLUE,GREEN,"Green");            
            break;

        case 8:
            color_test2(YELLOW,BLUE,"Blue");            
            break;
        
        case 9:
            draw_test2();
            break;

        default:
            break;
    }

    tft_test.state++;
    if(tft_test.state >= 10)
    {
        tft_test.state = 0;
    }        
}

3.主函数部分

总共创建了4个任务,全部由MultiTimerYield()进行调度运行,主程序部分代码如下,可以看到液晶屏显示的任务是放到exampleTimer1Callback()中运行了,定时周期为2s。

#include 
#include "gd32f3x0.h"
#include "gd32f310k_start.h"
#include "systick.h"
#include "MultiTimer.h"
#include "app.h"
#include "hal_uart.h"
#include "tft_test.h"
#include "lcd_driver.h"


MultiTimer timer1;
MultiTimer timer2;
MultiTimer timer3;
MultiTimer timer4;

void exampleTimer1Callback(MultiTimer* timer, void *userData)
{
    printf("exampleTimer1Callback-> %s.rn", (char*)userData);
    MultiTimerStart(timer, 2000, exampleTimer1Callback, userData);
    // gpio_bit_toggle(GPIOA, GPIO_PIN_8);
    tft_test_func();
}

void exampleTimer2Callback(MultiTimer* timer, void *userData)
{
    printf("exampleTimer2Callback-> %s.rn", (char*)userData);
}

void exampleTimer3Callback(MultiTimer* timer, void *userData)
{
    printf("exampleTimer3Callback-> %s.rn", (char*)userData);
    MultiTimerStart(timer, 4567, exampleTimer3Callback, userData);
}

void exampleTimer4Callback(MultiTimer* timer, void *userData)
{
    MultiTimerStart(timer, 500, exampleTimer4Callback, userData);
    gpio_bit_toggle(GPIOA, GPIO_PIN_8);
}

/*!
    brief      main function
    param[in]  none
    param[out] none
    retval     none
*/
int main(void)
{  
    systick_config();
    /* enable the LED GPIO clock */
    rcu_periph_clock_enable(RCU_GPIOA);
    rcu_periph_clock_enable(RCU_GPIOB);
    /* configure led GPIO port */ 
    gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_8);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8);
    
    gpio_bit_reset(GPIOA, GPIO_PIN_8);
    
     /* initilize the com */
    usart0_gpio_config();
    usart0_config();
    
    /* initialize lcd */
    lcd_init();

    MultiTimerInstall(PlatformTicksGetFunc);

    MultiTimerStart(&timer1, 2000, exampleTimer1Callback, "2000ms CYCLE timer");
    MultiTimerStart(&timer2, 5000, exampleTimer2Callback, "5000ms ONCE timer");
    MultiTimerStart(&timer3, 3456, exampleTimer3Callback, "3456ms delay start, 4567ms CYCLE timer");
    MultiTimerStart(&timer4, 1000, exampleTimer4Callback, "500ms CYCLE timer");
    
    while(1){
       MultiTimerYield();
    }
}

审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1661

    浏览量

    90637
  • TFT
    TFT
    +关注

    关注

    10

    文章

    381

    浏览量

    110559
  • ILI9341
    +关注

    关注

    3

    文章

    32

    浏览量

    26912
收藏 人收藏

    评论

    相关推荐

    STM32 ILI9341驱动TFTLCD(二)

    ILI9341集成了240x320x18位图形类型静态RAM,也可称为显存。
    发表于 07-27 14:38 1550次阅读
    STM32 <b class='flag-5'>ILI9341</b><b class='flag-5'>驱动</b>TFTLCD<b class='flag-5'>屏</b>(二)

    使用ILI9341驱动如何实现曲线刷新显示?

    如题,大家在STM32F0驱动ILI93412.2寸,SPI接口绘制曲线时,一般都用什么方法来刷新显示,使曲线左移或右移而比较流畅显示,具了解ILI9341没有直接控制移
    发表于 05-16 06:00

    MSP430F1611用16BIT方式驱动ili9341芯片液晶

    这个工程msp430f1611上,用ili9341芯片驱动LCD成功,至于IC型号:ILI9341/ILI9325/RM68021/ILI9
    发表于 03-20 04:16

    如何利用stm32F4驱动摄像头在ILI9341显示上显示画面

    如何利用stm32F4驱动摄像头在ILI9341显示上显示画面?
    发表于 10-11 09:25

    ESP32驱动3.2寸ILI9341显示+XPT2046触摸的方法

    ESP32的主板ESPDUINO-32如下:用如下的:显示驱动TFT_eSPI,这个显示的速度比adafruit ILI9341快10倍。一、配置
    发表于 12-10 07:42

    ILI9341 for TFT

    ILI9341 for TFT
    发表于 12-02 10:45 58次下载
    <b class='flag-5'>ILI9341</b> for <b class='flag-5'>TFT</b>

    WK28043 2.8寸ILI9341 TFT LCD尺寸图免费下载

    本文档的主要内容详细介绍的是WK28043 2.8寸ILI9341 TFT LCD尺寸图免费下载。
    发表于 01-08 08:00 15次下载
    WK28043 2.8寸<b class='flag-5'>ILI9341</b> <b class='flag-5'>TFT</b> LCD尺寸图免费下载

    ILI9341 TFTLCD显示的单片机驱动程序应用说明

    本文档的主要内容详细介绍的是ILI9341 TFTLCD显示的单片机驱动程序应用说明。
    发表于 01-14 09:54 121次下载
    <b class='flag-5'>ILI9341</b> TFTLCD显示<b class='flag-5'>屏</b>的单片机<b class='flag-5'>驱动</b>程序应用说明

    TFT液晶显示器的单片SOC驱动器芯片ILI9341的数据手册免费下载

    ILI9341是一款用于a-TFT液晶显示器的262144色单片SOC驱动器,分辨率为240RGBx320点,包括720通道源驱动器、320通道门
    发表于 04-29 08:00 27次下载
    <b class='flag-5'>TFT</b>液晶显示器的单片SOC<b class='flag-5'>驱动</b>器芯片<b class='flag-5'>ILI9341</b>的数据手册免费下载

    ILI9341的使用之【二】ILI9341介绍

    的a-TFT LCD 的262144色单片驱动器。这个单片驱动器包含了一个720通道的源极驱动器(source driver),一个320通道的栅极
    发表于 11-23 16:21 47次下载
    <b class='flag-5'>ILI9341</b>的使用之【二】<b class='flag-5'>ILI9341</b>介绍

    ILI9341的使用之【一】TFT-LCD原理(转载)

    近期开始研究手上的LCD的使用。该LCD使用了ILI9341的IC做为驱动。因此边研究边留下记录。与上一个时钟系列类似,想必这又是一个大工程,因为
    发表于 11-24 14:51 55次下载
    <b class='flag-5'>ILI9341</b>的使用之【一】<b class='flag-5'>TFT</b>-LCD原理(转载)

    ILI9341的使用之【三】ILI9341系统通信接口模式操作详解

    ILI9341系列目录:《ILI9341的使用之【一】TFT-LCD原理(转载)》《ILI9341的使用之【二】ILI9341介绍》MCU系
    发表于 12-08 12:36 47次下载
    <b class='flag-5'>ILI9341</b>的使用之【三】<b class='flag-5'>ILI9341</b>系统通信接口模式操作详解

    SPI:在ILI9341 TFT LCD上显示PM2.5浓度

    电子发烧友网站提供《SPI:在ILI9341 TFT LCD上显示PM2.5浓度.zip》资料免费下载
    发表于 10-31 11:05 3次下载
    SPI:在<b class='flag-5'>ILI9341</b> <b class='flag-5'>TFT</b> LCD上显示PM2.5浓度

    带有ILI9341的2.4英寸LCD显示的留言板

    电子发烧友网站提供《带有ILI9341的2.4英寸LCD显示的留言板.zip》资料免费下载
    发表于 11-10 14:36 4次下载
    带有<b class='flag-5'>ILI9341</b>的2.4英寸LCD显示<b class='flag-5'>屏</b>的留言板

    STM32 ILI9341驱动TFTLCD(三)

    上次已经常用的指令封装成函数,今天通过调用这些函数在屏幕上显示图片,让大家进一步了解ILI9341
    发表于 07-27 14:41 979次阅读
    STM32 <b class='flag-5'>ILI9341</b><b class='flag-5'>驱动</b>TFTLCD<b class='flag-5'>屏</b>(三)