STM32f429 CubeMx FreeRTOS emWin (Cubemx有BUG)

3 篇文章 0 订阅
2 篇文章 0 订阅

之前裸机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)死循环造成问题。将这部分程序注释关闭后,程序运行正常。但是我增加了触摸屏程序后,发现无法触摸。于是在上面红色while循环中加入了一条LED GPIO反转语句,发现LED没有变化,判定是程序运行到这里死机了。个人感觉应该和做裸机程序遇到的情况类似,于是尝试加大DefaultTask的static size,设置未512,再运行程序正常。触摸屏幕上大按钮可以切换显示窗体。

虽然网上有很多人不喜欢CubeMX,但是我个人认为它还是不错的,毕竟让我们减少了很多工作量,让我们可以把更多的精力放在应用层上,而不用为设置底层驱动大费周章。只是我们开始用的时候,从标准库转过来不习惯。另外确实CubeMX也有一些BUG,但是毕竟它一直在升级,相信会越来越好。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值