野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13104|回复: 2

usart中printf问题

[复制链接]
发表于 2016-3-30 22:25:14 | 显示全部楼层 |阅读模式
     在配置USART中,要使用printf函数,是不是只要在usart.c中或者其他文件中加下面程序就行了,不用再设置其他的吧

#if 1
#pragma import(__use_no_semihosting)            
//标准库需要的支持函数                 
struct __FILE
{
        int handle;
        /* Whatever you require here. If the only file you are using is */
        /* standard output using printf() for debugging, no file handling */
        /* is required. */
};
/* FILE is typedef’ d in stdio.h. */
FILE __stdout;      
//定义_sys_exit()以避免使用半主机模式   
_sys_exit(int x)
{
        x = x;
}
//重定向fputc函数
//printf的输出,指向fputc,由fputc输出到串口
//这里使用串口1(USART1)输出printf信息
int fputc(int ch, FILE *f)
{      
        while((USART1->SR&0X40)==0);//等待上一次串口数据发送完成  
        USART1->DR = (u8) ch;              //写DR,串口1将发送数据
        return ch;
}
#endif


我遇到的问题是:调试时运行到printf时就卡死了,程序调到了B处
回复

使用道具 举报

发表于 2016-3-31 08:46:03 | 显示全部楼层
插入这段代码就可以了
  1. ///重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数
  2. int fgetc(FILE *f)
  3. {
  4.                 /* 等待串口输入数据 */
  5.                 while (USART_GetFlagStatus(DEBUG_USART, USART_FLAG_RXNE) == RESET);

  6.                 return (int)USART_ReceiveData(DEBUG_USART);
  7. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2016-3-31 08:47:03 | 显示全部楼层
还要先初始化串口
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-28 00:52 , Processed in 0.035197 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表