STM32战舰版串口通信学习

2019-07-20 18:38发布

这几天一直在学习串口通信实验,实验例程我基本上弄明白了,但是还有些细节上的问题没有明白。
第一:帧到底是什么概念,是指从接受端存入缓冲器里面的所有数据吗?
第二:缓冲器指的是什么,在什么存储器里面,中文手册里面的USART_DR里面只是32位的寄存器,而且能够用到的位只有9位,看样子肯定不是缓冲器。
第三:USART_DR里面包含了两个寄存器TDR和RDR但是USART_DR只是一个32位的存储器,是不是TDR和RDR指得都是这同一个寄存器。
第四:例程中规定的缓冲器最大存储字节是200字节,但是接受或者发送一个数据却是8位或者9位的数据,其中还可能会有起始位、停止位、奇偶校验位等完全超过了一个字节的长度,存入到缓冲器时,怎么存储的?
第五:例程中缓冲器规定最大存储字节是200字节,按照一个汉字占两个字节来算应该可以存储100个汉字,我发现输入了很多字,但是只有前99个字被存储了,后面的全部被省了,为什么?
第六:关于中断的,例程用到的是接收中断,即读取缓冲器中数据不为0即产生中断,从它的中断使能解释是缓冲器非0即产生中断,中断使能的条件是RXNE被置1产生中断,但是RXNE被置1的条件是USART_DR非空才置1,按照这个推理那缓冲器就是USART_DR寄存器,但是这个寄存器只有9位比特位能用,完全不够存储一句话甚至一个汉字,怎么能做缓冲呢?导致中段产生的条件应该是缓冲器非0造成的,所以缓冲器不是USART_DR。
第七:例程中的中断使用是如何体现出来的?主函数的功能是检测到有换行符输入就从缓冲器发送数据,中断事件是接收到数据产生中断。但是这个中断在主程序中怎么体现出来的呢?如果中断产生的条件改为发送数据中断,效果和接收数据中断效果均是一样的呀,无论接收数据中断还是发送数据中断效果都是一样的。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
xkwy
1楼-- · 2019-07-20 22:54
 精彩回答 2  元偷偷看……
ouxili
2楼-- · 2019-07-21 03:01
xkwy 发表于 2016-11-24 14:09
可以看出,题主对这些深层相关的内容非常感兴趣,兹倍感欣慰。

可能由于中文翻译,或者原子哥的手册措辞 ...

这位老师对我的问题耐心细致认真的讲解,让我很感动,您的讲解让我对USART工作原理有了更清晰的认识,非常感激这位老师能花宝贵时间为我解答每一道问题。

一周热门 更多>