将 SEGGER SystemView 与 STM32 结合使用
Using SEGGER SystemView with STM32
目前我正在 STM32L476VGT 上使用 FreeRTOS 开发一个项目。
到目前为止,我一直在使用 Ozone(SEGGER) 和 J-Link(Edu 和 Ultra+)
进行调试
现在我想 "debug" 或使用 SystemView (SEGGER) 记录系统事件,但它不起作用。
首先是一些我认为重要的配置:
16Mhz HSE --> 内部 80Mhz SysClk
FreeRTOS V8.2.3
J-link(连接 SCLK、SDIO 和 SWO)
使用 cubeMx 创建的项目,因此正在使用 ST HAl 库(我知道这对很多人来说是英国媒体报道软件,但当我得到这个项目时就是这样)。
main.c
#include "SEGGER_SYSVIEW.h"
//// -- includes, prototypes and definitions
void main (void){
/// -- Hardware init
SEGGER_SYSVIEW_Init(1000, 80000000, 0, 0);
SEGGER_SYSVIEW_Start();
/// - tasks creation
osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
/* Start scheduler */
osKernelStart();
}
为了使用 SystemView,我只添加了我添加到项目中的基本代码行。
在此行下,我附上了 System Viewer 的屏幕截图。
编辑 1:
我创建了一个新项目,从头开始。
STM32L476RG 是的 R 是另一个带 3 个 LED 的板
cubemx:STM32L4 库 1.10.0
FreeRTOS V9.0.0
main.c
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
SEGGER_SYSVIEW_Init(1000, 80000000, 0, 0);
SEGGER_SYSVIEW_Start();
osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
osThreadDef(ledControlTask, ledcontrol, osPriorityNormal, 0, 128);
ledControlTaskHandle = osThreadCreate(osThread(ledControlTask), NULL);
osKernelStart();
while (1)
{
}
}
void ledcontrol(void const * argument)
{
for(;;)
{
HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
osDelay(500);
}
}
同样的结果:
如果我点击停止我得到:
此外,如果我按照 SEGGER SystemView UM0802 pdf 手册中的解释进行说明:
SEGGER_SYSVIEW_Init(1000, 80000000, 0, 0);
SEGGER_SYSVIEW_Start();
为:
SEGGER_SYSVIEW_Conf();
我得到相同的输出
非常感谢,
吉列尔莫
已解决,
RFM(UM08027_SystemView.pdf)!!
我忘记应用 freeRTOS 补丁文件了。
补丁中的行与文件中的行有些不匹配。
现在完美运行。
目前我正在 STM32L476VGT 上使用 FreeRTOS 开发一个项目。 到目前为止,我一直在使用 Ozone(SEGGER) 和 J-Link(Edu 和 Ultra+)
进行调试现在我想 "debug" 或使用 SystemView (SEGGER) 记录系统事件,但它不起作用。
首先是一些我认为重要的配置: 16Mhz HSE --> 内部 80Mhz SysClk FreeRTOS V8.2.3
J-link(连接 SCLK、SDIO 和 SWO)
使用 cubeMx 创建的项目,因此正在使用 ST HAl 库(我知道这对很多人来说是英国媒体报道软件,但当我得到这个项目时就是这样)。
main.c
#include "SEGGER_SYSVIEW.h"
//// -- includes, prototypes and definitions
void main (void){
/// -- Hardware init
SEGGER_SYSVIEW_Init(1000, 80000000, 0, 0);
SEGGER_SYSVIEW_Start();
/// - tasks creation
osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
/* Start scheduler */
osKernelStart();
}
为了使用 SystemView,我只添加了我添加到项目中的基本代码行。
在此行下,我附上了 System Viewer 的屏幕截图。
编辑 1:
我创建了一个新项目,从头开始。
STM32L476RG 是的 R 是另一个带 3 个 LED 的板 cubemx:STM32L4 库 1.10.0 FreeRTOS V9.0.0
main.c
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
SEGGER_SYSVIEW_Init(1000, 80000000, 0, 0);
SEGGER_SYSVIEW_Start();
osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
osThreadDef(ledControlTask, ledcontrol, osPriorityNormal, 0, 128);
ledControlTaskHandle = osThreadCreate(osThread(ledControlTask), NULL);
osKernelStart();
while (1)
{
}
}
void ledcontrol(void const * argument)
{
for(;;)
{
HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
osDelay(500);
}
}
同样的结果:
如果我点击停止我得到:
此外,如果我按照 SEGGER SystemView UM0802 pdf 手册中的解释进行说明:
SEGGER_SYSVIEW_Init(1000, 80000000, 0, 0);
SEGGER_SYSVIEW_Start();
为:
SEGGER_SYSVIEW_Conf();
我得到相同的输出
非常感谢,
吉列尔莫
已解决, RFM(UM08027_SystemView.pdf)!! 我忘记应用 freeRTOS 补丁文件了。 补丁中的行与文件中的行有些不匹配。
现在完美运行。