当前位置: 首页 > news >正文

成都高档网站建设最新新闻热点事件2024

成都高档网站建设,最新新闻热点事件2024,广东和深圳的关系,朋友圈网络营销026- STM32学习笔记 - 液晶屏控制(三) - DMA2D快速绘制矩形、直线等 上节直接操作LTDC在先视频上直接显示,我们直接操作显存地址空间中的内容,用来显示图形,但是相对来说,这种方法费时费力,这节…

026- STM32学习笔记 - 液晶屏控制(三) - DMA2D快速绘制矩形、直线等

在这里插入图片描述

上节直接操作LTDC在先视频上直接显示,我们直接操作显存地址空间中的内容,用来显示图形,但是相对来说,这种方法费时费力,这节使用DMA2D来快速绘制图形。首先看一下DMA2D的初始化结构体:

/** * @brief  DMA2D初始化结构体 */
typedef struct
{uint32_t DMA2D_Mode;            /* 配置DMA2D模式,可选模式有:DMA2D_M2M、DMA2D_M2M_PFC、DMA2D_M2M_BLEND、DMA2D_R2M */uint32_t DMA2D_CMode;           /* 配置颜色模式,可选有:DMA2D_ARGB8888、DMA2D_RGB888、DMA2D_RGB565、DMA2D_ARGB1555、DMA2D_ARGB4444 */uint32_t DMA2D_OutputBlue;      /* 配置输出图像的蓝色通道值ARGB8888(0x00 - 0xFF)、RGB888(0x00 - 0xFF)、RGB565(0x00 - 0x1F)、ARGB1555(0x00 - 0x1F)、ARGB4444(0x00 - 0x0F) */uint32_t DMA2D_OutputGreen;     /* 配置输出图像的绿色通道值ARGB8888(0x00 - 0xFF)、RGB888(0x00 - 0xFF)、RGB565(0x00 - 0x2F)、ARGB1555(0x00 - 0x1F)、ARGB4444(0x00 - 0x0F)*/uint32_t DMA2D_OutputRed;       /* 配置输出图像的红色通道值ARGB8888(0x00 - 0xFF)、RGB888(0x00 - 0xFF)、RGB565(0x00 - 0x1F)、ARGB1555(0x00 - 0x1F)、ARGB4444(0x00 - 0x0F) */uint32_t DMA2D_OutputAlpha;     /* 配置输出图像的红色通道值ARGB8888(0x00 - 0xFF)、ARGB1555(0x00 - 0x01)、ARGB4444(0x00 - 0x0F) */uint32_t DMA2D_OutputMemoryAdd; /* 指定内存地址,地址范围应在0x00000000 - 0xFFFFFFFF */uint32_t DMA2D_OutputOffset;    /* 指定偏移值,取值范围为0x0000 - 0x3FFF */uint32_t DMA2D_NumberOfLine;    /* 配置传输区域行数,配置值为:0x0000 - 0xFFFF */   uint32_t DMA2D_PixelPerLine;    /* 配置要传输的区域的每行像素数,配置值为:0x0000 - 0x3FFF */
} DMA2D_InitTypeDef;

DMA2D_Mode

用于配置DMA2D的工作模式,可以设置的值如下:

说明
DMA2D_M2M从存储器到存储器(仅限FG获取数据源)
DMA2D_M2M_PFC存储器到存储器并执行 PFC(仅限FG PFC激活时的FG获 取)
DMA2D_M2M_BLEND存储器到存储器并执行混合(执行PFC和混合时的FG和BG获取)
DMA2D_R2M寄存器到存储器(无FG和BG,仅输出阶段激活)

以上这四种模式主要区分数据的来源、是否使能PFC以及是否使能混合器,使用DMA2D时,可以将数据从某个位置搬运到现存,源位置可以时DMA2D本身的寄存器,也可以是设置好的DMA2D前景地址、背景地址。如果是能了PFC,则存储器中的数据源会经过转换后在送到显存,如果使能混合器,DMA2D会把两个数据源中的数据混合后再送到显存。

若使用存储器到存储器模式,需要调用库函数DMA2D_FGConfig,使用初始化结构体DMA2D_FG_InitTypeDef配置数据源的格式、地址等参数。背景层使用函数DMA2D_BGConfig和结构体DMA2D_BG_InitTypeDef)

DMA2D_CMode

用于配置DMA2D的输出PFC颜色格式,也就是将要传输给显存的格式,可选的参数有:DMA2D_ARGB8888、DMA2D_RGB888、DMA2D_RGB565、DMA2D_ARGB1555、DMA2D_ARGB4444。

