STM32
直播中

哼小曲

12年用户 1164经验值
私信 关注
[问答]

为什么STM32CubeMX带FreeRTOS生成 Keil工程的程序无法下载运行呢

为什么STM32CubeMX带FreeRTOS生成 Keil工程的程序无法下载运行呢?如何去解决这个问题?

回帖(1)

宋玉红

2021-11-26 09:28:56
问题解决记录:
STM32CubeMX 带FreeRTOS,生成 Keil工程,程序下载无法运行,死机;
芯片:STM32F401RCT6
库版本:HAL_1.51
cubeMX:V6.2.0






配置好外设,生成工程均无问题;
在默认函数中加入串口发送代码

void StartDefaultTask(void *argument)
{
  /* USER CODE BEGIN StartDefaultTask */
  /* Infinite loop */
  for(;;)
  {
    HAL_UART_Transmit(&huart1, "HELLO1 STrn",10,1000);
//    HAL_Delay(1000);
    osDelay(1000);
  }
  /* USER CODE END StartDefaultTask */
}

编译运行后,发现程序可以发送一次数据,随后软件死机。
仿真查看,总是卡在:

SysTick_Handler PROC
                EXPORT  SysTick_Handler            [WEAK]
                B       .
                ENDP


这是中断跳转的汇编接口。
解决过程:
既然没跳转成功,是否是SysTick_Handler函数没定义呢?
全局查找:




位于:CMSIS_OS2.c中,确实灰色的。
是SysTick没定义么?
经过查找:在CORE_CM4.h 文件中存在定义





毕竟是cubeMx生成的工程,需要代码写入用户区,
所以找了CMSIS_OS2.c 包含的头文件,就找到了FreeRTOSCondig.h,并且加入 #include
/* IMPORTANT: After 10.3.1 update, Systick_Handler comes from NVIC (if SYS timebase = systick), otherwise from cmsis_os2.c */

#define USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION 0

/* USER CODE BEGIN Defines */
/* Section where parameter definitions can be added (for instance, to override default ones in FreeRTOS.h) */

#include "STM32f401xc.h"

/* USER CODE END Defines */


此刻编译后,正常输入运行,串口正常1S一次 循环打印输出。






存在困惑:
#define USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION 0 这个宏定义起什么作用,没有预编译任何代码

举报

更多回帖

发帖
×
20
完善资料,
赚取积分