历史上的今天
返回首页

历史上的今天

今天是:2025年06月04日(星期三)

正在发生

2018年06月04日 | SSD1963+STM32F4+RGB565 TFT调试

2018-06-04 来源:eefocus

由于项目需要用到5.0寸触屏,选了一款RGB565接口的电容触摸屏,决定采用STM32F407+SSD1963的驱动方案,整个过程基本顺利,但中间也遇到了一些问题,折腾了两天,在网上看到很多网友也有遇到类似问题,好像都没有解决,决定把它分享出来,以免浪费不必要的时间。

当第一次做板回来,顺利点亮屏,研究了半天SSD1963手册,终于显示了红绿蓝三原色后,心里挺开心,觉得已经搞得差不多了。接着开始根据UI设计实现界面,这时奇怪的问题出来了,字体显示边缘总是不干净,有点模糊又有一点杂色,图标显示颜色都跟设计有差异,而且细节处也显得不清楚,最后发现只要不是单色,颜色都不能正常显示。由于红绿蓝三原色正常,一直认为硬件没问题,可能是软件初始化配置问题。SSD1963的手册不是太好,不太考虑普通人的智商,有些不好理解,SSD1963没有16位的模式,用18位模式来代替,但是手册里并没有提示18位数据哪两位不用,实际测试必须是LDATA0和LDATA12不用,不要与下图的MCU数据接口混淆,这个是指不同宽度MCU数据接口写入SSD1963显存时对应的RGB关系。

图一

所以硬件连接必须如下:

   图二

部分初始化代码如下:

    UINT32  HDP = 479;      // HS_Display_Area
    UINT32  HT  = 510;      // (HS_Display_Area + HS_pulse_width + HS_Blanking + HS_Front_Porch)
    UINT32  HPS = 20;       // (HS_pulse_width + HS_Blanking)
    UINT32  HPW = 2;        // HS_pulse_width
    UINT32  LPS = 8;        // Horizontal Display Period Start Position
    UINT32  VDP = 853;      // VS_Display_Area
    UINT32  VT  = 920;      // (VS_Display_Area + VS_pulse_width + VS_Blanking + VS_Front_Porch)
    UINT32  VPS = 20;       // (VS_pulse_width + VS_Blanking)
    UINT32  VPW = 8;        // VS_pulse_width
    UINT32  FPS = 2;        // Vertical Display Period Start Positio
    SSD1963_RST_LOW;        //复位SSD1963
    delay_us(100);
    SSD1963_RST_HIGH;

    LCD_WR_REG(0xE2);       //Set PLL with CLK = 10MHz (MCU OUTPUT),
                                 //Multiplier M = 29, 250MHz < VCO < 800MHz = CLK*(M+1), VCO = 300MHz
    LCD_WR_DATA(0x1D);      //CLK = 10MHz (MCU OUTPUT),///参数1
    LCD_WR_DATA(0x02);      //参数2 Divider N = 2, PLL = 300/(N+1) = 100MHz
    LCD_WR_DATA(0x04);      //参数3 Validate M and N values

    LCD_WR_REG(0xE0);       // Start PLL command
    LCD_WR_DATA(0x01);      // enable PLL
    delay_ms(100);                    // Wait 100ms to let the PLL stable
    LCD_WR_REG(0xE0);       // Start PLL command again
    LCD_WR_DATA(0x03);      // now, use PLL output as system clock
    //delay_ms(5);
    LCD_WR_REG(0x01);       //软复位
    delay_ms(5);

    //Set LSHIFT freq, i.e. the DOTCLK with PLL freq 100MHz set previously
    //Typical DOTCLK for KD050FM-1 is 35MHz MAX(datasheet), experiment shows 30MHz gives a stable result
    //30MHz = 100MHz*(LCDC_FPR+1)/2^20
    //LCDC_FPR = 314571 (0x4CCC8)
    LCD_WR_REG(0xE6);
    LCD_WR_DATA(0x04);//0x03
    LCD_WR_DATA(0xCC);
    LCD_WR_DATA(0xC8);

    //Set LCD mode, varies from individual manufacturer
    LCD_WR_REG(0xB0);
    LCD_WR_DATA(0x10);     // set 18-bit for 5" panel 
    LCD_WR_DATA(0x00);     // set TTL mode
    LCD_WR_DATA((HDP >> 8) & 0x00FF);   // Set LCD horizontal  panel size H
    LCD_WR_DATA(HDP & 0x00FF);           // Set LCD horizontal panel size L
    LCD_WR_DATA((VDP >> 8) & 0x00FF);    // Set LCD vertical panel size H
    LCD_WR_DATA(VDP & 0x00FF);          // Set LCD vertical panel size L
    LCD_WR_DATA(0x00);                   // RGB sequence

    //Set horizontal period
    LCD_WR_REG(0xB4);
    LCD_WR_DATA((HT >> 8) & 0x00FF);    //Set HT
    LCD_WR_DATA(HT & 0x00FF);
    LCD_WR_DATA((HPS >> 8) & 0X00FF);  //Set HPS
    LCD_WR_DATA(HPS & 0x00FF);
    LCD_WR_DATA(HPW);                   //Set HPW
    LCD_WR_DATA((LPS >> 8) & 0x00FF);   //Set HPS
    LCD_WR_DATA(LPS & 0x00FF);
    LCD_WR_DATA(0x0000);

    //Set vertical period
    LCD_WR_REG(0xB6);
    LCD_WR_DATA((VT >> 8) & 0x00FF);    //Set VT
    LCD_WR_DATA(VT & 0x00FF);
    LCD_WR_DATA((VPS >> 8) & 0x00FF);   //Set VPS
    LCD_WR_DATA(VPS & 0x00FF);
    LCD_WR_DATA(VPW);                   //Set VPW
    LCD_WR_DATA((FPS >> 8) & 0x00FF);   //Set FPS
    LCD_WR_DATA(FPS & 0x00FF);

    //设置GPIO配置
    LCD_WR_REG(0xB8);
    LCD_WR_DATA(0x0F);                 //GPIO3=output, GPIO[2:0]=output//GPIO is controlled by host; 4个IO设置成输出
    LCD_WR_DATA(0x01);                 //GPIO0 使用正常的IO功能

    LCD_WR_REG(0xBA);                  //设置GPIO配置
    LCD_WR_DATA(0x000F);            //GPIO[3:0] out 1

    LCD_WR_REG(0x0036);              //rotation
    LCD_WR_DATA(0x0000);

    LCD_WR_REG(0xF0);                  //设置SSD1963同CPU接口为16bit Set pixel data interface
    LCD_WR_DATA(0x03);                 //16-bit(565 format) data


