打印
[STM32L1]

STM32L152驱动段码LCD一直卡死在初始化部分

[复制链接]
1062|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
STM32L152驱动段码LCD一直卡死在初始化部分

使用特权

评论回复
沙发
zhanghqi| | 2022-3-5 14:51 | 只看该作者

楼主详细说说怎么回事啊,这么说太笼统了

使用特权

评论回复
板凳
chuxh| | 2022-3-5 14:52 | 只看该作者
确认过板子硬件

使用特权

评论回复
地板
heweibig|  楼主 | 2022-3-5 14:55 | 只看该作者
确认过板子硬件是没有问题的

使用特权

评论回复
5
heweibig|  楼主 | 2022-3-5 14:57 | 只看该作者
用IO口直接驱动能点亮,但是直接用芯片内部驱动就会出现卡死的问题

使用特权

评论回复
6
jiajs| | 2022-3-5 14:59 | 只看该作者

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
7
heweibig|  楼主 | 2022-3-5 15:02 | 只看该作者

void LCD_GLASS_Init(void)
{
  LCD_InitTypeDef LCD_InitStructure;

  LCD_GPIOConfig(); /*!< Configure the LCD Glass GPIO pins */

  /*!< Configure the LCD interface -------------------------------------------*/
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_LCD, ENABLE); /*!< Enable LCD APB1 Clock */

  LCD_InitStructure.LCD_Prescaler = LCD_Prescaler_8;
  LCD_InitStructure.LCD_Divider = LCD_Divider_16;
  LCD_InitStructure.LCD_Duty = LCD_Duty_1_8;
  LCD_InitStructure.LCD_Bias = LCD_Bias_1_4;
  LCD_InitStructure.LCD_VoltageSource = LCD_VoltageSource_Internal;
  LCD_Init(&LCD_InitStructure);

  //LCD_HighDriveCmd(ENABLE);
  /*!< Configure the Pulse On Duration*/
  LCD_PulseOnDurationConfig(LCD_PulseOnDuration_2);

  /*!< Configure the LCD Contrast (3.51V) */
  LCD_ContrastConfig(LCD_Contrast_Level_5);

  /*!< 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)
  {
  }   
}

使用特权

评论回复
8
heweibig|  楼主 | 2022-3-5 15:05 | 只看该作者
一直卡在最后一个while,请问该怎么解决这个问题啊?

使用特权

评论回复
9
heweibig|  楼主 | 2022-3-5 15:06 | 只看该作者

使用特权

评论回复
10
heweibig|  楼主 | 2022-3-5 15:11 | 只看该作者

使用特权

评论回复
11
shimx| | 2022-3-5 15:11 | 只看该作者
问题没解决,又来求助啦

使用特权

评论回复
12
heweibig|  楼主 | 2022-3-5 15:12 | 只看该作者
对的呀,只要能驱动起来就不是问题了哈哈哈

使用特权

评论回复
13
wyjie| | 2022-3-5 15:14 | 只看该作者
有没有哪位兄弟遇到类似的情况呀?

使用特权

评论回复
14
heweibig|  楼主 | 2022-3-5 15:16 | 只看该作者
终于点亮了我的屏,真开心哈哈哈哈。等我完善之后会分享

使用特权

评论回复
15
supernan| | 2022-3-5 15:19 | 只看该作者
请教楼主怎么解决的呀 我现在遇到了同样的问题

使用特权

评论回复
16
heweibig|  楼主 | 2022-3-5 15:23 | 只看该作者
你有没有加上RTC时钟呀?我还在整理资料

使用特权

评论回复
17
shimx| | 2022-3-5 15:25 | 只看该作者
你好楼主  我应该是加上了  ,能否帮看下我这代码是哪里的问题 ,十分感谢

void RTC_Cfig(void)
{
    /* Power enable */
    RCC->APB1ENR |= RCC_APB1ENR_PWREN;
        RCC_LSICmd(ENABLE);
        while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);
        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
        RCC_RTCCLKCmd(ENABLE);
      
}


