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

[APM32F4] 【APM32F411V开发板测评】+ 硬件SPI驱动1.54 IPS TFT

[复制链接]
1622|3
 楼主| lu50211 发表于 2024-5-7 15:27 | 显示全部楼层 |阅读模式
上文已经完UART更新外置FLASH中的图片数据,那么今天开始驱动TFT屏了。
外接一块ST7789 驱动芯片的TFT屏,使用自带的硬件SPI驱动来驱动,接的单片机PA5和PA7,还需要  RESET,DC,CS,背光源共6只引脚。
PA5和PA7,还需要  RESET,DC,CS,背光源共6只引脚。
目前手上现有的TFT屏是中景园的,已经做成小模块了
1.jpg
按以下引脚接好电路:
PA5   -> SPI_SCK   
PA7   -> SPI_MOSI
PE7   -> RESET
PE8   ->DC
PE9   ->CS
PE10  ->背光源
2.jpg
硬件接好后就可以调试程序了
借用上次工程,并增加TFT驱动文件
3.png
初始化SPI
  1. void SPI1_Init(void)
  2. {
  3.         GPIO_Config_T GPIO_InitStructure;

  4.         RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_GPIOA);//使能GPIO时钟
  5.     RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_SYSCFG);//使能系统配置控制器时钟
  6.    
  7.     GPIO_ConfigPinAF(GPIOA, GPIO_PIN_SOURCE_5, GPIO_AF_SPI1);// Config SPI1 PinAF
  8.     GPIO_ConfigPinAF(GPIOA, GPIO_PIN_SOURCE_7, GPIO_AF_SPI1);// Config SPI1 PinAF

  9.         GPIO_InitStructure.pin = GPIO_PIN_5|GPIO_PIN_7;
  10.     GPIO_InitStructure.mode = GPIO_MODE_AF;         //复用推挽输出
  11.         GPIO_InitStructure.speed = GPIO_SPEED_100MHz;//速度
  12.         GPIO_InitStructure.otype = GPIO_OTYPE_PP;
  13.     GPIO_InitStructure.pupd = GPIO_PUPD_NOPULL;
  14.    
  15.         GPIO_Config(GPIOA, &GPIO_InitStructure); //初始化GPIOA
  16.     GPIO_SetBit(GPIOA,GPIO_PIN_5|GPIO_PIN_7);
  17.    
  18.     SPI_Config_T  SPI_InitStructure;
  19.    
  20.     RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_SPI1);//使能SPI1时钟
  21.    
  22.     SPI_ConfigStructInit(&SPI_InitStructure);

  23.         SPI_InitStructure.direction = SPI_DIRECTION_1LINE_TX;//只发送模式
  24.         SPI_InitStructure.mode = SPI_MODE_MASTER;//设置SPI工作模式:主机模式
  25.         SPI_InitStructure.length = SPI_DATA_LENGTH_8B;//设置SPI数据大小:8位帧结构
  26.         SPI_InitStructure.polarity = SPI_CLKPOL_HIGH;//串行同步时钟空闲时SCLK位高电平
  27.         SPI_InitStructure.phase = SPI_CLKPHA_2EDGE;//串行同步时钟空第二个时钟沿捕获
  28.         SPI_InitStructure.nss = SPI_NSS_SOFT;//NSS信号由硬件管理
  29.         SPI_InitStructure.baudrateDiv = SPI_BAUDRATE_DIV_2;//波特率预分频值:波特率预分频值为4
  30.         SPI_InitStructure.firstBit = SPI_FIRSTBIT_MSB;//数据传输高位先行
  31.         SPI_InitStructure.crcPolynomial = 7;//CRC值计算的多项式
  32.    
  33.         SPI_Config(SPI1,&SPI_InitStructure);//初始化SPI
  34.    
  35.     SPI_DisableCRC(SPI1);
  36.    
  37.         SPI_Enable(SPI1);//使能SPI
  38. }

替换数据发送部分
  1. /******************************************************************************
  2.       函数说明:LCD串行数据写入函数
  3.       入口数据:dat  要写入的串行数据
  4.       返回值:  无
  5. ******************************************************************************/
  6. void LCD_Writ_Bus(u8 dat)
  7. {       
  8.         LCD_CS_Clr();
  9.     while(SPI_I2S_ReadStatusFlag(SPI1, SPI_FLAG_TXBE) == RESET);//检查接收标志位
  10.         SPI_I2S_TxData(SPI1,dat);
  11.         delay(1);
  12.         LCD_CS_Set();
  13. }

修改TFT相关控制引脚
  1. //-----------------LCD端口定义----------------

  2. #define LCD_RES_Clr()  GPIO_ResetBit(GPIOE,GPIO_PIN_7)//RES
  3. #define LCD_RES_Set()  GPIO_SetBit(GPIOE,GPIO_PIN_7)

  4. #define LCD_DC_Clr()   GPIO_ResetBit(GPIOE,GPIO_PIN_8)//DC
  5. #define LCD_DC_Set()   GPIO_SetBit(GPIOE,GPIO_PIN_8)
  6.                      
  7. #define LCD_CS_Clr()   GPIO_ResetBit(GPIOE,GPIO_PIN_9)//CS
  8. #define LCD_CS_Set()   GPIO_SetBit(GPIOE,GPIO_PIN_9)

  9. #define LCD_BLK_Clr()  GPIO_ResetBit(GPIOE,GPIO_PIN_10)//BLK
  10. #define LCD_BLK_Set()  GPIO_SetBit(GPIOE,GPIO_PIN_10)

增加 测试代码

  1. int main(void)
  2. {
  3.     System_TickInit(); //滴答定时
  4.     MyUartInit(115200);//串口通信
  5.     LED_Init();        //LED
  6.     LCD_Init();        //LCD
  7.     LCD_Fill(0,0,LCD_W,LCD_H,WHITE);
  8.     LCD_BLK_Set();//打开背光
  9.    
  10.     while(1)
  11.     {
  12.         /*实时更新*/
  13.                 DataDeal_485();
  14.         
  15.         if((base_timer_flag & 0x01) != 0)
  16.         {
  17.             base_timer_flag &= 0xfe;
  18.         }
  19.         if((base_timer_flag & 0x02) != 0)
  20.         {
  21.             base_timer_flag &= 0xfd;
  22.             
  23.             GPIO_ToggleBit(GPIOE,GPIO_PIN_6);
  24.         }
  25.         if((base_timer_flag & 0x04) != 0)
  26.         {
  27.             base_timer_flag &= 0xfb;
  28.             
  29.             if((base_timer_flag & 0x08) != 0)
  30.             {
  31.                 base_timer_flag &= 0xF7;
  32.                
  33.                 LCD_ShowPicture(0,0,240,240,gImage_2);
  34.             }
  35.             else
  36.             {
  37.                 base_timer_flag |= 0x08;
  38.                 LCD_Fill(0,0,LCD_W,LCD_H,WHITE);
  39.                 LCD_ShowChinese(0,0,"极海电子",RED,WHITE,32,0);
  40.                 LCD_ShowString(0,40,"LCD_W:",RED,WHITE,16,0);
  41.                 LCD_ShowIntNum(48,40,LCD_W,3,RED,WHITE,16);
  42.                 LCD_ShowString(80,40,"LCD_H:",RED,WHITE,16,0);
  43.                 LCD_ShowIntNum(128,40,LCD_H,3,RED,WHITE,16);
  44.                 LCD_ShowString(80,40,"LCD_H:",RED,WHITE,16,0);
  45.                 LCD_ShowString(0,70,"Increaseing Nun:",RED,WHITE,16,0);
  46.                 LCD_ShowFloatNum1(128,70,t,4,RED,WHITE,16);
  47.                 t += 0.11;
  48.                 for(j=0;j<3;j++)
  49.                 {
  50.                     for(i=0;i<6;i++)
  51.                     {
  52.                         LCD_ShowPicture(40*i,120+j*40,40,40,gImage_1);
  53.                     }
  54.                 }
  55.             }
  56.             
  57.             GPIO_ToggleBit(GPIOE,GPIO_PIN_5);
  58.         }
  59.     }
  60. }

编译,调试。。。。。
4.png
这样就完成TFT的驱动工作了。。。
5.png
详细请各位看官查阅附件。
APM32F411V-TFT.zip (7.32 MB, 下载次数: 5)

打赏榜单

Gfan 打赏了 50.00 元 2024-07-17
理由:F411V Tiny测评活动优质测评帖

 楼主| lu50211 发表于 2024-5-7 15:30 | 显示全部楼层
有拍段视频,无奈不知道怎么发出来。。。。
知道怎么操作的朋友,麻烦告知下。
yuyy1989 发表于 2024-5-7 16:19 | 显示全部楼层
lu50211 发表于 2024-5-7 15:30
有拍段视频,无奈不知道怎么发出来。。。。
知道怎么操作的朋友,麻烦告知下。 ...

时间短就转成GIF图片传上来,时间长就上传到B站再把链接贴过来

评论

感谢解答。。。 时间比较短,我试着转GIF。  发表于 2024-5-8 08:24
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

438

帖子

9

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