OpenEdv-开源电子网

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

[战舰F103] 战舰V3&精英/探索者通过PWM调节液晶亮度测试程序

[复制链接]

109

主题

5562

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10541
金钱
10541
注册时间
2017-2-18
在线时间
1908 小时
发表于 2018-11-1 18:02:13 | 显示全部楼层 |阅读模式
本帖最后由 peng1554 于 2019-8-21 21:33 编辑

有用户发帖说2.8寸MCU屏无法设置背光亮度:http://www.openedv.com/forum.php ... 12&page=1#pid896957,所以移植了这个程序测试程序基于TFTLCD实验例程修改,战舰V3和精英板子的PB0接的是LCD的背光信号,而PB0可以复用为TIM3_CH3输出PWM
只要控制PWM的占空比就能控制液晶亮度,所以要使用PWM输出需要用户熟悉下PWM输出实验。在熟悉PWM的情况下再去
设置TIM3_CH3输出PWM

整个程序最重要的LCD_PWM_Init()和LCD_SSD_BackLightSet(),LCD_PWM_Init()
设置TIM3_CH3PWM输出,LCD_SSD_BackLightSet()设置7寸V2MCU屏液晶亮度
LCD_PWM_Init()如下:
[mw_shl_code=c,true]//控制BL信号PWM初始化TIM3_CH3(PB0)
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void LCD_PWM_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);        //使能定时器3时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); //使能GPIO外设时钟

//设置该引脚为复用输出功能,输出TIM3 CH3的PWM脉冲波形        GPIOB.0
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //TIM_CH3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO

//初始化TIM3
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

//初始化TIM3 Channel3 PWM模式         
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
TIM_OC3Init(TIM3, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC3

TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR3上的预装载寄存器

TIM_Cmd(TIM3, ENABLE); //使能TIM3
}[/mw_shl_code]
LCD_SSD_BackLightSet()如下:
[mw_shl_code=c,true]//SSD1963 背光设置
//pwm:背光等级,0~100.越大越亮.
void LCD_SSD_BackLightSet(u8 pwm)
{        
LCD_WR_REG(0xBE);        //配置PWM输出
LCD_WR_DATA(0x05);        //1设置PWM频率
LCD_WR_DATA(pwm*2.55);//2设置PWM占空比
LCD_WR_DATA(0x01);        //3设置C
LCD_WR_DATA(0xFF);        //4设置D
LCD_WR_DATA(0x00);        //5设置E
LCD_WR_DATA(0x00);        //6设置F
}[/mw_shl_code]
EN_MCU_SSD1963宏来确定控制7寸V2屏的亮度还是控制 2.8/3.5/4.3寸MCU屏亮度,main.c程序如下[mw_shl_code=c,true]#define EN_MCU_SSD1963                         1   //使能7寸V2MCU屏,注释掉即使能2.8/3.5/4.3MCU屏

int main(void)
{        
        u16 lcdpwmval_1,lcdpwmval_2=0;// lcdpwmval_1,lcdpwmval_2
         u8 dir_1,dir_2=1;
        u8 lcd_id[12];                        //存放LCD ID字符串
        delay_init();                     //延时函数初始化         
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
        uart_init(115200);                 //串口初始化为115200
        LCD_PWM_Init(899,0);//LCD PWM控制频率为80KHZ
        LCD_Init();
        POINT_COLOR=RED;
        sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id);//将LCD ID打印到lcd_id数组。        
        LCD_Clear(WHITE);
        LCD_ShowString(30,40,210,24,24,"WarShip STM32 ^_^");
        LCD_ShowString(30,70,200,16,16,"TFTLCD TEST");
        LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
          while(1)
        {        
#ifdef  EN_MCU_SSD1963                                                        //控制TIM3_CH3输出PWM的占空比
                        delay_ms(10);                                                        
                        if(dir_1)lcdpwmval_2++;
                        else lcdpwmval_2--;
                        if(lcdpwmval_2>100)dir_1=0;
                        if(lcdpwmval_2==0)dir_1=1;
                        LCD_SSD_BackLightSet(lcdpwmval_2);        
#else
                        delay_ms(10);                                         
                        if(dir_1)lcdpwmval_1++;
                        else lcdpwmval_1--;
                        if(lcdpwmval_1>800)dir_1=0;
                        if(lcdpwmval_1==0)dir_1=1;
                        TIM_SetCompare3(TIM3,lcdpwmval_1);
#endif
        }                 
}[/mw_shl_code]





战舰V3&精英通过PWM调节液晶亮度测试程序.rar

2.69 MB, 下载次数: 97

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

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
发表于 2018-11-2 13:36:50 | 显示全部楼层
谢谢分享,不错

虚拟示波器为您排忧解难。
专业虚拟示波器批发零售(qq:2906905479)https://shop296209296.taobao.com/shop/view_shop.htm?tracelog=t
Loto虚拟示波器 官方qq群: 706769836 https://shop296209296.taobao.com/shop/view_shop.htm?tracelog=t
回复 支持 反对

使用道具 举报

109

主题

5562

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10541
金钱
10541
注册时间
2017-2-18
在线时间
1908 小时
 楼主| 发表于 2019-8-21 21:25:49 | 显示全部楼层
附上探索者通过PWM调节液晶屏亮度的工程

探索者F407PWM调节液晶亮度.rar

3.47 MB, 下载次数: 23

回复 支持 反对

使用道具 举报

0

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2019-8-12
在线时间
46 小时
发表于 2020-12-19 16:36:56 | 显示全部楼层
感谢分享学习
回复 支持 反对

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2021-8-24
在线时间
13 小时
发表于 2021-11-3 14:04:06 | 显示全部楼层
感谢分享学习
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 22:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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