完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
方式一:基于SEGGER的RTT方式,可直接使用jlink连接到目标板即可看到调试信息。
优点:速度很快,即使是在中断中调用也没有问题,在带系统的程序中也不需要开启临界保护; 缺点:需要加入两个SEGGER提供的.c文件及头文件,不能输出中文和浮点(原因可能是会降低速度); 硬件连接:jlink的SWDIO引脚必须和目标板连接,其它按照标准使用即可。 需要的两个.c文件可在jlink驱动安装目录D:SEGGERJLink_V634cSamplesRTT中找到(我的安装到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发送数据。 这里提供一种输出可控的方式:debug.h 当宏PRINTF_DEBUG置为0时可以关闭所有调试信息的输出,而宏DEBUG_ON只会影响当前文件内的调试信息输出。 #ifndef __RTT_DEBUG_H #define __RTT_DEBUG_H /***************************************************************/ #ifndef DEBUG_ON #define DEBUG_ON PRINTF_DEBUG #endif /*用于总的调试信息输出控制开关*/ #define PRINTF_DEBUG 1 #if (PRINTF_DEBUG && DEBUG_ON) #include "SEGGER_RTT.h" #define PRINTF_Dbg(fmt, ...) do { SEGGER_RTT_printf(0,"file:%s,line:%d," fmt,__FILE__,__LINE__,##__VA_ARGS__); }while(0) #define PRINTF(...) do { SEGGER_RTT_printf(0,__VA_ARGS__); }while(0) #else #define PRINTF_Dbg(...) #define PRINTF(...) #endif /***************************************************************/ #endif/*__RTT_DEBUG_H*/ 在源码中按照如下方式使用即可: /*必须放在debug头文件包含之前*/ #define DEBUG_ON 1 #include "debug.h" int main(int argc, char *argv[]) { PRINTF("hello world!n"); return 0; } |
|
|
|
方式一:基于SEGGER的RTT方式,可直接使用jlink连接到目标板即可看到调试信息。
优点:速度很快,即使是在中断中调用也没有问题,在带系统的程序中也不需要开启临界保护; 缺点:需要加入两个SEGGER提供的.c文件及头文件,不能输出中文和浮点(原因可能是会降低速度); 硬件连接:jlink的SWDIO引脚必须和目标板连接,其它按照标准使用即可。 需要的两个.c文件可在jlink驱动安装目录D:SEGGERJLink_V634cSamplesRTT中找到(我的安装到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发送数据。 这里提供一种输出可控的方式:debug.h 当宏PRINTF_DEBUG置为0时可以关闭所有调试信息的输出,而宏DEBUG_ON只会影响当前文件内的调试信息输出。 #ifndef __RTT_DEBUG_H #define __RTT_DEBUG_H /***************************************************************/ #ifndef DEBUG_ON #define DEBUG_ON PRINTF_DEBUG #endif /*用于总的调试信息输出控制开关*/ #define PRINTF_DEBUG 1 #if (PRINTF_DEBUG && DEBUG_ON) #include "SEGGER_RTT.h" #define PRINTF_Dbg(fmt, ...) do { SEGGER_RTT_printf(0,"file:%s,line:%d," fmt,__FILE__,__LINE__,##__VA_ARGS__); }while(0) #define PRINTF(...) do { SEGGER_RTT_printf(0,__VA_ARGS__); }while(0) #else #define PRINTF_Dbg(...) #define PRINTF(...) #endif /***************************************************************/ #endif/*__RTT_DEBUG_H*/ 在源码中按照如下方式使用即可: /*必须放在debug头文件包含之前*/ #define DEBUG_ON 1 #include "debug.h" int main(int argc, char *argv[]) { PRINTF("hello world!n"); return 0; } |
|
|
|
最多的应该还是重定向printf,用串口输出
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1606 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1538 浏览 1 评论
969 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
681 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1584 浏览 2 评论
1861浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
643浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
528浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
503浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 07:33 , Processed in 0.952678 second(s), Total 52, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号