jaerryz 发表于 2020-9-22 14:53:01

关于Printf重定向.

用keil仿真 无法用printf打印.想用printf重定向到Usart1的方法,使printf打印信息能够在UART#1的窗口打印出来.

硬件连接用的是SW(没有连SWO引脚,只连接DIO和CLK)接口方式. 芯片USART1的RX TX引脚反接仿真器RX TX引脚.

这种连接方式可以使printf重定向到usart1用Keil实现在线调试吗?


我试了好多次都实现不了!!!~

求大佬帮忙..

radio2radio 发表于 2020-9-22 15:39:00


试一试这个:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

extern UART_HandleTypeDef huart1;

//USART1 retargetting:
struct __FILE
{
int handle;
};

FILE __stdout;

// fgetc
int fgetc(FILE *f) {
uint8_t ch = 0;
while(HAL_UART_Receive(&huart1, &ch, 1, 100000));
return((int)ch);
}

// fputc
int fputc( int ch, FILE *f )
{
while ( (USART1->SR & 0X40) == 0 )
;
USART1->DR = (uint8_t) ch;
return (ch);
}

//_ttywrch
int _ttywrch( int ch )
{
ch = ch;
return (ch);
}

butterflyspring 发表于 2020-9-24 12:05:12

官方的很多固件库里有相关的例程,参照使用即可。例如:
STM32Cube_FW_F1_V1.8.0\Projects\STM3210E_EVAL\Examples\UART\UART_Printf\MDK-ARM

发表于 2020-9-24 14:36:20

楼主,你用的是什么仿真器?可以使用一个TTL的USB串口板连接USART1进行测试。确定仿真器的串口可以正常使用。

qq12271229 发表于 2020-9-24 21:57:18

我现在串口也遇到一个问题,真的是奇了怪了,加入了fputc重定向函数,printf就是重定向不了!现象是fputc都进不去!用HAL的API进行串口输出就是正常的!

alicekuonji 发表于 2020-9-25 16:02:08

首先测试串口好坏,以及usb转ttl的好坏

关于重定向网上都有,包括cube里面自带的例程都是有的
页: [1]
查看完整版本: 关于Printf重定向.