2900|7

206

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

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

 

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

  • 帧速率控制具有高度灵活性
  • 支持静态、1/2、1/3、1/4 和 1/8 工作周期(Duty)
  • 支持静态、1/2、1/3 和 1/4 偏压配置(Bias)
  • 双缓冲机制允许用户随时更新主显示数据存储器中的显示数据(像素活动/非活动信息),而不影响 LCD中实时显示的连续性和完整性
  • VLCD 内部电压可通过软件从 VLCDmin 到 VLCDmax 调节,,以便调整 LCD 显示对比度
  • 可选的供电电源:从 VLCD 引脚外加电源,也可以将 VLCD 直接连接到 VDD;使用内嵌的 DC-DC 升压转换器,外部仅需一个 1μF 电容
  • 内置电阻网络用来产生 LCD 驱动中间电压,可通过软件配置,以匹配适合 LCD 面板上的电容性负载
  • 内置电压输出缓冲器
  • 两种不同的对比度控制方式:当使用内部升压转换器时,VLCD 电压可以在 VLCDmin 到 VLCDmax 之间调节;帧之间可以配置多达 7 个相位周期的死区
  • 支持 SLEEP、LOW-POWER SLEEP 和 STOP2 模式下显示,也可以在这些模式下禁用以获得更低的功耗
  • 内置驱动波形相位翻转功能,可降低电磁干扰(EMI)和功耗
  • 帧起始中断用于更新 LCD 显示数据时进行软件同步
  • 闪烁功能–支持无需软件干预的闪烁:支持 1、2、3、4、8 或所有像素在指定的频率下闪烁;闪烁频率可配置为约 0.5Hz、1Hz、2Hz 或 4Hz
  • 用作 SEG 和 COM 功能的管脚应配置为相应的 AFIO
  • HSE/32,LSI,LSE 多种 LCD 时钟源可供选择
 
参考官方例程中的示例程序对LCD进行时钟配置、GPIO端口引脚配置、以及LCD参数配置,然后显示所有内容,结果LCD没有一点反应,因为是第一次使用,不知道怎么回事,请哪位大佬给讲解一下呢?
 
LCD段码屏手册
GPIO控制端口选择
使用的是PC10/PC11/PC12/PD2这4个引脚做的COM、PB0/PB1/PB10~15做的SEG
配置程序
void LCD_Configure(void)
{
    GPIO_InitType GPIO_InitStructure;
    LCD_InitType  LCD_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(&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, &GPIO_InitStructure);

    /*
     * PB10 : LCD_SEG10
     * PB11 : LCD_SEG11
     * PB12 : LCD_SEG12
     * PB13 : LCD_SEG13
     * PB14 : LCD_SEG14
     * PB15 : LCD_SEG15
     */
    GPIO_InitStruct(&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, &GPIO_InitStructure);

    /*
     * PC10 : LCD_COM4
     * PC11 : LCD_COM5
     * PC12 : LCD_COM6
     */
    GPIO_InitStruct(&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, &GPIO_InitStructure);

    /*
     * PD2  : LCD_COM7
     */
    GPIO_InitStruct(&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, &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(&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__);
}

 

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

最新回复

PC10/11/12,PD2是COM4~COM7引脚,LCD应该配置成1/8duty   官方提供了QQ支持群,可以回复更加快捷 710838632。    不是广告贴,请管理员不要删除哈:)   详情 回复 发表于 2022-7-4 16:32
点赞 关注
个人签名We are a team and we work as a team !
 
 

回复
举报

6802

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

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

 
 
 

回复

7158

帖子

2

TA的资源

版主

板凳
 

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

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

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

点评

外部电压和内部电压的确只需要使能一个,在使用内部电压的时候,如果外部电压还供着电,会影响LCD初始化和LCD_UpdateDisplayRequest这两个函数的执行速度,这个后面有时间再研究……屏的规格书电压是3.0  详情 回复 发表于 2022-7-4 19:47
好的,稍后试一下  详情 回复 发表于 2022-7-4 15:27
 
 
 

回复

206

帖子

0

TA的资源

纯净的硅(初级)

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

好的,稍后试一下

个人签名We are a team and we work as a team !
 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(中级)

6
 

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

 

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

710838632。 

 

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

点评

是的,就是这个原因,感谢!  详情 回复 发表于 2022-7-4 19:39
 
 
 

回复

206

帖子

0

TA的资源

纯净的硅(初级)

7
 
milafan 发表于 2022-7-4 16:32 PC10/11/12,PD2是COM4~COM7引脚,LCD应该配置成1/8duty   官方提供了QQ支持群,可以回复更加快 ...

是的,就是这个原因,感谢!

个人签名We are a team and we work as a team !
 
 
 

回复

206

帖子

0

TA的资源

纯净的硅(初级)

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

外部电压和内部电压的确只需要使能一个,在使用内部电压的时候,如果外部电压还供着电,会影响LCD初始化和LCD_UpdateDisplayRequest这两个函数的执行速度,这个后面有时间再研究……屏的规格书电压是3.0V,之前程序中设置的电压为2.99V那一档位,其实是可以的,设置3.12V那个档位也是可以了,区别就是显示对比度的不同……感谢!

个人签名We are a team and we work as a team !
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表