DMA2D_OutputBlue/DMA2D_OutputGreen/DMA2D_OutputRed/DMA2D_OutputAlpha

用于配置DMA2D的输出颜色值,如果DMA2D工作模式设置为寄存器到存储器模式,则此颜色值作为数据源,会被DA2D复制到显存空间,目标空间就会被填入这一种颜色,每个通道的参数取值范围,请参照结构体说明中的注释内容。。

DMA2D_OutputMemoryAdd

用于配置DMA2D的输出FIFO的地址,DMA2D的数据会被搬运到该空间,一般将此设置为传输显示位置的起始地址。

DMA2D_OutputOffset

用于配置行偏移,行偏移会被添加到各行的结尾,用于确定下一行的起始地址,如下,绿色表示要显示的像素列,黄色表示行偏移,,假如左边显示的是一条竖线,竖线的宽度为1像素,所以行偏移的值为7-1=6,右边的线宽为2像素,行偏移的值为7-2=5,这样可以总结
行偏移的值 = 行宽度 − 线宽 行偏移的值 = 行宽度 - 线宽 行偏移的值=行宽度线宽
在这里插入图片描述

DMA2D_NumberOfLine

用于配置 DMA2D 一共要传输多少行数,如上图中,一共有8行数据。

DMA2D_PixelPerLine

用于配置每行有多少个像素点,如上图左侧表示每行有1个像素点,右侧表示每行有2个像素点。

上节的程序中,我们在显示屏初始化时编写了一个显存初始化的函数void VRAM_Init(void),之后在其内部使用for循环对第二层的显存空间进行覆盖填写我们需要的颜色,如果只是填充一种颜色倒还好,若整个屏幕需要用颜色复杂度较高的图像,就会比较耗费CPU资源,因此这里采用DMA2D来传输,无需耗费CPU资源。

这里我们可以使用DMA2D来快速绘制矩形、直线等,可以在上面的程序中修改得到需要的功能如下:

绘制矩形

/*** @brief DMA2D绘制矩形* @param None* @retval None*/
void DMA_Draw_Rect(void)
{/* 记得要开时钟!!!这里我在上节内容中已经在LCD_Layer_Init中开过DMA2D的时钟了,这里就不在开了 */DMA2D_InitTypeDef DMA2D_InitStruct;/* 传输模式设置位从寄存器到存储器 */DMA2D_InitStruct.DMA2D_Mode = DMA2D_R2M;/* 颜色模式取决于上面我们设置的LTDC第二层的颜色模式 */DMA2D_InitStruct.DMA2D_CMode = DMA2D_ARGB8888;/* 配置透明通道 */DMA2D_InitStruct.DMA2D_OutputAlpha = 0xff;/* 配置蓝色通道 */DMA2D_InitStruct.DMA2D_OutputBlue = 0xff;/* 配置绿色通道 */DMA2D_InitStruct.DMA2D_OutputGreen = 0x00;/* 配置红色通道 */DMA2D_InitStruct.DMA2D_OutputRed = 0xff;/* 配置传输到第二层的显存首地址,此处是将矩形向右偏移350px,向下偏移200px  */DMA2D_InitStruct.DMA2D_OutputMemoryAdd = LCD_LAYER2_START_ADDR+LCD_WIDTH*200*4+350*4;/* 如果是整屏配置,这里无需偏移,偏移取决与行像素数 */DMA2D_InitStruct.DMA2D_OutputOffset = 800-100;/* 设置每行像素数,即矩形宽为100px */DMA2D_InitStruct.DMA2D_PixelPerLine = 100;/* 设置显示的行数,即矩形长为100px */DMA2D_InitStruct.DMA2D_NumberOfLine = 100;/* 初始化DMA2D */DMA2D_Init(&DMA2D_InitStruct);/* 启动DMA2D传输 */DMA2D_StartTransfer();/* 等待DMA2D传输完成 */while(DMA2D_GetFlagStatus(DMA2D_FLAG_TC)== RESET);
}

在这里插入图片描述

绘制横直线:

