初级会员

- 积分
- 129
- 金钱
- 129
- 注册时间
- 2017-8-3
- 在线时间
- 32 小时
|
1金钱
画个矩形成这了
void LTDC_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u32 color)
{
u32 psx,psy,pex,pey; //以LCD面板为基准的坐标系,不随横竖屏变化而变化
u32 timeout=0;
u16 offline;
u32 addr;
//坐标系转换
psx=sx;psy=sy;
pex=ex;pey=ey;
offline=lcdltdc.pwidth-(pex-psx);
addr=(LCD_FRAME_BUF_ADDR+2*(lcdltdc.pwidth*psy+psx));
__HAL_RCC_DMA2D_CLK_ENABLE(); //使能DM2D时钟
DMA2D->CR&=~(DMA2D_CR_START); //先停止DMA2D
DMA2D->CR=DMA2D_R2M; //寄存器到存储器模式
DMA2D->OPFCCR=DMA2D_RGB565; //设置颜色格式
DMA2D->OMAR=addr; //输出存储器地址
DMA2D->OOR=offline; //设置行偏移
DMA2D->FGOR=0;
DMA2D->NLR=(pey-psy+1)|((pex-psx+1)<<16); //设定行数寄存器
DMA2D->OCOLR=color; //设定输出颜色寄存器
DMA2D->CR|=DMA2D_CR_START; //启动DMA2D
while((DMA2D->ISR&(DMA2D_FLAG_TC))==0) //等待传输完成
{
// timeout++;
// if(timeout>0X1FFFFF)break; //超时退出
}
DMA2D->IFCR|=DMA2D_FLAG_TC; //清除传输完成标志
}
|
|