在调试代码的时候,最常用的就是使用printf函数来输出一些打印信息,提示自己代码的执行情况。
如果你的UART串口不够用,还要用printf,此时该怎么办?
方法其实是有的,那就是:使用SWO/SWV。
SWO:Serial Wire Output,串行线输出
SWD:Serial Wire Viewer,串行线查看器
一、常见printf输出
1.UART打印
这种使用UART串口输出,需要占用一个硬件串口。
2.Keil MDK-ARM Viewer输出
3.IAR EWARM终端输出
4.ST-LINK Utility SWV输出
这后面三种不占用硬件UART,使用ITM机制。
二、UART映射printf
这种方法应该很多人都知道,就是使用硬件UART串口映射,实现printf打印输出。
对于Keil、 IAR,只需要添加如下代码,就可以使用printf函数:
#include "stdio.h"
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
意思就是将UART输出(串口输出一个字符)进行映射。
三、Keil MDK-ARM Viewer输出
针对2、3、4输出:
添加代码:
#include "stdio.h"
int fputc(int ch, FILE *f)
{
ITM_SendChar(ch);
return ch;
}
在Keil的Options中设置:
提示:Core Clock内核时钟要和你实际时钟对应。
四、IAR EWARM终端输出
1.Oprtins设置:
2.SWO配置
五、ST-LINK Utility SWV输出
工具在线查看输出信息,需要上面配置代码,通过ST-Link链接即可。
1.在你正觉得STM32F3还缺点儿啥时,STM32G4来了!
4.LabVIEW这么“反人类”的东西,到底哪些人在用?月薪2万+的人,笑笑不说话...
本文来自个人微信公众号「ID:strongerHuang」,经原作者授权发布。原文公众号由嵌入式工程师「strongerHuang」在精心整理并维护。专注分享的内容包含:Keil、IAR、STM8、STM32、μC/OS、FreeRTOS、CANOpen、ModBus...