void BSP_LCD_GLASS_Init(void)
{

        RTC_Cfig();
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_LCD, ENABLE);
        LCD_GPIOConfig();
      
        LCDHandle.LCD_Bias = LCD_Bias_1_3;
        LCDHandle.LCD_Divider = LCD_Divider_30;
        LCDHandle.LCD_Duty = LCD_Duty_1_4;
        LCDHandle.LCD_Prescaler = LCD_Prescaler_4;
        LCDHandle.LCD_VoltageSource = LCD_VoltageSource_Internal;
        LCD_Init(&LCDHandle);
      
      
//        LCD_HighDriveCmd(DISABLE);
//        LCD_MuxSegmentCmd(ENABLE);
        LCD_PulseOnDurationConfig(LCD_PulseOnDuration_7);
        LCD_DeadTimeConfig(LCD_DeadTime_2);
        LCD_BlinkConfig(LCD_BlinkMode_Off,LCD_BlinkFrequency_Div8);
        LCD_ContrastConfig(LCD_Contrast_Level_3);
      
        LCD_WaitForSynchro();
      
        LCD_Cmd(ENABLE);
      
    while(LCD_GetFlagStatus(LCD_FLAG_ENS) == RESET)
    {
    }
      
    while(LCD_GetFlagStatus(LCD_FLAG_RDY) == RESET)
    {
    }
      
}
void LCD_GPIOConfig(void)
{
                                GPIO_InitTypeDef GPIO_InitStructure;
                              
                                /*!&lt; Enable GPIOA, GPIOB, GPIOC,  AHB Clocks */
                                RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB,ENABLE);
      
      
                                /*!&lt; Connect PA.01 to LCD SEG0 */
                                GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_LCD);
                                /*!&lt; Connect PA.02 to LCD SEG1 */
                                GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_LCD);
                                /*!&lt; Connect PA.03 to LCD SEG2 */
                                GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_LCD);
                                /*!&lt; Connect PA.06 to LCD SEG3 */
                                GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_LCD);      
                                /*!&lt; Connect PA.07 to LCD SEG4 */
                                GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_LCD);
                                /*!&lt; Connect PB.00 to LCD SEG5 */
                                GPIO_PinAFConfig(GPIOB, GPIO_PinSource0, GPIO_AF_LCD);               
                                /*!&lt; Connect PA.01 to LCD SEG6 */
                                GPIO_PinAFConfig(GPIOB, GPIO_PinSource1, GPIO_AF_LCD);      
//        #ifndef SimulationEn                        
                                /*!&lt; Connect PB.03 to LCD SEG7 */
                //                GPIO_PinAFConfig(GPIOB, GPIO_PinSource3, GPIO_AF_LCD);//¹²ÓÃJTDO
//        #endif
                              
                                /*!&lt; Connect PA.08 to LCD COM0 */
                                GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_LCD);
                                /*!&lt; Connect PA.09 to LCD COM1 */
                                GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_LCD);
                                /*!&lt; Connect PA.10 to LCD COM2 */
                                GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_LCD);
                                /*!&lt; Connect PB.09 to LCD COM3 */
                                GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_LCD);
                              

                              
                                GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 ;//Õý³£ÓÃ

                                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
                                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
                                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
                                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
                                GPIO_Init(GPIOA, &GPIO_InitStructure);

        //                        #ifndef SimulationEn
                                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_9;// | GPIO_Pin_3 ;ºÍ·ÂÕæ¿Ú¸´ÓÃ
        //                        #else  
                                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
                                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
                                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
                                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;      
                                GPIO_Init(GPIOB, &GPIO_InitStructure);                              
}

使用特权

评论回复
18
heweibig|  楼主 | 2022-3-5 15:27 | 只看该作者
LCDHandle.LCD_Duty = LCD_Duty_1_4;
        LCDHandle.LCD_Prescaler = LCD_Prescaler_4;
这两行的代码是根据屏给的资料写的吗

使用特权

评论回复
19
shimx| | 2022-3-5 15:30 | 只看该作者
我刚才发现RCC那少写了个使能更改那个位,现在能显示了 但是目前只有COM0和COM1正常,

使用特权

评论回复
20
llljh| | 2022-3-5 15:33 | 只看该作者
COM2和COM3没作用发现,目前正在找原因。   1/4那个是屏幕资料 。LCD_Prescaler_4那个是我根据时钟用的MSI然后算了一下,不知道用的对不对。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

869

主题

13089

帖子

7

粉丝