Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Stm32 将STemWin配置为正确,以便将FlexColor驱动程序与ST7735显示驱动程序一起使用_Stm32_Stm32f4 - Fatal编程技术网

Stm32 将STemWin配置为正确,以便将FlexColor驱动程序与ST7735显示驱动程序一起使用

Stm32 将STemWin配置为正确,以便将FlexColor驱动程序与ST7735显示驱动程序一起使用,stm32,stm32f4,Stm32,Stm32f4,我试图让STM32F446ZE和STemWin库在Keil项目中运行。 使用的操作系统是Segger的embOS。 我试图按照ST的指示在显示器上显示“hello world”。 我使用FlexColor驱动程序应支持的显示驱动程序ST7735S。 我的问题是显示器不是显示“hello world”,而是保持白色。 我将GUIConf.h配置为: #define GUI_NUMBYTES  0x8000 在GUI_x中,我在GUI_x_init()中添加了以下内容: 在UC_ST7735_in

我试图让STM32F446ZE和STemWin库在Keil项目中运行。 使用的操作系统是Segger的embOS。 我试图按照ST的指示在显示器上显示“hello world”。 我使用FlexColor驱动程序应支持的显示驱动程序ST7735S。 我的问题是显示器不是显示“hello world”,而是保持白色。 我将GUIConf.h配置为:

#define GUI_NUMBYTES  0x8000
在GUI_x中,我在GUI_x_init()中添加了以下内容:

在UC_ST7735_init()中,SPI端口被初始化。此部件应能正常工作,因为它已用于同一传感器类型中。唯一的区别是,我删除了我们以前使用的graphcis库。添加线激活显示屏及其背光

在LCDConf_FlexColor_Template.c中,我将分辨率设置为:

#define XSIZE_PHYS  100 // To be adapted to x-screen size
#define YSIZE_PHYS  40 // To be adapted to y-screen size
以下三种方法我都是这样填写的: 应该注意的是,UC_ST7735_writeSPI4Wire以前也使用过,应该可以工作。它一次发送一个字节,而不是16位。 我试图以不同的顺序发送高字节和低字节

static void LcdWriteReg(U16 Data) {
    uint8_t data[2];
    UC_ST7735_dcFLAG_t dcFlag = UC_ST7735_COMMAND;
    data[0] = (uint8_t)UTIL_HLP_LOW_BYTE_OF_INT16(Data);
    data[1] = (uint8_t)UTIL_HLP_HIGH_BYTE_OF_INT16(Data);
    UC_ST7735_writeSPI4Wire(&data[1], 1, dcFlag);
    UC_ST7735_writeSPI4Wire(&data[0], 1, dcFlag);
}
static void LcdWriteData(U16 Data) {
    UC_ST7735_dcFLAG_t dcFlag = UC_ST7735_DATA;
    uint8_t data[2];
    data[0] = (uint8_t)UTIL_HLP_LOW_BYTE_OF_INT16(Data);
    data[1] = (uint8_t)UTIL_HLP_HIGH_BYTE_OF_INT16(Data);
    UC_ST7735_writeSPI4Wire(&data[1], 1, dcFlag);
    UC_ST7735_writeSPI4Wire(&data[0], 1, dcFlag);
}
static void LcdWriteDataMultiple(U16 * pData, int NumItems) {
    UC_ST7735_dcFLAG_t dcFlag = UC_ST7735_DATA;
    uint8_t data[2];
    int start_size = NumItems;
  
    while (NumItems--) {
        data[0] = (uint8_t)UTIL_HLP_LOW_BYTE_OF_INT16(pData[start_size-NumItems]);
        data[1] = (uint8_t)UTIL_HLP_HIGH_BYTE_OF_INT16(pData[start_size-NumItems]);
        UC_ST7735_writeSPI4Wire(&data[1], 1, dcFlag);
        UC_ST7735_writeSPI4Wire(&data[0], 1, dcFlag);
  }
}  
我没有更改LCD_X_Config()

我运行的代码是:

没有编译错误,看门狗也不会引起问题 问题是显示屏保持白色 我注意到flexchain驱动程序通过spi发送的命令编号与St7735数据表中的例外编号不匹配。 我调试了SPI方法。已发送以下命令和数据

  • 以0x00作为高位字节的命令
  • 以0x03作为低位字节的命令。据我所知,TT7735没有3号命令
  • 高字节为0x00的数据
  • 以0x00作为低位字节的数据
  • 以0x00作为高位字节的命令
  • 以0x50('P')作为低位字节的命令
  • 高字节为0x00的数据
  • 以0x00作为低位字节的数据
  • 以0x00作为高位字节的命令
  • 以0x51('Q')作为低位字节的命令
  • 高字节为0x00的数据
  • 以0x63作为低字节的数据
  • 以0x00作为高位字节的命令
  • 以0x52作为低位字节的命令
  • 高字节为0x00的数据
  • 以0x00作为低字节的数据
  • 一段时间后,使用更多交替命令和数据,只有0x00的数据
