WoodData 发表于 2025-5-25 22:43

STM32N6570-DK】+ 利用LTDC驱动LCD显示

本次来试试STM32N6的LTDC外设,通过LTDC实现LCD屏显示。

首先打开STM32CubeMX,使用开发板模式新建工程,配置LTDC外设。配置如下:

先是屏幕驱动颜色和分辨率。使用RGB565颜色模式,屏幕分辨率为800*480.

!(data/attachment/forum/202505/25/222746p66yy5qy7jsljskg.png "image.png")

然后是LTDC层显示控制。这里使用2个显示层,一个显示范围100*100,另一个显示范围50**200。

!(data/attachment/forum/202505/25/222955iulgnaahn7j7niyu.png "image.png")

!(data/attachment/forum/202505/25/223138jftcfwtutfq4lggw.png "image.png")

再就是RIF模块要使能。也可以在ltdc初始化后面加上如下代码:

```
RIMC_MasterConfig_t RIMC_master = {0};
RIMC_master.MasterCID = RIF_CID_1;
RIMC_master.SecPriv = RIF_ATTRIBUTE_SEC | RIF_ATTRIBUTE_PRIV;
HAL_RIF_RIMC_ConfigMasterAttributes(RIF_MASTER_INDEX_LTDC1 , &RIMC_master);
HAL_RIF_RISC_SetSlaveSecureAttributes(RIF_RISC_PERIPH_INDEX_LTDCL1 , RIF_ATTRIBUTE_SEC | RIF_ATTRIBUTE_PRIV);

```

!(data/attachment/forum/202505/25/223403y3pvpv3aptle9vsx.png "image.png")

还必须打开HAL_RIF_MODULE_ENABLED定义使能。

!(data/attachment/forum/202505/25/223439i69d3mcn62x88kbx.png "image.png")

或者另一个办法就是直接配置RIF模块。这样就不用添加额外代码。如下:

!(data/attachment/forum/202505/25/223608nbkmvcq1qkvi56qm.png "image.png")

下面接着定义一个buffer用于显存。

```
uint32_t lcd_buffer;
void lcd_buff_set(uint16_t color)
{
    uint16_t i;
    uint16_t *ptr;
    ptr = (uint16_t *) lcd_buffer;
    for(i=0;i<100*100;i++)
    {
      ptr = color;
    }
}
```

在main函数中使用如下:

!(data/attachment/forum/202505/25/223818r5eldbaa20e1dzeu.png "image.png")

然后编译DEBUG调试就可以看到颜色方块变化了。

!(data/attachment/forum/202505/25/224154yxfxf0zx1b2l1b97.gif "n6.gif")
[!(/source/plugin/zhanmishu_markdown/template/editor/images/upload.svg) 附件:n6_lcd.zip](forum.php?mod=attachment&aid=2406946 "attachment")

4y1b3 发表于 2025-5-31 23:47

RIF 可以防止非授权的访问,如 LTDC 写 SDRAM 时未经授权会触发异常。
页: [1]
查看完整版本: STM32N6570-DK】+ 利用LTDC驱动LCD显示