(1) keil选择调用微库,不勾选的话,应该是使用了标准库,标准库中printf有一种模式叫半主机模式(参考正点原子串口例程代码注释):
(2)main.c中添加: #include <stdio.h>
(3)重定向函数实现,加在usart.c文件下面:
第二种方法:采用正点原子串口例程中的方法,调用标准库,避免使用半主机模式,在usart.c文件中添加以下代码:
#include "usart.h"
#include <stdio.h>
#include "stm32f1xx_hal.h"
/* USER CODE BEGIN 0 */
//
#if 1
#pragma import(__use_no_semihosting)
//
struct __FILE
{
int handle;
};
FILE __stdout;
//
int _sys_exit(int x)
{
x = x;
}
//
int fputc(int ch, FILE *f)
{
uint8_t temp[1]={ch};
HAL_UART_Transmit(&huart1, temp,1,2);
return 0;
}
#endif
要记得把int fputc ( int ch, FILE *f )重写,调用HAL库中的串口发送函数;