/************************************************************************************************/ /** * @file ciu32l051_std_lcd.c * @author MCU Ecosystem Development Team * @brief LCD STD库驱动。 * 实现LCD初始化等API。 * * ************************************************************************************************** * @attention * Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved. * ************************************************************************************************** */ /************************************************************************************************/ /** * @addtogroup CIU32L051_STD_Driver * @{ */ /** * @addtogroup LCD * @{ * */ /************************************************************************************************/ /*------------------------------------------includes--------------------------------------------*/ #include "ciu32l051_std.h" #ifdef STD_LCD_PERIPHERAL_USED /*------------------------------------------functions------------------------------------------*/ /************************************************************************************************/ /** * @addtogroup LCD_External_Functions * @{ * */ /************************************************************************************************/ /** * @brief LCD初始化 * @param lcd_init_param LCD 初始化结构体 * @retval 无 */ void std_lcd_init(std_lcd_init_t *lcd_init_param) { /* 禁止LCD */ std_lcd_disable(); /* 判断LCD为禁止状态 */ while(std_lcd_get_flag(LCD_FLAG_ENS)) { } /* 配置LCD区段多路复用 配置LCD占空比 配置LCD偏置 配置LCD驱动模式 */ MODIFY_REG(LCD->CR, (LCD_CR_MUX_SEG | LCD_CR_DUTY | LCD_CR_BIAS | LCD_CR_MDSET), (lcd_init_param->mux_segment | lcd_init_param->duty | lcd_init_param->bias | lcd_init_param->driver_mode)); /* LCD显示帧速率:PS和DIV 配置LCD驱动能力 配置LCD脉冲持续时间 配置VLCD输出电压档位 */ MODIFY_REG(LCD->FCR, (LCD_FCR_PS | LCD_FCR_DIV | LCD_FCR_HD | LCD_FCR_PON | LCD_FCR_CC), (lcd_init_param->prescaler | lcd_init_param->divider | lcd_init_param->high_drive | lcd_init_param->pulse_on_duration | lcd_init_param->vlcd_voltage)); /* LCD外设使能 */ std_lcd_enable(); } /** * @brief LCD去初始化 * @retval 无 */ void std_lcd_deinit(void) { /* LCD外设禁止 */ std_lcd_disable(); /* 判断LCD外设禁止状态*/ while(std_lcd_get_flag(LCD_FLAG_ENS)) { } /* 复位LCD */ std_rcc_apb1_reset(RCC_PERIPH_RESET_LCD); /* 禁止LCD外设时钟 */ std_rcc_apb1_clk_disable(RCC_PERIPH_CLK_LCD); } /** * @brief LCD 结构体初始化 * @param lcd_init_struct LCD 初始化结构体 * @retval 无 */ void std_lcd_struct_init(std_lcd_init_t *lcd_init_struct) { lcd_init_struct->duty = LCD_DUTY_1_6; lcd_init_struct->bias = LCD_BIAS_1_3; lcd_init_struct->prescaler = LCD_PRESCALER_4; lcd_init_struct->divider = LCD_FCR_DIV21; lcd_init_struct->driver_mode = LCD_DRIVER_MODE_CHARGE_PUMP; lcd_init_struct->vlcd_voltage = LCD_CHAGE_PUMP_1_3_BIAS_2_55V; lcd_init_struct->high_drive = LCD_LOW_DRIVE; lcd_init_struct->pulse_on_duration = LCD_PULSE_ON_DURATION_0; lcd_init_struct->mux_segment = LCD_MUX_SEGMENT_DISABLE; } /** * @} */ #endif /* STD_LCD_PERIPHERAL_USED */ /** * @} */ /** * @} */