问题解决记录:
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 这个宏定义起什么作用,没有预编译任何代码
问题解决记录:
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 这个宏定义起什么作用,没有预编译任何代码
举报