从零实现 Cortex-M7从驱动到应用(二)SDRAM+RGB屏幕驱动

找来原来写的F429配置文章,我发现北极星和阿波罗不一样的地方,北极星支持RGB888、阿波罗只支持RGB565。但是北极星的教程仍用RGB565。这跟色域有关系,其实那么高的色域肉眼也很难分辨了,RGB565也够用了。

 

配置时钟为33M,但是系统时钟就要改变了,那么我们采用原子推荐的400,重新计算没问题,这样我们先生成代码编译一下看看之前的功能有没有受影响。

OK,之前的正常。

看到例程在RGB屏实验前还有SDRAM的实验,通过检查,在用RGB屏的时候的确用到了SDRAM,因为要把画的图像一次性通过LTDC通道给RGB屏,所以需要一块显存。

uint16_t ltdc_lcd_framebuf[1280][800] __attribute__((at(LCD_FRAME_BUF_ADDR))); //定义最大屏分辨率时,LCD所需的帧缓存数组大小

我们用的是1024*600分辨率,但即使这样也需要1200KB,这直接超出了H750的SRAM,所以必须要用SDRAM。

先配置SDRAM

天呢,花费了两个多小时弄SDRAM,起初一进测试SDRAM测试函数就死机,我以为是跟以前一样,是分散加载出了问题,然后我把对SDRAM的操作都屏蔽掉,发现不死机。那么就排除了分散加载的问题。

那么是哪里出了问题呢?我一度认为是cubemx配置的问题,所以一一与例程对照配置FMC_SDRAM,修改成一样的,还是不行。

突然想起来有可能是没有检查cubemx配置出来的IO口对不对,有时候和原理图上的会不一致的,但是检查后也一致。

难道是时钟刷新的问题?但是经过检查,cubemx配置的HCLK与原子的是一样的。

奇怪的是,用原子的文件配置就可以,但是代码都是一样的。原因就是,用的他的文件的刷新函数、读写函数,但是忽略了他用的句柄是自己文件内部的,而我们用cubemx生成的是不一样的,所以一定会失败且有可能操作SDRAM时导致死机。

这个教训告诉我们:不用的函数和变量一定要注释掉,或者按照原子的顺序,在cubemx生成的文件中另建函数。这样编译的时候就会报错,方便找到问题的所在!

配置RGB

虽然北极星H750开发板支持RGB888,但是色域上RGB565是足够用了,所以原子的例程也是RGB565,而且显示器也都是RGB7寸1024*600的屏幕。

当然,如果我们要把显存位置放在SDRAM上,即开头0xc0000000,其实不放在开头也是可以的。如果你之前有分配过空间在这个位置上,那么编译的时候会出错提示的。

自动配置的管脚一定要跟原理图一一对照比较,而且速度改为最快。

DMA2D

是啥呢,看名字能够看出来是DMA+2D,他就是通过DMA将指定存储地址上的一段空间传输给LTDC,也就是说我们把要画的一层1024*600放在SDRAM的0xc0000000上之后,用DMA2D去传输到屏幕上,这样CPU就能空闲出来去干别的事儿了。

因为H750跟F429都有DMA2D,用它来那么我们使能它。选项都默认。

移植驱动

 

这是我的博客文章:https://blog.csdn.net/nianzhu2937/article/details/103597680

验证成功!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值