
很多朋友在驱动STM32l段式液晶的时候,代码如下: void LCD_GLASS_Init(void) { LCD_InitTypeDef LCD_InitStruct; RCC_APB1PeriphClockCmd(RCC_APB1Periph_LCD, ENABLE); LCD_InitStruct.LCD_Prescaler = LCD_Prescaler_2; LCD_InitStruct.LCD_Divider = LCD_Divider_16; LCD_InitStruct.LCD_Duty = LCD_Duty_1_8; LCD_InitStruct.LCD_Bias = LCD_Bias_1_4 ; LCD_InitStruct.LCD_VoltageSource = LCD_VoltageSource_Internal; /* Initialize the LCD */ LCD_Init(&LCD_InitStruct); LCD_MuxSegmentCmd(ENABLE); /* To set contrast to mean value */ LCD_ContrastConfig(LCD_Contrast_Level_6); LCD_DeadTimeConfig(LCD_DeadTime_0); LCD_PulseOnDurationConfig(LCD_PulseOnDuration_4); /* Wait Until the LCD FCR register is synchronized */ LCD_WaitForSynchro(); /* Enable LCD peripheral */ LCD_Cmd(ENABLE); /* Wait Until the LCD is enabled */ while(LCD_GetFlagStatus(LCD_FLAG_ENS) == RESET) { } /*!< Wait Until the LCD Booster is ready */ while(LCD_GetFlagStatus(LCD_FLAG_RDY) == RESET) { } LCD_BlinkConfig(LCD_BlinkMode_Off,LCD_BlinkFrequency_Div1024); LCD_GLASS_Clear(); } 详细的解释我就不说了,大家常遇到的问题是程序执行到这句的时候“ while(LCD_GetFlagStatus(LCD_FLAG_ENS) == RESET) ”无法过去,而死在这。我在做这个项目的时候,也有很多同事遇到了这种情况,所以在这里分享一下问题的原因。 首先说一下,这样配置段式液晶没有问题,但是,要知道段式液晶的时钟是来源于何处。STM32L上datasheet有说明,LCD段式液晶的时钟来源于RTC,也就是说,想使用段式液晶,必须先配置好RTC时钟。希望可以帮到遇到这个问题的朋友们。 |
代码 看起来有点晕 |