你先试试自己的串口是否配置正确,所以可以使用USART_SendData(USART1, (uint8_t) ch);这个函数随便发个字符a之类的,如果这个没问题,再检查是否是重定向的问题
计算机串口输出数据的方式
计算机串口输出数据的方式,stm32关于串口输出的几种常用方式

光与火花
转载
关注
1点赞·2591人阅读
在使用stm32做项目时,我们常常会使用到串口调试,通过串口来输出我们想要看的相关参数值,这样既方便有快捷。
具体方法有哪些呢,我自己整理了一下,这个也是借鉴别人的用法而已。希望大家可以相互讨论学习。
1、使用printf语句通过串口输出我们想要的参数值
具体的用法:使用之前必须包含相应的头文件#include stdio.h
int fputc(int ch, FILE *f)//重定向,让printf输出到串口
{
USART_SendData(USART1, (uint8_t) ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
return ch;
}
使用以上函数那必须在stm32在目标选项中必须勾选Use MicroLIB选项。同时当然需要配置stm32串口的相关初始化才可以,这样就可以使用printf函数来进行串口输出。可以实现在VS下编程使用的的printf函数。
2、使用宏定义的方式进行串口输出,其实与printf函数一样的,只是变了种形式而已,很方便的调用所使用的串口。
具体的用法:使用之前必须包含相应的头文件#include stdio.h
// 定义调试串口
#define DEBUG_UART UART7
// 是否输出调试信息
#define DEBUG_PRINTF
#ifdef DEBUG_PRINTF
#define debug(FORMAT, ...) printf(FORMAT, ##__VA_ARGS__)
#else
#define debug(FORMAT, ...)
#endif
以上,可在文件的开始宏定义相关的内容,之后再用使用以下函数进行输出内容。同时在配置相关的串口内容即可使用调试串口。
首先安装虚拟串口软件,例如VSPD,虚拟出两个串口,如COM2和COM3;
其次,在利用MDK仿真时在命令输入行中分别输入:mode
com4
9600,0,8,1及assign
com4s1out,将stm32的串口重定向,输出到COM3;
最后,用串口软件,如格西烽火等进行收发调试。
因为 stdio 库里的 printf 实际上是连续调用 fputc 来输出每一个字符的,并不是说 fputc 等价于 printf。
这里重定向的目的,就是让库里的 printf 函数在输出字符时,调用这个重定向后的 fputc(把函数指针重新赋给对应的 handle),而不是库里默认的 fputc 函数。
使用半主机模式, #pragma import(__use_no_semihosting) ,
2. 声明 struct __FILE {int handler;}
3. 重定义 FILE __stdin;
4. 实现 int fgetc(FILE*); 从串口中读取一个字符,
5.以上步骤 + 调试。
本文标签:stm32串口重新定向