程序在附件LCDConf_stm32469i_discovery.txt
就是屏幕不能自动刷新,需要手动执行HAL_DSI_Refresh(&hdsi_disco);显示数据才可以通过DSI发到屏幕:
例如:
void Display_main(void)
{
xtmp+=10;
if(xtmp>220)
xtmp=100;
GUI_Clear();
GUI_SetColor(0xFF0000FF);
GUI_FillRect(0, 0, xtmp, xtmp); //执行这个DSI不会发数据到屏幕
需要发送:
HAL_DSI_ShortWrite(&hdsi_disco, 0, DSI_DCS_SHORT_PKT_WRITE_P1, 0x35, 0x00); //发送TEON,才会有TE事件中断,刷新数据
}
DSI设置:
CmdCfg.VirtualChannelID = 0;
CmdCfg.HSPolarity = DSI_HSYNC_ACTIVE_LOW;
CmdCfg.VSPolarity = DSI_VSYNC_ACTIVE_LOW;
CmdCfg.DEPolarity = DSI_DATA_ENABLE_ACTIVE_HIGH;
CmdCfg.ColorCoding = DSI_RGB888;
CmdCfg.CommandSize = HACT;
CmdCfg.TearingEffectSource = DSI_TE_DSILINK;
CmdCfg.TearingEffectPolarity = DSI_TE_RISING_EDGE;
CmdCfg.VSyncPol = DSI_VSYNC_FALLING;
CmdCfg.AutomaticRefresh = DSI_AR_DISABLE;
CmdCfg.TEAcknowledgeRequest = DSI_TE_ACKNOWLEDGE_ENABLE;
HAL_DSI_ConfigAdaptedCommandMode(&hdsi_disco, &CmdCfg);
void LCD_ReqTear(void)
scanline =320
static uint8_t ScanLineParams[2];
ScanLineParams[0] = scanline >> 8;
ScanLineParams[1] = scanline & 0x00FF;
HAL_DSI_LongWrite(&hdsi_disco, 0, DSI_DCS_LONG_PKT_WRITE, 2, 0x44, ScanLineParams);
/* set_tear_on */
HAL_DSI_ShortWrite(&hdsi_disco, 0, DSI_DCS_SHORT_PKT_WRITE_P1, 0x35, 0x00); //屏幕打开了TEON
}
我现在用的屏没有TE_pin引脚,TE信号要通过DSI_link