为什么我包含了stdio.h,也重新定向到了C库函数,但进行stm32和电脑的串口实验中,printf语句还是没有执行?

#include "stm32f10x.h"
#include "LED.h"
#include "USART.h"
#include "stdio.h"
void Show_Message(void);
char ch;
int main(void)
{
/* 初始化RGB彩灯 */
LED_GPIO_Config();

/* 初始化USART 配置模式为 115200 8-N-1 */
USART_Config();

/* 打印指令输入提示信息 /
Show_Message();
while(1)
{
char ch;
/
获取字符指令 */
ch=getchar();
printf("接收到字符:%c\n",ch);

/* 根据字符指令控制RGB彩灯颜色 */
switch(ch)
{
  case '1':
    LED_RED;
  break;
  case '2':
    LED_GREEN;
  break;
  case '3':
    LED_BLUE;
  break;
  case '4':
    LED_YELLOW;
  break;
  case '5':
    LED_PURPLE;
  break;
  case '6':
    LED_CYAN;
  break;
  case '7':
    LED_WHITE;
  break;
  case '8':
    LED_RGBOFF;
  break;
  default:
    /* 如果不是指定指令字符,打印提示信息 */
    Show_Message();
    break;      
}   

}
}

static void Show_Message(void)
{
printf("\r\n 这是一个通过串口通信指令控制RGB彩灯实验 \n");
printf("使用 USART 参数为:%d 8-N-1 \n",DEBUG_USART_BAUDARATE);
printf("开发板接到指令后控制RGB彩灯颜色,指令对应如下:\n");
printf(" 指令 ------ 彩灯颜色 \n");
printf(" 1 ------ 红 \n");
printf(" 2 ------ 绿 \n");
printf(" 3 ------ 蓝 \n");
printf(" 4 ------ 黄 \n");
printf(" 5 ------ 紫 \n");
printf(" 6 ------ 青 \n");
printf(" 7 ------ 白 \n");
printf(" 8 ------ 灭 \n");

}

这是main.c里的。本来是模仿秉火的程序写的,但结果串口发数据可以控制灯的状态,但printf后面的内容却没法在串口助手上显示,后来几乎是把源代码都复制了过来,还是显示不了。源代码就可以在串口助手上显示printf语句内的内容,keil的微库我也勾选了。是不是我的keil哪里还没有设置好?

usart.c

//加入以下代码,支持printf函数,而不需要选择use MicroLIB    
#if 1
#pragma import(__use_no_semihosting)             
//标准库需要的支持函数                 
struct __FILE 
{ 
    int handle; 

}; 

FILE __stdout;       
//定义_sys_exit()以避免使用半主机模式    
void _sys_exit(int x) 
{ 
    x = x; 
} 
//重定义fputc函数 
int fputc(int ch, FILE *f)
{      
    while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
    USART1->DR = (u8) ch;      
    return ch;
}
#endif