のんの 2019-03-28 21:47 采纳率: 0%
浏览 1270

为什么我包含了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哪里还没有设置好?

  • 写回答

1条回答

  • 「已注销」 2019-03-29 10:28
    关注

    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 
    
    评论

报告相同问题?

悬赏问题

  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?