我忘记配置什么了吗


更新: ​更改GUIDRV_FLEXCOLOR_F66708​ 为了获得ST7735显示驱动程序的正确命令号,帮助GUIDRV_FLEXCOLOR_F667089

更改GUIDRV_FLEXCOLOR_M16C0B16​ 至GUIDRV_FLEXCOLOR_M16C1B8​ 不。我的设备在任何SPI通信发生之前重新启动

我对程序进行了调试,以确定错误发生的时间

我在没有崩溃的情况下运行了以下方法,但在最后一个方法之后,我在Keil的disassmbly窗口中没有看到其他方法的名称

emwin\u LCD\u init

液晶显示器颜色指数

LCD\u设置\u ClipRectMax

GUI\u Alloc\u getFixedBlock

GUI\u设备\u GetpDriver

GUIDRV_Flexcolor_InitOnce

GUI\u Alloc\u getFixedBlock

液晶显示器驱动程序

到了LCD\u X\u显示器驱动程序的末尾​ 但决不向LcdWriteReg发送​, LcdWriteData​, LcdWriteDataMultiple​ 或LCR数据多个​.

有什么问题吗

static void LcdWriteReg(U16 Data) {
    uint8_t data[2];
    UC_ST7735_dcFLAG_t dcFlag = UC_ST7735_COMMAND;
    data[0] = (uint8_t)UTIL_HLP_LOW_BYTE_OF_INT16(Data);
    data[1] = (uint8_t)UTIL_HLP_HIGH_BYTE_OF_INT16(Data);
    UC_ST7735_writeSPI4Wire(&data[1], 1, dcFlag);
    UC_ST7735_writeSPI4Wire(&data[0], 1, dcFlag);
}
static void LcdWriteData(U16 Data) {
    UC_ST7735_dcFLAG_t dcFlag = UC_ST7735_DATA;
    uint8_t data[2];
    data[0] = (uint8_t)UTIL_HLP_LOW_BYTE_OF_INT16(Data);
    data[1] = (uint8_t)UTIL_HLP_HIGH_BYTE_OF_INT16(Data);
    UC_ST7735_writeSPI4Wire(&data[1], 1, dcFlag);
    UC_ST7735_writeSPI4Wire(&data[0], 1, dcFlag);
}
static void LcdWriteDataMultiple(U16 * pData, int NumItems) {
    UC_ST7735_dcFLAG_t dcFlag = UC_ST7735_DATA;
    uint8_t data[2];
    int start_size = NumItems;
  
    while (NumItems--) {
        data[0] = (uint8_t)UTIL_HLP_LOW_BYTE_OF_INT16(pData[start_size-NumItems]);
        data[1] = (uint8_t)UTIL_HLP_HIGH_BYTE_OF_INT16(pData[start_size-NumItems]);
        UC_ST7735_writeSPI4Wire(&data[1], 1, dcFlag);
        UC_ST7735_writeSPI4Wire(&data[0], 1, dcFlag);
  }
}  
void LCD_X_Config(void) {


  GUI_DEVICE * pDevice;
  CONFIG_FLEXCOLOR Config = {0};
  GUI_PORT_API PortAPI = {0};
  //
  // Set display driver and color conversion
  //
  pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_565, 0, 0);
  //
  // Display driver configuration, required for Lin-driver
  //
  LCD_SetSizeEx (0, XSIZE_PHYS , YSIZE_PHYS);
  LCD_SetVSizeEx(0, VXSIZE_PHYS, VYSIZE_PHYS);
  //
  // Orientation
  //
  Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y;
  GUIDRV_FlexColor_Config(pDevice, &Config);
  //
  // Set controller and operation mode
  //
  PortAPI.pfWrite16_A0  = LcdWriteReg;
  PortAPI.pfWrite16_A1  = LcdWriteData;
  PortAPI.pfWriteM16_A1 = LcdWriteDataMultiple;
  PortAPI.pfReadM16_A1  = LcdReadDataMultiple;
  GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66708, GUIDRV_FLEXCOLOR_M16C0B16);
}
 GUI_Init();       
    int xPos, yPos;
    //__HAL_RCC_CRC_CLK_ENABLE();    
        
    xPos = LCD_GetXSize() / 2;
    yPos = LCD_GetYSize() / 3;
    GUI_SetFont(GUI_FONT_COMIC24B_ASCII);
    GUI_DispStringHCenterAt("Hello world!", xPos, yPos);

    // Endless loop:
    while(true)
    {
        OS_TASK_Delay(100);
        MW_TWD_arm(); // Arm the watchdog
    }