99 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /***
 | ||
| 	***************************************************************************
 | ||
| 	*	@file  	lcd_pwm.c
 | ||
| 	*	@brief   定时器初始化,配置pwm,作为LCD的背光调节,若PWM背光引脚改变,除了需要修改相关的宏外,
 | ||
| 	*				还需要把下面三个函数改成相应通道的函数 :
 | ||
| 	*				TIM_OC2Init();  
 | ||
| 	*				TIM_OC2PreloadConfig();  
 | ||
| 	*				TIM_SetCompare2(); 
 | ||
|    ******************************************************************************
 | ||
|    *  
 | ||
| 	* 
 | ||
| 	* 
 | ||
| 	* 
 | ||
| 	***************************************************************************
 | ||
| ***/
 | ||
| #include "lcd_pwm.h"
 | ||
| 
 | ||
| static u16 LCD_PwmPeriod = 500;  //定时器重载值
 | ||
| static u32 LCD_PwmPrescaler = 90 - 1;  //定时器分频值
 | ||
| static u8 g_pulse=100;
 | ||
| 
 | ||
| // 函数:TIM4 PWM CH2 IO口初始化
 | ||
| //
 | ||
| void  LCD_PWM_GPIO(void)
 | ||
| {
 | ||
| 	GPIO_InitTypeDef GPIO_InitStructure;
 | ||
| 	//IO口时钟配置
 | ||
| 	RCC_AHB1PeriphClockCmd (LCD_PWM_CLK, ENABLE); 
 | ||
| 
 | ||
| 	//IO引脚复用
 | ||
| 	GPIO_PinAFConfig(LCD_PWM_PORT,LCD_PWM_PinSource,LCD_PWM_AF);
 | ||
| 	
 | ||
| 	//IO配置
 | ||
| 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;   
 | ||
| 	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  //推挽
 | ||
| 	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;	//上拉
 | ||
| 	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度
 | ||
| 
 | ||
| 	//初始化 TIM4_CH2 引脚
 | ||
| 	GPIO_InitStructure.GPIO_Pin = LCD_PWM_PIN;	 
 | ||
| 	GPIO_Init(LCD_PWM_PORT, &GPIO_InitStructure);	
 | ||
| 													   
 | ||
| }
 | ||
| 
 | ||
| // 函数:LCD PWM 占空比设置
 | ||
| // 参数:pulse - 占空比,范围 0-100
 | ||
| //			
 | ||
| void  LCD_PwmSetPulse (u8 pulse)
 | ||
| {
 | ||
| 	u16 compareValue ; 
 | ||
| 	g_pulse=pulse;
 | ||
| 	compareValue = pulse * LCD_PwmPeriod / 100; //根据占空比设置比较值
 | ||
| 	TIM_SetCompare2(LCD_TIM,compareValue); 
 | ||
| }
 | ||
| 
 | ||
| //获取屏幕亮度
 | ||
| u8 LCD_PwmGetPulse (void)
 | ||
| {
 | ||
| 	return g_pulse;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| // 函数:LCD PWM 初始化
 | ||
| //	参数:	pulse - LCD背光占空比
 | ||
| // 说明:LCD背光的PWM频率固定为10KHz
 | ||
| //
 | ||
| void	LCD_PWMinit(u8 pulse)
 | ||
| {
 | ||
| 
 | ||
| 	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
 | ||
| 	TIM_OCInitTypeDef  TIM_OCInitStructure;
 | ||
| 	g_pulse=pulse;
 | ||
| 	LCD_PWM_GPIO (); //初始化IO口
 | ||
| 	RCC_APB1PeriphClockCmd(LCD_TIM_CLK,ENABLE);  ///使能时钟
 | ||
| 	
 | ||
| 	//定时器基本设置
 | ||
| 	TIM_TimeBaseInitStructure.TIM_Period = LCD_PwmPeriod; 	//重载值
 | ||
| 	TIM_TimeBaseInitStructure.TIM_Prescaler= LCD_PwmPrescaler;  //分频系数
 | ||
| 	TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数
 | ||
| 	TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; 
 | ||
| 
 | ||
| 	TIM_TimeBaseInit(LCD_TIM,&TIM_TimeBaseInitStructure);//初始化
 | ||
| 
 | ||
| 	//PWM输出配置
 | ||
| 	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //PWM模式1
 | ||
|  	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //使能比较输出
 | ||
| 	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; // 小于跳变值输出高电平
 | ||
| 	
 | ||
| 	TIM_OC2Init(LCD_TIM, &TIM_OCInitStructure);  //初始化定时器比较输出通道 2
 | ||
| 	TIM_OC2PreloadConfig(LCD_TIM, TIM_OCPreload_Enable);  //自动重载比较输出通道 2 的值
 | ||
| 	
 | ||
| 	TIM_ARRPreloadConfig(LCD_TIM,ENABLE);//使能自动重载
 | ||
|   
 | ||
| 	TIM_Cmd(TIM4,ENABLE); //使能定时器	
 | ||
| 	
 | ||
| 	LCD_PwmSetPulse (pulse); //设置占空比
 | ||
| }
 | ||
| 
 |