2015-04-10 07:52 AM
I'm using STM32F407ZGT6 with SSD1963 LCD controller and 800x480 TFT panel. I'm not using OS. It's working with STemWin.
But when I used any interrupt, code execution stops at somewhere in emWin. I moved WM_Exec() (GUI refresh function) to a timer interrupt routine and I disabled the interrupt before and enabled the interrupt after emWin functions. The code is working in this form. //Main loop while(1) { _Disable_Timer_Interrupt GUI_EndDialog(hWin, 0); //Delete GUI DIALOG _Enable_Timer_Interrupt HAL_Delay(500); _Disable_Timer_Interrupt hWin = CreateFramewin(); //Draw GUI DIALOG _Enable_Timer_Interrupt HAL_Delay(500); } //Timer Interrupt Routine void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim->Instance == TIM13) { HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_8); WM_Exec(); } } I added EXTI and the code didn't work again. enable-disable interrupt before-after didn't work in this time. I added FREETOS and problem didn't change. When I used any interrupt, code execution stops at somewhere in emWin. Does anyone have any idea about this? #stm32 #stemwin-and-interrupt2015-04-10 02:35 PM
I solved the problem. Problem caused by GUI_Delay() function.
I replaced GUI_X_GetTime(void) and GUI_X_Delay(int ms) functions in GUI_X.c with HAL tick timer functions.Old form;GUI_TIMER_TIME GUI_X_GetTime(void) { return OS_TimeMS; }void GUI_X_Delay(int ms) { int tEnd = OS_TimeMS + ms; while ((tEnd - OS_TimeMS) > 0);}The new form;GUI_TIMER_TIME GUI_X_GetTime(void) { return HAL_GetTick();}void GUI_X_Delay(int ms) { HAL_Delay(ms);}Now I'm using Interrupts.