xld0932 发表于 2022-7-3 13:25

【国民技术低功耗系列N32L43x测评】03.首次驱动段码LCD屏,需要协助

<p>N32L43X系列的MCU带有Segment LCD的驱动器,最多可配置8个公共端子(COM)和44个区段端子(SEG),最多可驱动176(4*44)或者320(8*40)个LCD段位显示,具有如下特性:</p>

<ul>
        <li>帧速率控制具有高度灵活性</li>
</ul>

<div>
<ul>
        <li>支持静态、1/2、1/3、1/4 和 1/8 工作周期(Duty)</li>
</ul>

<div>
<ul>
        <li>支持静态、1/2、1/3 和 1/4 偏压配置(Bias)</li>
</ul>

<div>
<ul>
        <li>双缓冲机制允许用户随时更新主显示数据存储器中的显示数据(像素活动/非活动信息),而不影响 LCD中实时显示的连续性和完整性</li>
</ul>

<div>
<ul>
        <li>VLCD 内部电压可通过软件从 VLCDmin 到 VLCDmax 调节,,以便调整 LCD 显示对比度</li>
</ul>

<div>
<ul>
        <li>可选的供电电源:从 VLCD 引脚外加电源,也可以将 VLCD 直接连接到 VDD;使用内嵌的 DC-DC 升压转换器,外部仅需一个 1&mu;F 电容</li>
</ul>

<div>
<ul>
        <li>内置电阻网络用来产生 LCD 驱动中间电压,可通过软件配置,以匹配适合 LCD 面板上的电容性负载</li>
</ul>
</div>

<div>
<ul>
        <li>内置电压输出缓冲器</li>
</ul>
</div>

<div>
<ul>
        <li>两种不同的对比度控制方式:当使用内部升压转换器时,VLCD 电压可以在 VLCDmin 到 VLCDmax 之间调节;帧之间可以配置多达 7 个相位周期的死区</li>
</ul>
</div>

<div>
<ul>
        <li>支持 SLEEP、LOW-POWER SLEEP 和 STOP2 模式下显示,也可以在这些模式下禁用以获得更低的功耗</li>
</ul>

<div>
<ul>
        <li>内置驱动波形相位翻转功能,可降低电磁干扰(EMI)和功耗</li>
</ul>

<div>
<ul>
        <li>帧起始中断用于更新 LCD 显示数据时进行软件同步</li>
</ul>

<div>
<ul>
        <li>闪烁功能&ndash;支持无需软件干预的闪烁:支持 1、2、3、4、8 或所有像素在指定的频率下闪烁;闪烁频率可配置为约 0.5Hz、1Hz、2Hz 或 4Hz</li>
</ul>

<div>
<ul>
        <li>用作 SEG 和 COM 功能的管脚应配置为相应的 AFIO</li>
</ul>

<div>
<ul>
        <li>HSE/32,LSI,LSE 多种 LCD 时钟源可供选择</li>
</ul>

<div>&nbsp;</div>

<div><span style="color:#e74c3c;"><strong>参考官方例程中的示例程序对LCD进行时钟配置、GPIO端口引脚配置、以及LCD参数配置,然后显示所有内容,结果LCD没有一点反应,因为是第一次使用,不知道怎么回事,请哪位大佬给讲解一下呢?</strong></span></div>

<div>&nbsp;</div>

<div><span style="color:#e74c3c;"><strong>LCD段码屏手册</strong></span></div>

<div></div>

<div><span style="color:#e74c3c;"><strong>GPIO控制端口选择</strong></span></div>

<div>使用的是PC10/PC11/PC12/PD2这4个引脚做的COM、PB0/PB1/PB10~15做的SEG</div>

<div></div>

<div><span style="color:#e74c3c;"><strong>配置程序</strong></span></div>

<div>
<pre>
<code class="language-cpp">void LCD_Configure(void)
{
    GPIO_InitType GPIO_InitStructure;
    LCD_InitTypeLCD_InitStructure;

printf("\r\n%s : %d", __FUNCTION__, __LINE__);

    LCD_ClockConfig(LCD_CLK_SRC_LSI);

printf("\r\n%s : %d", __FUNCTION__, __LINE__);

    RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB, ENABLE);
    RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOC, ENABLE);
    RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOD, ENABLE);

    /*
   * PB0: LCD_SEG5
   * PB1: LCD_SEG6
   */
    GPIO_InitStruct(&amp;GPIO_InitStructure);
    GPIO_InitStructure.Pin            = GPIO_PIN_0 | GPIO_PIN_1;
    GPIO_InitStructure.GPIO_Pull      = GPIO_No_Pull;
    GPIO_InitStructure.GPIO_Mode      = GPIO_Mode_Analog;
    GPIO_InitStructure.GPIO_Alternate = GPIO_AF10_LCD;
    GPIO_InitPeripheral(GPIOB, &amp;GPIO_InitStructure);

    /*
   * PB10 : LCD_SEG10
   * PB11 : LCD_SEG11
   * PB12 : LCD_SEG12
   * PB13 : LCD_SEG13
   * PB14 : LCD_SEG14
   * PB15 : LCD_SEG15
   */
    GPIO_InitStruct(&amp;GPIO_InitStructure);
    GPIO_InitStructure.Pin            = GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 |
                                        GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
    GPIO_InitStructure.GPIO_Pull      = GPIO_No_Pull;
    GPIO_InitStructure.GPIO_Mode      = GPIO_Mode_Analog;
    GPIO_InitStructure.GPIO_Alternate = GPIO_AF10_LCD;
    GPIO_InitPeripheral(GPIOB, &amp;GPIO_InitStructure);

    /*
   * PC10 : LCD_COM4
   * PC11 : LCD_COM5
   * PC12 : LCD_COM6
   */
    GPIO_InitStruct(&amp;GPIO_InitStructure);
    GPIO_InitStructure.Pin            = GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12;
    GPIO_InitStructure.GPIO_Pull      = GPIO_No_Pull;
    GPIO_InitStructure.GPIO_Mode      = GPIO_Mode_Analog;
    GPIO_InitStructure.GPIO_Alternate = GPIO_AF10_LCD;
    GPIO_InitPeripheral(GPIOC, &amp;GPIO_InitStructure);

    /*
   * PD2: LCD_COM7
   */
    GPIO_InitStruct(&amp;GPIO_InitStructure);
    GPIO_InitStructure.Pin            = GPIO_PIN_2;
    GPIO_InitStructure.GPIO_Pull      = GPIO_No_Pull;
    GPIO_InitStructure.GPIO_Mode      = GPIO_Mode_Analog;
    GPIO_InitStructure.GPIO_Alternate = GPIO_AF10_LCD;
    GPIO_InitPeripheral(GPIOD, &amp;GPIO_InitStructure);

printf("\r\n%s : %d", __FUNCTION__, __LINE__);

    LCD_InitStructure.Prescaler       = LCD_PRESCALER_4;
    LCD_InitStructure.Divider         = LCD_DIV_25;
    LCD_InitStructure.Duty            = LCD_DUTY_1_4;
    LCD_InitStructure.Bias            = LCD_BIAS_1_3;
    LCD_InitStructure.VoltageSource   = LCD_VOLTAGESOURCE_INTERNAL;
    LCD_InitStructure.Contrast      = LCD_CONTRASTLEVEL_3;
    LCD_InitStructure.DeadTime      = LCD_DEADTIME_0;
    LCD_InitStructure.PulseOnDuration = LCD_PULSEONDURATION_1;
    LCD_InitStructure.HighDrive       = LCD_HIGHDRIVE_DISABLE;
    LCD_InitStructure.HighDriveBuffer = LCD_HIGHDRIVEBUFFER_ENABLE;
    LCD_InitStructure.BlinkMode       = LCD_BLINKMODE_OFF;
    LCD_InitStructure.BlinkFreq       = LCD_BLINKFREQ_DIV_8;
    LCD_InitStructure.MuxSegment      = LCD_MUXSEGMENT_DISABLE;
    LCD_Init(&amp;LCD_InitStructure);

printf("\r\n%s : %d", __FUNCTION__, __LINE__);

    LCD_Write(LCD_RAM1_COM0, 0x00000000, 0xFFFFFFFF);
    LCD_Write(LCD_RAM1_COM1, 0x00000000, 0xFFFFFFFF);
    LCD_Write(LCD_RAM1_COM2, 0x00000000, 0xFFFFFFFF);
    LCD_Write(LCD_RAM1_COM3, 0x00000000, 0xFFFFFFFF);
    LCD_Write(LCD_RAM2_COM0, 0x00000000, 0x00000FFF);
    LCD_Write(LCD_RAM2_COM1, 0x00000000, 0x00000FFF);
    LCD_Write(LCD_RAM2_COM2, 0x00000000, 0x00000FFF);
    LCD_Write(LCD_RAM2_COM3, 0x00000000, 0x00000FFF);

    LCD_Write(LCD_RAM1_COM4, 0x00000000, 0xFFFFFFFF);
    LCD_Write(LCD_RAM1_COM5, 0x00000000, 0xFFFFFFFF);
    LCD_Write(LCD_RAM1_COM6, 0x00000000, 0xFFFFFFFF);
    LCD_Write(LCD_RAM1_COM7, 0x00000000, 0xFFFFFFFF);
    LCD_Write(LCD_RAM2_COM4, 0x00000000, 0x000000FF);
    LCD_Write(LCD_RAM2_COM5, 0x00000000, 0x000000FF);
    LCD_Write(LCD_RAM2_COM6, 0x00000000, 0x000000FF);
    LCD_Write(LCD_RAM2_COM7, 0x00000000, 0x000000FF);

printf("\r\n%s : %d", __FUNCTION__, __LINE__);

    LCD_UpdateDisplayRequest();

printf("\r\n%s : %d", __FUNCTION__, __LINE__);
}</code></pre>

<p>&nbsp;</p>
</div>

<div><span style="color:#e74c3c;"><strong>调试问题</strong></span></div>

<div>在调试时,已经将板子上的VDD与VLCD短接在一起了;如果使用电压,通过调节内部参考电压值,LCD没有任何反应,但在执行LCD_Init和LCD_UpdateDisplayRequest这两个函数时会占用比较长的时间;如果配置成使用外部电压时,此时整个初始化过程会比较快,担LCD依旧没有任何显示&hellip;&hellip;所以想寻网友的帮助,协助分析一下,这到底是怎么回事?</div>

<div>&nbsp;</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

Jacktang 发表于 2022-7-3 21:56

<p>LCD没有任何反应,感觉还是LCD驱动问题</p>

wangerxian 发表于 2022-7-4 13:12

<p>开发板上没有LCD断码屏,是外接的断码屏吗?可以拿逻辑分析仪抓一下时序。</p>

afanx 发表于 2022-7-4 15:09

短接VDD和VLCD就不能配置为内部参考电压,也没办法调节对比度。建议断开VLCD和VDD的连接,接1uF的电容,并根据屏幕3V电压配置CONTRAST为3.01V的值。如果还是没显示的话,建议示波器看看有没有波形出来。

xld0932 发表于 2022-7-4 15:27

afanx 发表于 2022-7-4 15:09
短接VDD和VLCD就不能配置为内部参考电压,也没办法调节对比度。建议断开VLCD和VDD的连接,接1uF的电容,并 ...

<p>好的,稍后试一下<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/handshake.gif" width="48" /></p>

milafan 发表于 2022-7-4 16:32

<p>PC10/11/12,PD2是COM4~COM7引脚,LCD应该配置成1/8duty</p>

<p>&nbsp;</p>

<p>官方提供了QQ支持群,可以回复更加快捷</p>

<p>710838632。&nbsp;</p>

<p>&nbsp;</p>

<p>不是广告贴,请管理员不要删除哈:)</p>

xld0932 发表于 2022-7-4 19:39

milafan 发表于 2022-7-4 16:32
PC10/11/12,PD2是COM4~COM7引脚,LCD应该配置成1/8duty

&nbsp;

官方提供了QQ支持群,可以回复更加快 ...

<p>是的,就是这个原因,感谢!<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan88.gif" width="59" /><img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan88.gif" width="59" /><img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan88.gif" width="59" /></p>

xld0932 发表于 2022-7-4 19:47

afanx 发表于 2022-7-4 15:09
短接VDD和VLCD就不能配置为内部参考电压,也没办法调节对比度。建议断开VLCD和VDD的连接,接1uF的电容,并 ...

<p>外部电压和内部电压的确只需要使能一个,在使用内部电压的时候,如果外部电压还供着电,会影响LCD初始化和LCD_UpdateDisplayRequest这两个函数的执行速度,这个后面有时间再研究&hellip;&hellip;屏的规格书电压是3.0V,之前程序中设置的电压为2.99V那一档位,其实是可以的,设置3.12V那个档位也是可以了,区别就是显示对比度的不同&hellip;&hellip;感谢!<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan88.gif" width="59" /><img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan88.gif" width="59" /></p>
页: [1]
查看完整版本: 【国民技术低功耗系列N32L43x测评】03.首次驱动段码LCD屏,需要协助