creep 发表于 2015-6-15 23:42:25

【STM32F303开发】+ 使用SWO输出调试信息到Debug Viewer窗口

【STM32F303开发】+ 内部Flash模拟EEPROM

【STM32F303开发】+如何解析GPS数据

【STM32F303开发】(五)TIM定时器PWM的输出与捕获


Jlink/STLink自带一个SWO接口,使用这个接口配合keil可以输出一些简单的调试信息,在没有串口可以使用的时候,SWO也可很方便的打印一些信息,比如F303RE这个板子在我的电脑上一直没法安装虚拟串口的驱动,所以我可以用这个SWO输出调试信息。论坛送的STM32F303RE上自带的stlink正好有这个SWO口,而且也接到了MCU上,所以正好可以使用,好像有的ST的板子也带了这个接口,但是其中桥接电阻并没有贴到板子上,如果要使用的话,就要自己连接起来(比如STM32F429DISCO好像就没有接上)。



对于stlink的驱动好像也有一些要求,我使用keil4带的有点旧的stlink驱动就会提示驱动不支持,后来使用keil5带的stlink驱动据可以了。


如果硬件和软件都没有问题了,还需要设置下kei:
首先打开Micro LIB

然后打开keil的Trace功能,具体设置如下:

然后就是一些重定向printf的函数了,如果之前将printf重定向了串口,那么要修改并添加如下代码:
#define ITM_Port8(n)    (*((volatile unsigned char *)(0xE0000000+4*n)))
#define ITM_Port16(n)   (*((volatile unsigned short*)(0xE0000000+4*n)))
#define ITM_Port32(n)   (*((volatile unsigned long *)(0xE0000000+4*n)))

#define DEMCR         (*((volatile unsigned long *)(0xE000EDFC)))
#define TRCENA          0x01000000

struct __FILE { int handle; /* Add whatever needed */ };
FILE __stdout;
FILE __stdin;

int fputc(int ch, FILE *f) {
if (DEMCR & TRCENA) {
    while (ITM_Port32(0) == 0);
    ITM_Port8(0) = ch;
}
return(ch);
}

打开调试即可得到调试信息:

输出调试信息

测试代码:



*******************************************一天过去了***************************************
上面说了输出的功能,其实如果需要的话,重定向下scanf()函数即可完成从Debug Viewer向程序输入参数的,这在调试某些需要动态调整参数的程序里面应该有帮助,比如按下某个按键,激活输入功能,重新配置下参数,然后继续运行程序。
调试的时候有个变量在一直检测是否有数据输入,如果有数据输入,那么输入的数据就传到这个变量,这个接口在内核的头文件有相关的定义,我们只需要定义这个变量即可。
将下面的main.c代码完整的替换掉上面的mian.c就可以使用了。
#include "main.h"
#include "string.h"
//SWV test
//2015-6-15
//by creep
#define ITM_Port8(n)    (*((volatile unsigned char *)(0xE0000000+4*n)))
#define ITM_Port16(n)   (*((volatile unsigned short*)(0xE0000000+4*n)))
#define ITM_Port32(n)   (*((volatile unsigned long *)(0xE0000000+4*n)))

#define DEMCR         (*((volatile unsigned long *)(0xE000EDFC)))
#define TRCENA          0x01000000

struct __FILE { int handle; /* Add whatever needed */ };
FILE __stdout;
FILE __stdin;

volatile int32_t ITM_RxBuffer=ITM_RXBUFFER_EMPTY;

int fputc(int ch, FILE *f) {
if (DEMCR & TRCENA) {
    while (ITM_Port32(0) == 0);
    ITM_Port8(0) = ch;
}
return(ch);
}
int fgetc(FILE *f)
{
      while(ITM_CheckChar() == 0)
      {               
      }
      return ITM_ReceiveChar();
}

u8 Write_buff = "\n\r\n\rPlease enter your name:\n\r";
u8 read_buff= "";
u8 name="\n\rYour name is : ";
int main(void)
{
      static u8 led_sta = ON;
    LED_Init();
    delay_init();
                delay_ms(1000);
    while(1)
    {
                              //将数据发送到Debug Viewer
                              printf((const char*)Write_buff);
                              memset(read_buff,0,50);
                              //等待输入
                              scanf("%s",read_buff);
                              //将姓名输出
                              printf((const char*)name);
                              printf((const char*)read_buff);
                              LED(led_sta);
                              led_sta = !led_sta;
      delay_ms(1000);
    }
}


直接在debug viewer窗口输入内容然后回车即可,输入的内容不会回显在窗口中,输入也支持中文。运行结果如下:



JackieLaura 发表于 2015-6-16 13:58:23

楼主的教程不错,收藏了。。

不过ST-LINK V2-1的串口,我开始也是安装不上,后来在网上看到一篇文章描述了类似的问题,抱着试一试的态度,我照着教程的方法试了之后就把虚拟串口的驱动安装上了。希望对你有用。

帖子地址:
                http://blog.sina.com.cn/s/blog_68f348920101ip0m.html









creep 发表于 2015-6-16 14:07:58

JackieLaura 发表于 2015-6-16 13:58
楼主的教程不错,收藏了。。

不过ST-LINK V2-1的串口,我开始也是安装不上,后来在网上看到一篇文章描述了 ...

好感动!我也比较纳闷为什么一直安装不了驱动,在我的电脑都装过自己枚举出来的虚拟串口而且用了好久了,但是就是这个装不上,本来还想研究下USB的复合设备呢,没法办就放弃了。
回家试试你的这个方法,再次感谢!!!!:handshake

lkl0305 发表于 2015-6-15 23:48:33

学习学习

党国特派员 发表于 2015-6-16 09:23:46

涨姿势了。。。

Paderboy 发表于 2015-6-16 10:51:25

多谢分享,很有用

Brady 发表于 2015-6-16 11:22:37

學習了,謝謝分享

拼命三郎V5 发表于 2015-6-16 11:55:28

拼命三郎V5 发表于 2015-6-16 12:18:59


路过帮顶

creep 发表于 2015-6-16 12:43:53

拼命三郎V5 发表于 2015-6-16 12:18
路过帮顶

感谢,感谢,关键是赚点金币。

米兰的无线电 发表于 2015-6-16 12:44:34

厉害,学习一下

风子 发表于 2015-6-16 12:57:48

高大上,学习了,先收藏

wamcncn 发表于 2015-6-16 13:38:10

KEIL原来开能这样用

苏浅叶 发表于 2015-6-16 14:05:11

速度挺快的!

creep 发表于 2015-6-16 14:11:23

苏浅叶 发表于 2015-6-16 14:05
速度挺快的!

哈哈,好喜欢龙猫!!
页: [1] 2 3 4 5 6
查看完整版本: 【STM32F303开发】+ 使用SWO输出调试信息到Debug Viewer窗口