硬汉嵌入式论坛

 找回密码
 立即注册
查看: 316|回复: 5
收起左侧

[有问必答] STM32F407 FSMC帧率低

[复制链接]

1

主题

2

回帖

5

积分

新手上路

积分
5
发表于 2024-3-19 16:20:11 | 显示全部楼层 |阅读模式
STM32F407 FSMC直接驱动ST7796 色彩刷新也就几帧。数据和地址的时间已经拉的很低了,但屏幕刷新还是几帧。加上DMA后效果也没变。

看了一下屏幕手册,默认配置下帧率是可以达到128帧。
求大佬们帮解答
屏幕截图 2024-03-19 161701.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2024-3-19 16:41:43 | 显示全部楼层
刷新代码贴出来看下
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2024-3-20 10:27:52 | 显示全部楼层
[C] 纯文本查看 复制代码
void LCD_WR_REG(uint16_t reg)
{   
	LCD->LCD_REG=reg;//写入要写的寄存器序号	 
}

void LCD_WR_DATA(uint16_t data)
{	 
	LCD->LCD_RAM=data;		 
}

void LCD_Address_Set(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2)
{
		LCD_WR_REG(0x2a);//列地址设置
		LCD_WR_DATA(x1>>8);
		LCD_WR_DATA(x1&0xff);
		LCD_WR_DATA(x2>>8);
		LCD_WR_DATA(x2&0xff);
		LCD_WR_REG(0x2b);//行地址设置
		LCD_WR_DATA(y1>>8);
		LCD_WR_DATA(y1&0xff);
		LCD_WR_DATA(y2>>8);
		LCD_WR_DATA(y2&0xff);
		LCD_WR_REG(0x2c);//储存器写
}

void LCD_Fill(uint16_t xsta,uint16_t ysta,uint16_t xend,uint16_t yend,uint16_t color)
{          
	uint16_t i,j; 
	LCD_Address_Set(xsta,ysta,xend,yend);//设置显示范围
	for(i=ysta;i<yend;i++)
	{													   	 	
		for(j=xsta;j<xend;j++)
		{
			LCD_WR_DATA(color);
		}
	} 					  	    
}

void Test_Color(void)
{
	LCD_Fill(0,0,lcddev.width,lcddev.height,WHITE);
	delay_ms(1000);
	LCD_Fill(0,0,lcddev.width,lcddev.height,BLACK);
	delay_ms(1000);
	LCD_Fill(0,0,lcddev.width,lcddev.height,RED);
	delay_ms(1000);
	LCD_Fill(0,0,lcddev.width,lcddev.height,GREEN);
	delay_ms(1000);
	LCD_Fill(0,0,lcddev.width,lcddev.height,BLUE);
	delay_ms(1000);
}
回复

使用道具 举报

5

主题

165

回帖

180

积分

初级会员

积分
180
发表于 2024-3-20 13:58:48 | 显示全部楼层
两层for循环的开销会比较大,可以改成单层whlie循环,最底层的LCD_WR_REG和LCD_WR_DATA写成内联函数,同时优化等级开到最高,这样速度应该会快些
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2024-3-20 14:46:36 | 显示全部楼层
我试过改成单层while循环,LCD_WR_REG和LCD_WR_DATA也写成内联,优化等级一直是最大,效果还是一样。纯色刷新还是能看到很明显的折痕。之前只跑FSMC和FSMC+DMA效果也是一样,感觉可能是驱动的问题。
回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
发表于 2024-3-21 08:55:20 | 显示全部楼层
看你的屏幕分辨率,FSMC的最大传输速度大概是10MB/s左右。算一下屏幕上的像素有多少个,每个点至少需要2个字节,可以算出来每秒可以刷多少次屏幕。以前安富莱有个帖子测过全屏刷新时间,大概好几十毫秒才能刷一次屏幕。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-2 10:47 , Processed in 0.289586 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表