首页 > 其他分享 >DMA2D配置

DMA2D配置

时间:2023-10-08 19:55:36浏览次数:30  
标签:Color 配置 BSP DMA2D InitStruct Line uint32

1.DMA2D参数配置:

void BSP_DMA2D_Init(void)
{
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2D,ENABLE);
}
void BSP_DMA2D_Line_Layer1(uint32_t BSP_Position_X,uint32_t BSP_Position_Y,uint32_t BSP_Line_Width,uint32_t BSP_Line_Height,uint32_t BSP_Line_K,uint32_t BSP_Line_Color)
{
    DMA2D_DeInit();
    DMA2D_InitTypeDef DMA2D_InitStruct;
    DMA2D_InitStruct.DMA2D_Mode = DMA2D_R2M;//寄存器到显存模式
    DMA2D_InitStruct.DMA2D_CMode = DMA2D_ARGB8888;
    DMA2D_InitStruct.DMA2D_OutputBlue  = (BSP_Line_Color>>0)&0x000000FF;
    DMA2D_InitStruct.DMA2D_OutputGreen = (BSP_Line_Color>>8)&0x000000FF;
    DMA2D_InitStruct.DMA2D_OutputRed   = (BSP_Line_Color>>16)&0x000000FF;
    DMA2D_InitStruct.DMA2D_OutputAlpha = (BSP_Line_Color>>24)&0x000000FF;
    DMA2D_InitStruct.DMA2D_OutputMemoryAdd = LCD_LAYER1_Buffer_Adderess + (LCD_PIXEL_WIDTH * 4 * BSP_Position_Y) + (BSP_Position_X*4); //layer2 显存地址
    DMA2D_InitStruct.DMA2D_OutputOffset = LCD_PIXEL_WIDTH - BSP_Line_Width + BSP_Line_K; //偏移量 本行末尾 到 下一行开始 的像素数量
    DMA2D_InitStruct.DMA2D_NumberOfLine = BSP_Line_Height;
    DMA2D_InitStruct.DMA2D_PixelPerLine = BSP_Line_Width;
    DMA2D_Init(&DMA2D_InitStruct);
    DMA2D_StartTransfer();
    while(DMA2D_GetFlagStatus(DMA2D_FLAG_TC) != SET);
}


void BSP_DMA2D_Line_Layer2(uint32_t BSP_Position_X,uint32_t BSP_Position_Y,uint32_t BSP_Line_Width,uint32_t BSP_Line_Height,uint32_t BSP_Line_K,uint32_t BSP_Line_Color)
{
    DMA2D_DeInit();
    DMA2D_InitTypeDef DMA2D_InitStruct;
    DMA2D_InitStruct.DMA2D_Mode = DMA2D_R2M;//寄存器到显存模式
    DMA2D_InitStruct.DMA2D_CMode = DMA2D_ARGB8888;
    DMA2D_InitStruct.DMA2D_OutputBlue  = (BSP_Line_Color>>0)&0x000000FF;
    DMA2D_InitStruct.DMA2D_OutputGreen = (BSP_Line_Color>>8)&0x000000FF;
    DMA2D_InitStruct.DMA2D_OutputRed   = (BSP_Line_Color>>16)&0x000000FF;
    DMA2D_InitStruct.DMA2D_OutputAlpha = (BSP_Line_Color>>24)&0x000000FF;
    DMA2D_InitStruct.DMA2D_OutputMemoryAdd = LCD_LAYER2_Buffer_Adderess + (LCD_PIXEL_WIDTH * 4 * BSP_Position_Y) + (BSP_Position_X*4); //layer2 显存地址
    DMA2D_InitStruct.DMA2D_OutputOffset = LCD_PIXEL_WIDTH - BSP_Line_Width + BSP_Line_K; //偏移量 本行末尾 到 下一行开始 的像素数量
    DMA2D_InitStruct.DMA2D_NumberOfLine = BSP_Line_Height;
    DMA2D_InitStruct.DMA2D_PixelPerLine = BSP_Line_Width;
    DMA2D_Init(&DMA2D_InitStruct);
    DMA2D_StartTransfer();
    while(DMA2D_GetFlagStatus(DMA2D_FLAG_TC) != SET);
}

2.清屏函数:

void BSP_Clear_Layer1(void)
{
    uint16_t i,j;
    uint32_t *p = (uint32_t *)LCD_LAYER1_Buffer_Adderess;
    for(j=0;j<480;j++)
    {
        for(i=0;i<800;i++)
        {
            *p = BLACK;
            p++;
        }
    
    }
}
void BSP_Clear_Layer2(void)
{
    uint16_t i,j;
    uint32_t *p = (uint32_t *)LCD_LAYER2_Buffer_Adderess;
    
    
    for(j=0;j<480;j++)
    for(i=0;i<800;i++)
        {
            *p = 0xFF000000;
            p++;
        }
  
    
}

