OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3550|回复: 0

关于stm32f429原子哥教程的LTDC层配置问题

[复制链接]

16

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2016-11-24
在线时间
30 小时
发表于 2016-12-7 09:47:52 | 显示全部楼层 |阅读模式
在原子哥教程里面,关于ltcd.c文件里,用于配制层参数的的函数

[mw_shl_code=c,true]//LTDC,基本参数设置.
//注意:此函数,必须在LTDC_Layer_Window_Config之前设置.
//layerx:层值,0/1.
//bufaddr:层颜色帧缓存起始地址
//pixformat:颜色格式.0,ARGB8888;1,RGB888;2,RGB565;3,ARGB1555;4,ARGB4444;5,L8;6;AL44;7;AL88
//alpha:层颜色Alpha值,0,全透明;255,不透明
//alpha0:默认颜色Alpha值,0,全透明;255,不透明
//bfac1:混合系数1,4(100),恒定的Alpha;6(101),像素Alpha*恒定Alpha
//bfac2:混合系数2,5(101),恒定的Alpha;7(111),像素Alpha*恒定Alpha
//bkcolor:层默认颜色,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;                //设置层颜色帧缓存起始地址
        pLayerCfg.ImageWidth=lcdltdc.pwidth;        //设置颜色帧缓冲区的宽度   
        pLayerCfg.ImageHeight=lcdltdc.pheight;      //设置颜色帧缓冲区的高度
        pLayerCfg.Backcolor.Red=(u8)(bkcolor&0X00FF0000)>>16;   //背景颜色红色部分
        pLayerCfg.Backcolor.Green=(u8)(bkcolor&0X0000FF00)>>8;  //背景颜色绿色部分
        pLayerCfg.Backcolor.Blue=(u8)bkcolor&0X000000FF;        //背景颜色蓝色部分
        HAL_LTDC_ConfigLayer(<DC_Handler,&pLayerCfg,layerx);   //设置所选中的层
}  [/mw_shl_code]
在调试过程中,发现下面赋值会有问题
pLayerCfg.Backcolor.Red=(u8)(bkcolor&0X00FF0000)>>16; //背景颜色红色部分
pLayerCfg.Backcolor.Green=(u8)(bkcolor&0X0000FF00)>>8; //背景颜色绿色部分
pLayerCfg.Backcolor.Blue=(u8)bkcolor&0X000000FF; //背景颜色蓝色部分
如果传入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); //背景颜色红色部分



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-3-1 19:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表