cancel
Showing results for 
Search instead for 
Did you mean: 

STM32F103C8T6: Trace not working

Ksrind
Associate

Hi everyone,
I cannot start SWO trace (nothing received in debug window) with STM32F103C8T6. 

Here is my main.c file:

/**

******************************************************************************

* @file : main.c

* @author : Auto-generated by STM32CubeIDE

* @brief : Main program body

******************************************************************************

* @attention

*

* Copyright (c) 2024 STMicroelectronics.

* All rights reserved.

*

* This software is licensed under terms that can be found in the LICENSE file

* in the root directory of this software component.

* If no LICENSE file comes with this software, it is provided AS-IS.

*

******************************************************************************

*/

 

#include <stdint.h>

 

#if !defined(__SOFT_FP__) && defined(__ARM_FP)

#warning "FPU is not initialized, but the project is compiling for an FPU. Please initialize the FPU before use."

#endif

 

#include<stdio.h>

int main(void)

{

printf("Hello world");

/* Loop forever */

for(;;);

}


And here is my syscalls.c file

/**

******************************************************************************

* @file syscalls.c

* @author Auto-generated by STM32CubeIDE

* @brief STM32CubeIDE Minimal System calls file

*

* For more information about which c-functions

* need which of these lowlevel functions

* please consult the Newlib libc-manual

******************************************************************************

* @attention

*

* Copyright (c) 2020-2024 STMicroelectronics.

* All rights reserved.

*

* This software is licensed under terms that can be found in the LICENSE file

* in the root directory of this software component.

* If no LICENSE file comes with this software, it is provided AS-IS.

*

******************************************************************************

*/

 

/* Includes */

#include <sys/stat.h>

#include <stdlib.h>

#include <errno.h>

#include <stdio.h>

#include <signal.h>

#include <time.h>

#include <sys/time.h>

#include <sys/times.h>

 

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////

// Implementation of printf like feature using ARM Cortex M3/M4/ ITM functionality

// This function will not work for ARM Cortex M0/M0+

// If you are using Cortex M0, then you can use semihosting feature of openOCD

/////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

//Debug Exception and Monitor Control Register base address

#define DEMCR *((volatile uint32_t*) 0xE000EDFCU )

 

/* ITM register addresses */

#define ITM_STIMULUS_PORT0 *((volatile uint32_t*) 0xE0000000 )

#define ITM_TRACE_EN *((volatile uint32_t*) 0xE0000E00 )

 

void ITM_SendChar(uint8_t ch)

{

 

//Enable TRCENA

DEMCR |= ( 1 << 24);

 

//enable stimulus port 0

ITM_TRACE_EN |= ( 1 << 0);

 

// read FIFO status in bit [0]:

while(!(ITM_STIMULUS_PORT0 & 1));

 

//Write to ITM stimulus port0

ITM_STIMULUS_PORT0 = ch;

}

 

/* Variables */

extern int __io_putchar(int ch) __attribute__((weak));

extern int __io_getchar(void) __attribute__((weak));

 

 

char *__env[1] = { 0 };

char **environ = __env;

 

 

/* Functions */

void initialise_monitor_handles()

{

}

 

int _getpid(void)

{

return 1;

}

 

int _kill(int pid, int sig)

{

(void)pid;

(void)sig;

errno = EINVAL;

return -1;

}

 

void _exit (int status)

{

_kill(status, -1);

while (1) {} /* Make sure we hang here */

}

 

__attribute__((weak)) int _read(int file, char *ptr, int len)

{

(void)file;

int DataIdx;

 

for (DataIdx = 0; DataIdx < len; DataIdx++)

{

*ptr++ = __io_getchar();

}

 

return len;

}

 

__attribute__((weak)) int _write(int file, char *ptr, int len)

{

(void)file;

int DataIdx;

 

for (DataIdx = 0; DataIdx < len; DataIdx++)

{

//__io_putchar(*ptr++);

ITM_SendChar(*ptr++);

}

return len;

}

 

int _close(int file)

{

(void)file;

return -1;

}

 

 

int _fstat(int file, struct stat *st)

{

(void)file;

st->st_mode = S_IFCHR;

return 0;

}

 

int _isatty(int file)

{

(void)file;

return 1;

}

 

int _lseek(int file, int ptr, int dir)

{

(void)file;

(void)ptr;

(void)dir;

return 0;

}

 

int _open(char *path, int flags, ...)

{

(void)path;

(void)flags;

/* Pretend like we always fail */

return -1;

}

 

int _wait(int *status)

{

(void)status;

errno = ECHILD;

return -1;

}

 

int _unlink(char *name)

{

(void)name;

errno = ENOENT;

return -1;

}

 

int _times(struct tms *buf)

{

(void)buf;

return -1;

}

 

int _stat(char *file, struct stat *st)

{

(void)file;

st->st_mode = S_IFCHR;

return 0;

}

 

int _link(char *old, char *new)

{

(void)old;

(void)new;

errno = EMLINK;

return -1;

}

 

int _fork(void)

{

errno = EAGAIN;

return -1;

}

 

int _execve(char *name, char **argv, char **env)

{

(void)name;

(void)argv;

(void)env;

errno = ENOMEM;

return -1;

}


and when I open SWV ITM data console, select ITM stimulus port : 0 , start trace and press F8. Nothing displayed on my console:

Ksrind_0-1717674759532.png

So please tell me what's problem and how I can fix that! Thanks!!!

 

0 REPLIES 0