不得不说的USART中的重定向问题

发布者:悠然自在最新更新时间:2022-04-23 来源: eefocus关键字:USART  串口 手机看文章 扫描二维码
随时随地手机看文章

开发过程中,我也是第一次遇到这样的问题,无语又无奈。

我们都知道printf要想在串口上打印,就需要重定向一下。


要想在串口1输出就重定向USART1,要想在串口2输出就重定向USART2。


//重定义fputc函数 

int fputc(int ch, FILE *f)

{      

while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);

USART_SendData(USART1,(uint8_t)ch);

return ch;

}


开发问题

这么简单谁不会呀!我在开发过程中竟然质疑了自己。

事情是这样的:

1.重定向到串口1,什么数据都不打印。

2.重定向的串口2,数据正常显示。

3.重定向到串口2,打印10几秒,数据不打印了(打印函数在循环里)

4.看着数据指示灯还在闪烁,可是串口就像卡了一样不打印数据了。


开始质疑

1.难道串口1重定向函数写错了?

2.为什么串口2可以用,串口1不可以用?

3.把串口2所有函数屏蔽了,串口1相关函数全打开为什么还不显示?

4.检查串口1配置,没错呀怎么还不显示?

5.串口2为什么显示一会又不显示了?


请叫我废物。


解决

1.实际上,代码都没写错。硬件问题,图纸上串口1给画上了,可是板子上并没有,我用万用表测量两个引脚电压,全为0。串口1能用就怪了.


2 .这个问题确实不常见,涉及到知识盲区了。


#pragma import(__use_no_semihosting)             

//标准库需要的支持函数                 

struct __FILE 

int handle; 


}; 


FILE __stdout;       

//定义_sys_exit()以避免使用半主机模式    

int _sys_exit(int x) 

x = x; 

//重定义fputc函数 

int fputc(int ch, FILE *f)

{      

while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);

USART_SendData(USART2,(uint8_t)ch);


return ch;


}


__use_no_semihosting:通知编译器不要从C库链接时使用带有半主机semihosting的函数,所以要避免使用半主机模式。

_sys_exit(int x) :前面一定要加返回类型,可以是void,也可以是int


在这里插入图片描述

打印下来数据流畅,而且正常显示。


关键字:USART  串口 引用地址:不得不说的USART中的重定向问题

上一篇:KEIL5中的options for Target
下一篇:STM32内存知识你真的了解吗?

推荐阅读最新更新时间:2024-11-20 11:34