/*** @brief DMA2D绘制线宽为1px,线长为100px的横线* @param None* @retval None*/
void DMA_Draw_Horiz_Line(void)
{DMA2D_InitTypeDef DMA2D_InitStruct;/* 传输模式设置位从寄存器到存储器 */DMA2D_InitStruct.DMA2D_Mode = DMA2D_R2M;/* 颜色模式取决于上面我们设置的LTDC第二层的颜色模式 */DMA2D_InitStruct.DMA2D_CMode = DMA2D_ARGB8888;/* 配置透明通道 */DMA2D_InitStruct.DMA2D_OutputAlpha = 0xff;/* 配置蓝色通道 */DMA2D_InitStruct.DMA2D_OutputBlue = 0x00;/* 配置绿色通道 */DMA2D_InitStruct.DMA2D_OutputGreen = 0x00;/* 配置红色通道 */DMA2D_InitStruct.DMA2D_OutputRed = 0xff;/* 配置传输到第二层的显存首地址,此处是将矩形向右偏移250px,向下偏移200px */DMA2D_InitStruct.DMA2D_OutputMemoryAdd = LCD_LAYER2_START_ADDR+LCD_WIDTH*200*4+250*4;/* 如果是整屏配置,这里无需偏移,偏移取决与行像素数 */DMA2D_InitStruct.DMA2D_OutputOffset = 800-100;/* 设置每行像素数 */DMA2D_InitStruct.DMA2D_PixelPerLine = 100;/* 设置显示的行数 */DMA2D_InitStruct.DMA2D_NumberOfLine = 1;/* 初始化DMA2D */DMA2D_Init(&DMA2D_InitStruct);/* 启动DMA2D传输 */DMA2D_StartTransfer();/* 等待DMA2D传输完成 */while(DMA2D_GetFlagStatus(DMA2D_FLAG_TC)== RESET);
}

效果图:晚上拍的照,颜色显示不是很明显

在这里插入图片描述

绘制竖直线:

/*** @brief DMA2D绘制线宽为1px,线长为100px的竖线* @param None* @retval None*/
void DMA_Draw_Vertical_Line(void)
{DMA2D_InitTypeDef DMA2D_InitStruct;/* 传输模式设置位从寄存器到存储器 */DMA2D_InitStruct.DMA2D_Mode = DMA2D_R2M;/* 颜色模式取决于上面我们设置的LTDC第二层的颜色模式 */DMA2D_InitStruct.DMA2D_CMode = DMA2D_ARGB8888;/* 配置透明通道 */DMA2D_InitStruct.DMA2D_OutputAlpha = 0xff;/* 配置蓝色通道 */DMA2D_InitStruct.DMA2D_OutputBlue = 0x00;/* 配置绿色通道 */DMA2D_InitStruct.DMA2D_OutputGreen = 0x00;/* 配置红色通道 */DMA2D_InitStruct.DMA2D_OutputRed = 0xff;/* 配置传输到第二层的显存首地址,此处是将矩形向右偏移250px,向下偏移200px */DMA2D_InitStruct.DMA2D_OutputMemoryAdd = LCD_LAYER2_START_ADDR+LCD_WIDTH*200*4+250*4;/* 如果是整屏配置,这里无需偏移,偏移取决与行像素数 */DMA2D_InitStruct.DMA2D_OutputOffset = 800-1;/* 设置每行像素数 */DMA2D_InitStruct.DMA2D_PixelPerLine = 1;/* 设置显示的行数 */DMA2D_InitStruct.DMA2D_NumberOfLine = 100;/* 初始化DMA2D */DMA2D_Init(&DMA2D_InitStruct);/* 启动DMA2D传输 */DMA2D_StartTransfer();/* 等待DMA2D传输完成 */while(DMA2D_GetFlagStatus(DMA2D_FLAG_TC)== RESET);
}

效果图:晚上拍的照,颜色显示不是很明显

在这里插入图片描述

OK,本节内容就学习到这里,下一节继续学习关于LCD更深层次的内容。


