关于STM32串口通信时数据读取的一些疑问

下图是USART的数据存储和转移部分的框图,有一些疑问一直困扰着我:1、当我们读取数据的时候,我们读取的是RDR(接受数据寄存器)中的数据吗?如果是,那这些传来的数据是自... 下图是USART的数据存储和转移部分的框图,有一些疑问一直困扰着我:1、当我们读取数据的时候,我们读取的是RDR(接受数据寄存器)中的数据吗?如果是,那这些传来的数据是自动通过接收移位寄存器传到RDR的吗?2、当我们发送数据时,是不是只要将数据发送到TDR(发送数据寄存器)就可以了?剩下的单片机会自动将数据通过发送移位寄存器发送出去到其他设备;3、当我们接收数据时,是不是RDR的数据都被读取完之后,RXNE才会被置0;4、接收字符串数据时 ch = USART_ReceiveData(USART1); 是不是每次只能读取一个字符?如果我们需要一次性读取字符串中的所有字符,应该怎么办?我们一次接收的字符串的长度是否有限制?5、我看书上提到了“数据缓冲区”,这是指的什么地方?是数据寄存器吗?最好可以使用12345对应回复,非常感谢!!! 展开
 我来答
望新新
2016-06-16 · TA获得超过183个赞
知道答主
回答量:46
采纳率:50%
帮助的人:30.4万
展开全部

1、是的。芯片硬件自己完成。

2、是的。是的,USART硬件会根据你的设置(波特率等),将数据一位一位发出去。

3、

DR读取后就会清零RXEN。

4、是的,只能读一个字符,因为数据接收寄存器只有一个。不能。只能一个一个接收的,硬件决定了,如果你不读,下一个数据会覆盖上一个数据。

5、硬件上没有,偏要说有的话就是数据寄存器。

追问

1、我不可以定义一个数组 u8 USART_RX_BUF[USART_REC_LEN]; 通过循环读取字符来接收整个数组吗?

2、比如说,有一个传感器返回数字信号,现在需要把数据发送到串口助手显示(没有接收,只是发送数据),我是需不需要用中断?还是直接用 printf() 函数就可以? fputc()定义如下:

追答
1、其实就是这样实现的,所谓的“缓冲区”就是指的程序中定义的数组存储单元。
2、不需要,配置好串口后,直接fputc()就能发数据。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式