3.测试函数

void BSP_LCD_DisplayTest(void)
{
      BSP_Clear_Layer1();
      BSP_Clear_Layer2();
      BSP_DMA2D_Line_Layer2(200,200,20,50,0,YELLOW);
      BSP_DMA2D_Line_Layer2(0,0,50,50,0,WHITE);
      BSP_DMA2D_Line_Layer2(50,50,5,200,0,BLUE);
      BSP_DMA2D_Line_Layer2(200,100,200,5,0,RED);
}

4.测试结果

?改变参数多次调用DMA2D_Init()出现错误

* 初始化前调用DMA2D_DeInit()

? 传递#define的地址出错

* #define的地址是两数相加,应带上括号避免出错

 

标签:Color,配置,BSP,DMA2D,InitStruct,Line,uint32
From: https://www.cnblogs.com/Yannnnnn/p/17750002.html

相关文章

  • Localdatetime 8 全局配置
    @ConfigurationpublicclassLocalDateTimeSerializerConfig{privatestaticfinalDateTimeFormatterDATE_TIME_FORMATTER=DateTimeFormatter.ofPattern("yyyy-MM-ddHH:mm:ss");privatestaticfinalDateTimeFormatterDATE_FORMATTER=DateTimeFor......
  • 【配置软件开机自动启动功能的步骤(简洁)】
    1、右击“我的电脑”--点击“管理”进入计算机管理界面 2、点击“任务计划程序”--点击“创建基本任务”--输入“名称”--“下一页” 3、触发器选项中选中“当用户登录时”--“下一页” 4、操作选项中选中“启动程序”--“下一页”--在程序或脚本框中“选择要启动程序的路径”-......
  • 《玩转smardaten | GIS地图无码化配置全方位指南》
    GIS地图作为一种特殊图表,将地理位置信息和地图结合起来进行处理、管理和分析。这些地图可以让用户以多种方式查看、分析和解释地理数据,包括创建图层、生成主题地图和执行空间分析等,更加形象完整的辅助数据可视化。常用的场景如......
  • 容器初始化配置nginx
    目录#容器初始化,nginx配置apiVersion:"v1"kind:"Pod"metadata:name:nginx-67spec:volumes:-name:guazaiemptyDir:{}initContainers:-name:chesimage:nginx:alpineimagePullPolicy:IfNotPresentargs:["/......
  • Linux下PureFTPd配置安装(完整版)
    PureFTPd是一个centos中ftp服务器软件了,我们在网上有很多的关于PureFTPd安装教程了,下面小编来为各位介绍Linux下PureFTPd配置安装教程.网上关于pureftp的安装教程很多,但是试了以后发现很多其实都不完善,很容易出错,自己安装摸索以后总结如下.首先安装之前最好用netstat-ntl......
  • vscode 配置后安装prettier的规则自动格式化
    建议在项目的根目录下找的.vscode文件,在这个文件下创建settings.jsong写入如下配置:{//1.在保存时格式化文件"editor.formatOnSave":true,//2.在保存时格式化文件使用prettier的方式格式化"editor.defaultFormatter":"Prettier",//文件格式化配置"[json]"......
  • vmware centos配置网络
    1.cd/etc/sysconfig/network-scripts/2.viifcfg-ens33将ONBOOT设置为yes,将BOOTPROTO设置为static(静态),尔后在后边添加IP地址、网关、掩码和DNS1以及备用DNS2。修改完之后按下Esc,再输入:wq!,以保存退出。3.重启网络,在命令行中输入servicenetworkrestart。重启网卡成功之后......
  • 个人记录-Maven环境的配置
    安装背景:换了一台新电脑,需要安装Java开发环境,虽然记得大概的操作步骤但是具体的细节记得不清楚了,现在记录一下在网络上找到的Maven的安装步骤核心简要参数MAVEN_HOME%MAVEN_HOME%\binalimavenaliyunmavenhttp://maven.aliyun.com/nexus/content/groups/public/central......
  • EFCore 使用FluntApi配置 全局查询筛选器
    我们在类中通常会有一个属性为IsDel来表示软删除或也称逻辑删除,这个属性会导致我们在进行查询操作时,每一次都要.where(s=>s.IsDel==false)非常的麻烦。在使用efCore时可用通过配置查询筛选器来很好的解决这个问题。publicclassSysUser{publiclongId{get;set;}publi......
  • 如何利用动态配置中心在JavaAgent中实现微服务的多样化治理
    本文分享自华为云社区《如何利用动态配置中心在JavaAgent中实现微服务的多样化治理》,作者:华为云开源。  一、前言随着JavaAgent在微服务治理方面的广泛应用和发展,我们可以在运行时对微服务进行监控、管理和调整,以满足不同的业务需求和运行环境。然而,随着微服务架构的复杂性增加,......