USART1_DR总是0x00000000

[复制链接]
6932|6
 楼主| logokfu 发表于 2012-4-20 12:14 | 显示全部楼层 |阅读模式
本帖最后由 **kfu 于 2012-4-20 12:55 编辑

首先说明这个问题是串口数据寄存的问题。

硬件调试可以正常发送数据,我在超级终端中可以看到STM32发送过来的数据。

但是为什么用JLINK   debug读取出来的USART1_DR的总是零呢。

USART1_DR.jpg
 楼主| logokfu 发表于 2012-4-20 12:58 | 显示全部楼层
难道这个是我debug方法的问题?程序运行到这儿停不了,数据直接被清空了吗?
aozima 发表于 2012-4-20 14:24 | 显示全部楼层
跟硬件相关的寄存器不能这么看的。
读与写不是同一个功能。
而且,有些寄存器是带有读清零的特性。
lut1lut 发表于 2012-4-21 16:34 | 显示全部楼层
从USART功能框图可以看到,物理上有两个独立的寄存器TDR和RDR,而面向用户的就是一个寄存器,即USART_DR。对它的读操作,是返回RDR寄存器的值;对它的写操作则实际是写到TDR。

你的情况是STM32发送数据到超级终端;并未收到数据,当然读到USART_DR=0咯。
 楼主| logokfu 发表于 2012-4-21 18:23 | 显示全部楼层
6# lut1lut

被你说中了。
USART1_DR.jpg
243671731qq 发表于 2014-5-12 12:15 | 显示全部楼层
我也遇到了不能写USART数据寄存器的问题,我配置好了UE,TE,字长,停止位等。
执行   USART1->DR ='a';
单步调试上面语句执行后调试窗口中的数据寄存器还是  USART1->DR=0x0000
求解答,感激



戈卫东 发表于 2014-5-12 14:32 | 显示全部楼层
发送寄存器是不可读的。
读的总是接收寄存器。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

76

主题

2646

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部