STM32串口2寄存器USART_DR赋值问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32串口2寄存器USART_DR赋值问题相关的知识,希望对你有一定的参考价值。

STM32仿真:*wd的值是0x41,赋值后USART2->DR的值竟然是0x0047,请问是什么原因呢

DR其实是由两个寄存器组成的,一个给发送用(TDR),一个给接收用(RDR)。给DR赋值后串口模块立即通过TDR移位发送出了,并不会保存下来。你读DR时其实是串口RDR接收到的数据。追问

明白,谢谢,再请教一下,如何判断发送出去的值是正确的

参考技术A

补充楼上老哥。同51单片机,你可以将DR认为一个单片机可直接寻址的寄存器,每次发送数据,首先将数据传送给DR,紧接着传送给发送移位寄存器(并行串出);接收时数据首先进入接收移位寄存器(串入并出),需要读取时,DR从接收移位寄存器获得数据。

keil和jlink仿真调试stm32串口时,怎么一直看不到接收寄存器变化?程序不仿真直接运行是正

keil和jlink仿真调试stm32串口时,怎么一直看不到接收寄存器变化?程序不仿真直接运行是正确的

这说明你对单片机串口的结构不了解。
串口接收部分有一个移位寄存器和一个保持寄存器,每次读操作都会导致移位寄存器的内容被移到保持寄存器里。悲催的是,只要你调试时监控接收寄存器,那么仿真器是不停对串口进行读操作的……
所以对串口进行硬件调试是有一定技巧的。一般应当在接收处理时将接收到的数据(连同各标志)全部移到一个调试用的缓冲区中,开发人员通过对缓冲区中数据和标志的情况进行分析,判定串口部分工作是否正常。
参考技术A 不要单步去看寄存器变化,你把断点设在接收之后的一条语句再看。追答

不要单步去看寄存器变化,你把断点设在接收之后的一条语句再看。

以上是关于STM32串口2寄存器USART_DR赋值问题的主要内容,如果未能解决你的问题,请参考以下文章

stm32dma串口没有收到包头

STM32请问串口要发送数据“1”该怎么赋值给USART->DR寄存器?

STM32的USART发送数据时如何使用TXE和TC标志

STM32F103(二十三)通用同步异步收发器(USART)

stm32的串口1和串口2配置的区别

stm32f7的串口TX如何设置