推荐阅读

史海拾趣

福斯特半导体(Foster)公司的发展小趣事

对于能判断障碍物的机器人电路,网友可能还有以下几个问题及其相应回答:

问题一:机器人通常使用哪些传感器来判断障碍物?

回答
机器人通常使用多种传感器来判断障碍物,主要包括但不限于以下几种:

  1. 超声波传感器:这是最常见的一种传感器,通过发射超声波并接收其反射回来的信号,根据信号的时间差和波速计算障碍物的距离。超声波传感器在检测大范围、非接触式的障碍物时非常有效。

  2. 红外传感器:红外传感器通过发射红外光并接收其反射光来判断障碍物的存在和距离。红外传感器在近距离和快速检测中表现优异,且成本相对较低。

  3. 激光传感器:激光传感器利用激光束进行测距,具有高精度、长距离测量的特点。但相比超声波和红外传感器,激光传感器的成本更高,适用于对精度要求极高的应用场景。

  4. 视觉传感器:一些高级的机器人还配备了视觉传感器,如摄像头,通过图像处理技术来识别并判断障碍物。这种方法可以实现更复杂的场景理解和避障策略。

问题二:如何设计能判断障碍物的机器人电路?

回答
设计能判断障碍物的机器人电路需要考虑以下几个关键步骤:

  1. 选择合适的传感器:根据机器人的应用场景、成本预算和精度要求选择合适的传感器。

  2. 设计信号处理电路:将传感器采集到的原始信号(如电压、电流等)进行放大、滤波等处理,以便于后续的数字处理或微控制器读取。

  3. 微控制器编程:根据传感器的输出信号编写微控制器的程序,实现障碍物的判断、避障策略的制定和执行。

  4. 执行机构控制:通过微控制器控制机器人的执行机构(如电机、舵机等),实现机器人的移动和避障动作。

  5. 整体调试与优化:对整个电路进行调试和优化,确保机器人能够准确、稳定地判断障碍物并执行避障动作。

问题三:如何提高机器人判断障碍物的准确性和稳定性?

回答
提高机器人判断障碍物的准确性和稳定性可以从以下几个方面入手:

  1. 选用高质量的传感器:高质量的传感器具有更高的精度和稳定性,能够减少误判和漏判的情况。

  2. 优化信号处理电路:通过合理的电路设计和元器件选择,减少信号噪声和干扰,提高信号的信噪比和可靠性。

  3. 算法优化:对微控制器的算法进行优化,采用更先进的算法或策略来提高障碍物的判断精度和避障效果。

  4. 多传感器融合:利用多种传感器进行融合处理,可以弥补单一传感器的不足,提高整个系统的鲁棒性和可靠性。

  5. 实验验证与迭代优化:通过大量的实验验证和迭代优化,不断调整和优化机器人的参数和算法,以提高其判断障碍物的准确性和稳定性。

超音(CY)公司的发展小趣事

品质是超音一直以来的追求。公司注重产品质量管理,建立了完善的质量检测体系,确保每一件产品都符合高标准的质量要求。同时,超音还加强了品牌建设,通过广告宣传、赞助活动等方式提升品牌知名度和美誉度。这些努力使得超音在消费者心中树立了良好的品牌形象,为公司的长期发展奠定了坚实的基础。

AC Interface Inc公司的发展小趣事

在电子行业中,ABC Electronics Inc. 深知单打独斗难以取得长远发展。因此,公司积极寻求与其他企业的合作机会,通过技术共享、联合研发、市场互补等方式实现共赢。例如,公司与一家知名芯片制造商合作,共同开发了一款具有高性能的嵌入式系统解决方案,成功应用于智能家居、工业自动化等领域。这种合作模式不仅加速了产品的研发进程,也提高了公司的市场竞争力。

ELANTEC (Renesas )公司的发展小趣事

近年来,随着全球半导体市场的不断变化和技术的快速发展,Renesas也面临着一些挑战。为了应对这些挑战并保持竞争力,Renesas开始进行战略转型和结构调整。公司加强了与客户的合作和沟通,深入了解市场需求和趋势;同时,Renesas还加大了对新技术和新产品的研发投入,不断提升自身的技术实力和创新能力。此外,Renesas还注重人才培养和引进,打造了一支高素质、专业化的团队。这些措施的实施使Renesas在应对挑战和转型过程中取得了积极的成效。

CyOptics Inc公司的发展小趣事

随着Avago的进一步发展和演变,CyOptics作为其子品牌也迎来了新的发展机遇。如今,Avago已经演变为Broadcom公司,而CyOptics则继续以其在光学领域的专业技术和丰富经验为Broadcom的产品线增添光彩。展望未来,CyOptics将继续秉承其技术领先和创新驱动的理念,为全球客户提供更加优质的光学产品和服务。

Eurofarad公司的发展小趣事

Eurofarad始终将技术创新作为公司发展的核心动力。随着科技的不断进步,Eurofarad不断投入研发资源,推动电子元件技术的创新。公司成功研发出了一系列具有创新性的产品,如陶瓷电容器、塑料薄膜电容器、云母电容器等。这些产品不仅具有更高的性能和更长的使用寿命,而且更符合市场的需求,为Eurofarad赢得了更多的市场份额。

问答坊 | AI 解惑

华为通信电源技术基础

课程 LA000004通信电源技术基础ISSUE1.0目  录课程说明        1课程介绍        1培训目标        1参考资料        1第1章 通信电源系统概述  ...…

查看全部问答>

Wince directshow如何进行系统枚举。

Wince directshow如何进行系统枚举。 wince下的directshow不支持系统枚举,没有ICreateDevEnum接口, 无法进行系统枚举。 应该如何获得 音频采集设备 或者是 视频采集设备呢?…

查看全部问答>

关于STK的疑问

这段时间要做STK相关的应用,之前没有什么经验,啃完了GSM11.14,还是有些疑问请教论坛的高手! Proactive SIM会在一次APDU交互过程中以91**代替9000表示一次APDU交互的成功,同时也是告知ME,自己有命令要传送。ME收到91**的状态字符之后,就会在 ...…

查看全部问答>

请要去中嵌学院学习嵌入式的朋友们注意了,你们千万不要受骗了,那个老板叶贵明是骗子啊!

我就是中嵌远程教学的学员,中嵌真的是骗人的,一开始什么都说好,老师态度也好,可是到后面这个远程学习平台根本就用不了,于是我就申请退学费,他们那个什么叶总(叶贵明)说得好听得很,说说什么这件事情完全是他们的问题,学费一定退,只是现在 ...…

查看全部问答>

白光LED焊接技术

replyreload += \',\' + 698653;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

求救请问在继电器触点保护用哪种电容,比较好,是高压电容,还是普通电容呀?

下图是我的继电器触点电路,里面用的是RC电路,不知道这样行不行,我的触点为12V/3A,请大家把我看看,如果用RC电路,不知道用哪种电容和电阻比较好?请指导我一下,谢谢了。   …

查看全部问答>

怪现象?串口发送丢数

使用STM32F103VC控制器,使用串口2,9600波特率,使用2.03库,程序很简单,用串口把一个数组顺序发出去, //和上位机通信 void uart2_send_byte(u8 ch) {   USART_SendData(USART2, ch);   /* Loop until the end of ...…

查看全部问答>

高速线阵CCD式数字工业摄像机设计

以前的一个实际产品设计设计说明文件: 高速CCD数字接口摄像机设计.ppt (2.79 MB, 下载次数: 179) 产品说明手册: 摄像机产品.doc (664 KB, 下载次数: 67) 设计文档抓图:     正式的产品照片如下:   & ...…

查看全部问答>

请问脉冲整形电路

想把一个正弦波(频率几十KHz,峰峰值-1.5V——+1.5V)通过脉冲整形电路处理成方波给FPGA处理,看了几款施密特芯片(74LS132……),输入要求都是0V——5V左右请问这种情况该如何处理? …

查看全部问答>