在原子哥教程里面,关于ltcd.c文件里,用于配制层参数的的函数
[mw_shl_code=c,true]//LTDC,基本参数设置.
//注意:此函数,必须在LTDC_Layer_Window_Config之前设置.
//layerx:层值,0/1.
//bufaddr:层颜 {MOD}帧缓存起始地址
//pixformat:颜 {MOD}格式.0,ARGB8888;1,RGB888;2,RGB565;3,ARGB1555;4,ARGB4444;5,L8;6;AL44;7;AL88
//alpha:层颜 {MOD}Alpha值,0,全透明;255,不透明
//alpha0:默认颜 {MOD}Alpha值,0,全透明;255,不透明
//bfac1:混合系数1,4(100),恒定的Alpha;6(101),像素Alpha*恒定Alpha
//bfac2:混合系数2,5(101),恒定的Alpha;7(111),像素Alpha*恒定Alpha
//bkcolor:层默认颜 {MOD},32位,低24位有效,RGB888格式
//返回值:无
void LTDC_Layer_Parameter_Config(u8 layerx,u32 bufaddr,u8 pixformat,u8 alpha,u8 alpha0,u8 bfac1,u8 bfac2,u32 bkcolor)
{
LTDC_LayerCfgTypeDef pLayerCfg;
pLayerCfg.WindowX0=0; //窗口起始X坐标
pLayerCfg.WindowY0=0; //窗口起始Y坐标
pLayerCfg.WindowX1=lcdltdc.pwidth; //窗口终止X坐标
pLayerCfg.WindowY1=lcdltdc.pheight; //窗口终止Y坐标
pLayerCfg.PixelFormat=pixformat; //像素格式
pLayerCfg.Alpha=alpha; //Alpha值设置,0~255,255为完全不透明
pLayerCfg.Alpha0=alpha0; //默认Alpha值
pLayerCfg.BlendingFactor1=(u32)bfac1<<8; //设置层混合系数
pLayerCfg.BlendingFactor2=(u32)bfac2<<8; //设置层混合系数
pLayerCfg.FBStartAdress=bufaddr; //设置层颜 {MOD}帧缓存起始地址
pLayerCfg.ImageWidth=lcdltdc.pwidth; //设置颜 {MOD}帧缓冲区的宽度
pLayerCfg.ImageHeight=lcdltdc.pheight; //设置颜 {MOD}帧缓冲区的高度
pLayerCfg.Backcolor.Red=(u8)(bkcolor&0X00FF0000)>>16; //背景颜 {MOD}红 {MOD}部分
pLayerCfg.Backcolor.Green=(u8)(bkcolor&0X0000FF00)>>8; //背景颜 {MOD}绿 {MOD}部分
pLayerCfg.Backcolor.Blue=(u8)bkcolor&0X000000FF; //背景颜 {MOD}蓝 {MOD}部分
HAL_LTDC_ConfigLayer(<DC_Handler,&pLayerCfg,layerx); //设置所选中的层
} [/mw_shl_code]
在调试过程中,发现下面赋值会有问题
pLayerCfg.Backcolor.Red=(u8)(bkcolor&0X00FF0000)>>16; //背景颜 {MOD}红 {MOD}部分
pLayerCfg.Backcolor.Green=(u8)(bkcolor&0X0000FF00)>>8; //背景颜 {MOD}绿 {MOD}部分
pLayerCfg.Backcolor.Blue=(u8)bkcolor&0X000000FF; //背景颜 {MOD}蓝 {MOD}部分
如果传入bkcolor = 0X00FF0000,理论上应该是
pLayerCfg.Backcolor.Red=0xff;
pLayerCfg.Backcolor.Green=0x00;
pLayerCfg.Backcolor.Blue=0x00;
实际上为:
pLayerCfg.Backcolor.Red=0x00;
pLayerCfg.Backcolor.Green=0x00;
pLayerCfg.Backcolor.Blue=0x00;
我是在IAR上调试的,编译器是先进行(u8)(bkcolor&0X00FF0000)强转类型,然后再进行移位操作。
所以应该先移位,后转换类型才对:
pLayerCfg.Backcolor.Red=(u8) ((bkcolor&0X00FF0000)>>16); //背景颜 {MOD}红 {MOD}部分
一周热门 更多>