|
很多朋友在驱动STM32l段式液晶的时候,代码如下: void LCD_GLASS_Init(void) { LCD_InitTypeDef LCD_InitStruct;, l& V1 x" D& o; L: L& A RCC_APB1PeriphClockCmd(RCC_APB1Periph_LCD, ENABLE); ! k, T7 F! E: i7 h {5 y9 T% c: f LCD_InitStruct.LCD_Prescaler = LCD_Prescaler_2; LCD_InitStruct.LCD_Divider = LCD_Divider_16; E* Z4 I1 ?- _# M: ~ LCD_InitStruct.LCD_Duty = LCD_Duty_1_8;7 m; x. R* ]3 J; \" r LCD_InitStruct.LCD_Bias = LCD_Bias_1_4 ; LCD_InitStruct.LCD_VoltageSource = LCD_VoltageSource_Internal;% R+ @& `5 b+ H8 T" D . v. ]' T% l n. N: [8 o- q4 u- q /* Initialize the LCD */ LCD_Init(&LCD_InitStruct); LCD_MuxSegmentCmd(ENABLE); /* To set contrast to mean value */ LCD_ContrastConfig(LCD_Contrast_Level_6);8 B; V5 E3 m4 D. s2 B 8 _ j0 M, R5 \* q9 ^) P, ` LCD_DeadTimeConfig(LCD_DeadTime_0);8 @; }: r! r- d! f/ Z A LCD_PulseOnDurationConfig(LCD_PulseOnDuration_4); /* Wait Until the LCD FCR register is synchronized */ LCD_WaitForSynchro();- j2 b- G! F( s8 v+ m /* Enable LCD peripheral */, a4 m* `& z) R& h4 f& N7 X LCD_Cmd(ENABLE);' P, H) ]& [/ ^! {5 Q /* Wait Until the LCD is enabled */9 x0 ^6 o7 x+ X while(LCD_GetFlagStatus(LCD_FLAG_ENS) == RESET)$ t9 b9 \+ D( Z. n# L( V% @ { } /*!< Wait Until the LCD Booster is ready */ 7 C }2 i( w7 D% f: k9 s while(LCD_GetFlagStatus(LCD_FLAG_RDY) == RESET) { } 4 p6 S* `' F+ E9 P* R k% K# d1 N7 ^ LCD_BlinkConfig(LCD_BlinkMode_Off,LCD_BlinkFrequency_Div1024); LCD_GLASS_Clear(); } 3 l& k& J, B7 p3 i, I0 G9 t 详细的解释我就不说了,大家常遇到的问题是程序执行到这句的时候“ while(LCD_GetFlagStatus(LCD_FLAG_ENS) == RESET) ”无法过去,而死在这。我在做这个项目的时候,也有很多同事遇到了这种情况,所以在这里分享一下问题的原因。 首先说一下,这样配置段式液晶没有问题,但是,要知道段式液晶的时钟是来源于何处。STM32L上datasheet有说明,LCD段式液晶的时钟来源于RTC,也就是说,想使用段式液晶,必须先配置好RTC时钟。希望可以帮到遇到这个问题的朋友们。. L" ]1 \* _5 A) I5 }7 | |
| 代码 看起来有点晕 |
微信公众号
手机版