历史上的今天

今天是:2024年09月05日(星期四)

正在发生

2018年09月05日 | STM32两种输出调试信息的方法

发布者:SereneSerenity 来源: eefocus关键字:STM32  调试信息 手机看文章 扫描二维码
随时随地手机看文章

方式一:基于SEGGER的RTT方式,可直接使用jlink连接到目标板即可看到调试信息。


优点:速度很快,即使是在中断中调用也没有问题,在带系统的程序中也不需要开启临界保护;


缺点:需要加入两个SEGGER提供的.c文件及头文件,不能输出中文和浮点(原因可能是会降低速度);


硬件连接:jlink的SWDIO引脚必须和目标板连接,其它按照标准使用即可。


需要的两个.c文件可在jlink驱动安装目录D:\SEGGER\JLink_V634c\Samples\RTT中找到(我的安装到D盘驱动版本为634c,根据自己的实际情况找)



可看到里面有一个压缩包,解压后将SEGGER_RTT.c、SEGGER_RTT.h、SEGGER_RTT_Conf.h、SEGGER_RTT_printf.c拷贝到自己的工程目录下,然后将头文件包含进工程即可



在使用的地方头文件加上#include "SEGGER_RTT.h"


便可调用SEGGER_RTT_printf();函数输出调试信息到Jlink RTT_Viewer了



这个软件是安装好jlink驱动就有的,里面还有其它软件也可以查看调试信息,可使用的函数也不止这一个,可参考segger官方文档自行实现。


方式二:使用STM32的串口输出调试信息。


优点:可以输出中文及浮点数;


缺点:需要占用一个串口资源,不适合在中断中调用,带系统后调用的地方也需要加临界保护;


硬件连接:将单片机串口接到一个USB转串口用上位机即可观察数据。


需要在MDK中开启使用微库选项(也可不用,但需要自己实现重定向的一些东西)



在有勾勾的地方勾上就行了


在程序中需要将printf函数重定向到串口


/*重定向 printf 到串口*/

int fputc(int ch, FILE *f)

{

  UART1_SendData((uint8_t *)&ch,1);

  

  return ch;

}

UART1_SendData();函数自行实现,就是串口1发送数据。



这里提供一种输出可控的方式:


/*用于控制输出调试信息*/

#define PRINTF_DEBUG 1U

#if (PRINTF_DEBUG > 0U)

  #define   USE_RTT_PRINTF      1U

  #if (USE_RTT_PRINTF > 0U)

    #include "SEGGER_RTT.h"

    /*基于 SEGGER_RTT 不能输出浮点,中文,等一些特殊字符(优点速度快可在中断中调用)*/

    #define   PRINTF_Dbg(...)     \

                    do{\

                        SEGGER_RTT_printf(0,"file:%s,line:%d,",__FILE__,__LINE__);\

                        SEGGER_RTT_printf(0,__VA_ARGS__);\

                      }while(0);

 

    #define   PRINTF(...)     \

                      SEGGER_RTT_printf(0,__VA_ARGS__);

  #else

    /*使用串口格式化到 printf 输出*/

    #define   PRINTF_Dbg(...)     \

                    do{\

                        printf("file:%s,line:%d,",__FILE__,__LINE__);\

                        printf(__VA_ARGS__);\

                      }while(0);

                      

    #define   PRINTF(...)     \

                      printf(__VA_ARGS__);

  #endif

                    

#else

  #define PRINTF_Dbg(...)

  #define   PRINTF(...)

#endif

需要查看调试信息时只需要打开宏PRINTF_DEBUG即可。


关键字:STM32  调试信息 引用地址:STM32两种输出调试信息的方法

上一篇:STM32之调试支持(DBG)
下一篇:STM8S:Debug调试正常,烧录程序运行不正常

推荐阅读

据外媒报道,过去十年内,对比煤和天然气,成本的不断下降使得太阳能电池板和风力发电机竞争力逐渐上升。现在这一现象也发生在了电池上,进而也使得电动车的价格也有所下降,电网也能够存储所需的冗余电能。 根据Wood Mackenzie分析,过去八年,按照每千瓦时计算,锂离子电池的成本下滑了75%。单次电池产能实现翻倍,成本也再次下滑5%至8%。 但是,...
2019中国国际智能产业博览会(简称智博会)于8月26~29日在重庆国际博览中心举行,江西太空机器人科技有限公司作为RFC中关村双创服务机器人产业联盟的核心会员应邀参展,作为全球首创的服务机器人共享工厂正在向全球提供产能共享服务。智博会期间,太空机器人先后与国家机器人质量监督检验中心(重庆)和门罗机器人等多家企业签署合作协议,携手深耕服务机...
第三代半导体外延代工服务商南京百识电子科技有限公司(以下简称“百识电子”)日前宣布超募完成Pre-A轮融资,融资总额过亿元人民币。本轮融资仍由和利资本领投,台达电等知名投资方跟投。融资主要将用于建厂及生产设备购入。由于第三代半导体材料特性带来的终端系统性能和成本优势,终端市场借由行动装置电源适配器、5G基站PA、无人机微波应用、动车OBC及...
据外媒报道,在当地时间9月7日至12日举行的IAA Mobility Summit上,激光雷达制造商Luminar将在欧洲汽车制造商的车辆道路演示中首次展示其Proactive Safety(主动安全)系统。当地时间9月2日,该公司还宣布其与一级全球汽车供应商伟巴斯特(Webasto)和英纳法(Inalfa)建立了新型整合合作伙伴关系,扩大了其客户生态系统。Proactive Safety系统在美国...

史海拾趣

小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved