OpenEdv-开源电子网

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

关于stm32f103rct6串口的疑惑

[复制链接]
回帖奖励 2 金钱 回复本帖可获得 1 金钱奖励! 每人限 1 次(中奖概率 50%)

12

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2018-9-16
在线时间
28 小时
发表于 2018-12-14 20:59:49 | 显示全部楼层 |阅读模式
看数据手册看了半天,很是疑惑,相信也有新手对这些问题不是很清楚,望大神前辈们细心指导

问题1:在串口中断处理函数中,判断数据是否接收完到底是判断USART_IT_RXNE变成了1,还是判断USART_SR_RXNE 为1,并且哪一个是由读数据自动清零,哪个需要手动清零
问题2:读数据时,*rebuff=USART_ReceiveData( USART1);和 *rebuff[cnt] = USART1->DR;的区别,哪一个会自动清除USART_IT_RXNE
问题3:如果没有使能接收或发送中断,如何判断数据已经接收完成,是判断USART_IT_RXNE还是USART_SR_RXNE,            并且USART_SR_RXNE=0;系统会报错
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

293

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1001
金钱
1001
注册时间
2018-8-16
在线时间
327 小时
发表于 2018-12-14 22:38:57 | 显示全部楼层
本帖最后由 brucewoo 于 2018-12-14 22:45 编辑

根据手册:“对USART_DR的读操作可以将该位清零。”
USART_IT_RXNE和USART_SR_RXNE,我记得以前在网上看过文章,如果采用中断方式来处理接收,就看USART_IT_RXNE;如果采用轮询方式来处理,就看USART_SR_RXNE.我自己没有用过轮询方式,一般都用中断方式,因为轮询不及时很可能会丢数据。
在中断服务函数里,一般先检测是否真的有接收中断,例如
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
{
  //处理
}
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 19:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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