STM32进阶之串口环形缓冲区实现 FIFO
队列的概念 在此之前,我们来回顾一下队列的基本概念: 队列 (Queue):是一种先进先出(First In First Out ,简称 FIFO)的线性表,只允许在一端插入(入队),在另一端进行删除(出队)。 队列的特点 类似售票排队窗口,先到的人看到能先买到票,然后先走,后来的人只能后买到票 队列的常见两种形式 普通队列 在计算机中,每个信息都是存储在存储单元中的,比喻一下吧,上图的一些小正方形格子就是一个个存储单元,你可以理解为常见的数组,存放我们一个个的信息。 当有大量数据的时候,我们不能存储所有的数据,那么计算机处理数据的时候,只能先处理先来的,那么处理完后呢,就会把数据释放掉,再处理下一个。那么,已经处
[单片机]
STM32进阶之<font color='red'>串口</font>环形缓冲区实现 FIFO
基于串口通信的单片机仿真和C语言开发
0 引言 本论文题目为基于串口通信的单片机仿真和C 语言开发,研究的是一种基于串口的温度检测数据收发模块。利用DS18B20 温度传感器设计温度监测模块,精确到0.1℃,用液晶显示当前温度,然后通过串口调试助手向单片机发送指令。当单片机收到十六进制指令01时,将当前温度值以1s 为间隔传回PC 机显示,同时PC 机显示Turn on temp;当单片机收到十六进制指令02 时,停止温度值的回传,PC 机显示Turn off temp;当单片机收到其它指令时,PC 机显示Error。 1 总体设计 本系统功能由硬件和软件两大部份协调完成,硬件部分主要完成信息的显示;软件主要完成信号的处理及控制功能等。 本系统的硬件采用模块化
[单片机]
RS232异步串行通信USART电路设计
简介:AVR系列单片机都带有异步串行接口,而我们现在学习的ATmega64更是有两个串口。我们知道单片机的电平一般都是TTL电平(关于TTL电平与 CMOS电平等其他电平的区别,我们以后单独详解),而计算机的串口是RS-232电平,这两种电平不能互相匹配,所以如果将这两种电平互联,需要一个电平转换电路,本实例中使用常用的MAX232芯片,它实现RS-232电平和TTL电平的互换。 在MAX232的数据手册中,有这个芯片的典型连接电路,我们直接采用这种电路即可。关于MAX232的连接电路,其实非常简单,我们只要记住4电容(或 5电容)就可以了。这里的4电容指的是电路中只需要连接4个电容就可以;至于5电容,多出来的那个电容是连接V
[单片机]
RS232异步串行通信<font color='red'>USART</font>电路设计
如何配置STM32F103的重映射USART
这两天用STM32F103操作MC39i,其中用到STM32的重映射串口3,部分重映射到PC10、PC11上。经参考了正点原子的《STM32不完全手册》并查看手册,调试成功讲解如下,如有不足欢迎指正。 经查找手册见下图: 此时配置串口步骤如下: 1.开启辅助时钟:RCC- APB2ENR|=1 0; 2.配置重映射寄存器,请串口3部分映射到PC口上:AFIO- MAPR|=1 4;//USART3_REMAP =0B01; 3.使能PC口和串口:RCC- APB2ENR|=1 4; //使能PORTC口时钟 RCC- APB1ENR|=1 18; //
[单片机]
如何配置STM32F103的重映射<font color='red'>USART</font>
串口服务器在广播监控中的应用
一、系统原理    RS- 232 接口 称之为串口、异步口或一个COM口, 是DTE( 数据终端设备) 和DCE( 数据通信设备) 之间的接口。DTE 包括计算机、终端、串口打印机等设备。RS- 232 被定义为一种在低速率串行通讯中增加通讯距离的单端标准。RS- 232 采取不平衡传输方式, 即所谓单端通讯。RS- 232 串口采用电平方式进行数据传送, 传输距离一般都较短, 所以RS- 232 只适合本地设备之间的通信。   目前较为常用的串口有9 针串口( DB9) 和25 针串口( DB25) , 可以用电缆线直接连接标准RS- 232 端口(RS- 422 , RS- 485 较远) 。最为简单且常用的是三线制接法
[模拟电子]
<font color='red'>串口</font>服务器在广播监控中的应用
stm32f103串口1串口2收发程序
#include stm32f10x.h #include string.h #include stdio.h void delay(void); void GPIO_Configuration(void); void uart_init(); extern void USART_OUT(USART_TypeDef* USARTx, uint16_t *Data,...); void RCC_Configuration(void) { SystemInit(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1| RCC_APB2Periph_GPIOA| RCC_AP
[单片机]
IAR 串口调试,基于新唐n76e003的双串口透传程序设计
在解决好多bug后终于实现了双串口之间的相互收发,但是主管说写的程序很垃圾,但是终于能用了,还是很开心,在指导下会进一步修改,如果只是完成作业的话可以借鉴一下,话不多说,继续码上 在这里插入 //*********************************************************************************************************** // File Function: N76E003 UART-0 Mode1 demo code //************************************************************
[单片机]
GD32F303固件库开发(8)----USART收发配置
概述 本章主要配置printf进行打印。 查阅手册可以得知,PA9、PA10为串口0的输出和输入口。 样品申请 https://www.wjx.top/vm/wFGhGPF.aspx# 硬件准备 这里准备了1块开发板进行验证,分别是GD32303C_START开发板。 keil配置 microlib 进行了高度优化以使代码变得很小。 它的功能比缺省 C 库少,并且根本不具备某些 ISO C 特性。 某些库函数的运行速度也比较慢,如果要使用printf(),必须开启。 串口初始化 对串口进行配置。 使用串口时候,需要对GPIO进行复用这里把串口的 Tx 引脚配置为复用推挽输出,Rx 引脚为浮空输入。 设置USART0 通
[单片机]
GD32F303固件库开发(8)----<font color='red'>USART</font>收发配置
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved