STM32f429 CubeMx FreeRTOS emWin (Cubemx有BUG)

之前裸機emWin成功了,接下來嘗試CubeMx FreeRTOS emWin,又遇到三個坑。

先說第一個坑:

我直接再之前裸機的工程上增加FreeRTOS,結果生成程序後,編譯報一大堆錯誤,分析了一下錯誤實在是無從下手,因此懷疑CubeMx有問題,因此我就將Keil工程文件夾全部刪除,再重新生成。再次編譯情況好轉,但是還是不少錯誤。這是第二個坑!

第二個坑:

CubeMx配置FreeRTOS選項中有2個版本,分別是CMSIS_V1和CMSIS_V2 。我看到選項自然是選高版本,結果生成程序後編譯報一大堆錯誤(如下圖),查了半天也不好解決。關鍵是我個人認爲既然是軟件自動生成的,不應該需要我來改動,否則編程過程中後續再修改配置有可能會出錯。所以不得不換CMSIS_V1。

換CMSIS_V1後編譯通過,於是嘗試添加觸摸功能,這時又遇到了第三個坑。

第三個坑:

我在OS中增加了一個軟定時,準備用來輪詢讀取觸摸座標,結果發現程序無法進入定時器回調函數。又是一遍遍的排查。中間做了多少啥事就不表了,最後發現問題所在,先看代碼:

1、freertos.c中的代碼:

/* USER CODE END Header_StartDefaultTask */
void StartDefaultTask(void const * argument)
{

/* Graphic application */  
  GRAPHICS_MainTask();    //此處調用了GUI_App.c中的主函數

  /* USER CODE BEGIN StartDefaultTask */
  /* Infinite loop */
  for(;;)
  {
        HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
    osDelay(100);
  }
  /* USER CODE END StartDefaultTask */
}
 

2、GUI_App.c

void GRAPHICS_MainTask(void) {

  /* 2- Create a Window using GUIBuilder */
  CreateWindow();
 
/* USER CODE BEGIN GRAPHICS_MainTask */
 /* User can implement his graphic application here */
  /* Hello Word example */
    GUI_Clear();
    GUI_SetColor(GUI_WHITE);
    GUI_SetFont(&GUI_Font32_1);
    GUI_DispStringAt("Hello world!", (LCD_GetXSize()-150)/2, (LCD_GetYSize()-20)/2);
   
/* USER CODE END GRAPHICS_MainTask */
  while(1)
{
      GUI_Delay(100);
}

}
紅色部分while(1)死循環造成問題。將這部分程序註釋關閉後,程序運行正常!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章