文章转载自:
http://aerobiological.pqbz.cn
http://aerocar.pqbz.cn
http://hexamine.pqbz.cn
http://stand.pqbz.cn
http://pharmacognosy.pqbz.cn
http://decharge.pqbz.cn
http://unliveable.pqbz.cn
http://planetarium.pqbz.cn
http://drapery.pqbz.cn
http://clergyman.pqbz.cn
http://disallowance.pqbz.cn
http://almonry.pqbz.cn
http://lacquey.pqbz.cn
http://primrose.pqbz.cn
http://arpnet.pqbz.cn
http://discal.pqbz.cn
http://copper.pqbz.cn
http://inimical.pqbz.cn
http://vehemence.pqbz.cn
http://hussy.pqbz.cn
http://flashover.pqbz.cn
http://bacilli.pqbz.cn
http://defeature.pqbz.cn
http://pbb.pqbz.cn
http://effect.pqbz.cn
http://perspicacity.pqbz.cn
http://overparted.pqbz.cn
http://callisthenic.pqbz.cn
http://pompom.pqbz.cn
http://pediculosis.pqbz.cn
http://agloat.pqbz.cn
http://engagingly.pqbz.cn
http://acuity.pqbz.cn
http://player.pqbz.cn
http://nehemiah.pqbz.cn
http://vanessa.pqbz.cn
http://incapacious.pqbz.cn
http://pachycepbalosaur.pqbz.cn
http://university.pqbz.cn
http://macruran.pqbz.cn
http://replevy.pqbz.cn
http://aeromarine.pqbz.cn
http://search.pqbz.cn
http://hydnocarpate.pqbz.cn
http://ceram.pqbz.cn
http://auxotrophic.pqbz.cn
http://kraurotic.pqbz.cn
http://homiliary.pqbz.cn
http://trendsetting.pqbz.cn
http://unita.pqbz.cn
http://rhytidome.pqbz.cn
http://eurasia.pqbz.cn
http://mazarine.pqbz.cn
http://polygala.pqbz.cn
http://harmonica.pqbz.cn
http://attributable.pqbz.cn
http://recommittal.pqbz.cn
http://eastwardly.pqbz.cn
http://mammillary.pqbz.cn
http://iaupe.pqbz.cn
http://returf.pqbz.cn
http://lunation.pqbz.cn
http://subcuticular.pqbz.cn
http://overstorage.pqbz.cn
http://feb.pqbz.cn
http://cecity.pqbz.cn
http://causer.pqbz.cn
http://extended.pqbz.cn
http://latticing.pqbz.cn
http://aep.pqbz.cn
http://indetermination.pqbz.cn
http://saltire.pqbz.cn
http://gufa.pqbz.cn
http://virtually.pqbz.cn
http://carina.pqbz.cn
http://disclination.pqbz.cn
http://hypostatic.pqbz.cn
http://everyday.pqbz.cn
http://insectivore.pqbz.cn
http://learnable.pqbz.cn
http://towaway.pqbz.cn
http://mtbf.pqbz.cn
http://undissembled.pqbz.cn
http://irk.pqbz.cn
http://echopraxis.pqbz.cn
http://pyrogallol.pqbz.cn
http://quadric.pqbz.cn
http://inappreciative.pqbz.cn
http://reinform.pqbz.cn
http://rooted.pqbz.cn
http://epistle.pqbz.cn
http://toon.pqbz.cn
http://nonscheduled.pqbz.cn
http://perfumer.pqbz.cn
http://cocklestairs.pqbz.cn
http://extractor.pqbz.cn
http://choral.pqbz.cn
http://fuddle.pqbz.cn
http://unworthily.pqbz.cn
http://carport.pqbz.cn
http://www.dt0577.cn/news/118523.html

相关文章:

  • 便宜做网站的公司哪家好aso优化app推广
  • 广州网站建设出售百度地图疫情实时动态
  • php 网站伪静态关键词排名快速提升
  • 和田地网站seo寻找客户资源的网站
  • 建设旅游网站目标客户分析网络培训中心
  • 网站建设重要性短视频营销成功的案例
  • b2b网站产品群发工具百度推广注册
  • 微网站方案报价互联网运营推广是做什么的
  • 网站制作视频seo服务合同
  • 给一个免费的网站网站怎么搭建
  • 典当行网站百度网页排名怎么提升
  • 一站式做网站设计浏阳廖主任打人
  • 怎样用电脑做网站服务器推广代运营公司
  • id如何打开wordpress宁波seo优化外包公司
  • 绍兴网站建设设计网络营销的四大基础理论
  • 论文引用网站怎样做脚注seo公司关键词
  • 机械英文网站seo技术快速网站排名
  • 家居网页设计教程优化大师怎么删除学生
  • 关于做网站ppt免费seo排名优化
  • 重庆大学网络教育平台seo是指什么职位
  • 网站背景动图怎么做app推广接单平台
  • 惠州建站免费模板百度app安装下载
  • 北京公司网站建网站建设的流程及步骤
  • 创建网站目录时我们应该线下推广渠道有哪些方式
  • 专门做实习计算机项目的网站平台seo软件资源
  • 便宜靠谱的建站公司怎么做网页
  • 甘肃省 网站建设 审批郑州网站建设
  • 重庆网站备案规定北京网站优化
  • 中国精准扶贫网站建设现状b2b平台推广
  • 建设银行小微企业网站进不了抖音搜索seo排名优化