OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4418|回复: 2

请教一个关于串口的问题

[复制链接]

28

主题

86

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2015-5-19
在线时间
64 小时
发表于 2017-4-28 19:01:52 | 显示全部楼层 |阅读模式
10金钱
RT,今天我在玩一个STM32和外设通过串口通信的问题,因为外设只有一个串口,所以接收发送都是用的串口2,但是现在出现一个问题,发送的时候会把接收到的数据一起发送过去,我的理解是,发送和接收共用DR寄存器,发送的时候是将DR寄存器内的东西全部发送出去,其中除了USART->DR=BUF[t]中赋予的值之外,还有接收到的值,所以我试着用以下两种方式来解决,但是都失败了。。。第一种,我是在发送前先USART2->CR1&=0<<2,不使能接收,等发送完成之后再使能接收,但是这样stm32直接就不能发送数据了。。。第二种,我是想当RXNE为0的时候再发送数据,如果RXNE为1就不发送,并且将RXNE置零,但是这样STM32还是一样不能发送数据了。。。请大神指点迷津。。。

最佳答案

查看完整内容[请看2#楼]

虽然DR是收发共用,但是却对读写操作分别映射了RDR和TDR两个寄存器,所以发送时不可能把RDR的数据发出去. USART2->CR1&=0
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1522
金钱
1522
注册时间
2014-5-16
在线时间
217 小时
发表于 2017-4-28 19:01:53 | 显示全部楼层
虽然DR是收发共用,但是却对读写操作分别映射了RDR和TDR两个寄存器,所以发送时不可能把RDR的数据发出去.
USART2->CR1&=0<<2这句,语法虽然没错,但是逻辑是错的,0<<2还是为0,所以你这一句的结果是把CR1全部清0,当然不能发送
再说你的问题,应先检查你的发送和接收缓冲区是否正确,是否会发生溢出.
回复

使用道具 举报

28

主题

86

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2015-5-19
在线时间
64 小时
 楼主| 发表于 2017-4-29 16:45:09 | 显示全部楼层
zmingwang 发表于 2017-4-29 11:40
虽然DR是收发共用,但是却对读写操作分别映射了RDR和TDR两个寄存器,所以发送时不可能把RDR的数据发出去.
US ...

非常感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 16:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表