OpenEdv-开源电子网

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

STM32F103串口发送数据个数不一样的问题

[复制链接]

2

主题

3

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-1-25
在线时间
3 小时
发表于 2018-1-25 22:20:06 | 显示全部楼层 |阅读模式
    新手刚学习STM32,在串口发送数据的时候遇到了如下问题:
1.串口初始化里开启接收中断,主函数里面写如图所示的程序,即先清除发送标志位,再发送0x31,之后 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);这样的话串口调试助手里面显示了三个0x31;
2.最后加上delay三个0x31在串口助手连续显示;
3.   USART_SendData(USART1,0x31);
      while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);如果只有这两句,串口返回的是两个0x31;
4.调试的时候,发送数据是 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);这一句。
为什么会出现这种情况,新手表示很费解。求前辈帮忙解答一下,谢谢。
QQ图片20180125215728.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-9-16
在线时间
51 小时
发表于 2018-1-26 09:27:20 | 显示全部楼层
加个while(1)死循环试试
回复 支持 反对

使用道具 举报

2

主题

3

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-1-25
在线时间
3 小时
 楼主| 发表于 2018-1-26 11:03:46 | 显示全部楼层
嗯,如果加上while(1),然后 USART_SendData(USART1,0x31);
       while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);这样会一直发送,但是后面加上一句清除标志位的话就正确了;如果while(1)里面改成USART_SendData(USART1,0x31);
       while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==SET);这样也是正确的;while(1)里面如果是USART_SendData(USART1,0x31);
       while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==SET);再加清除标志位就一直发送了;这些现象把我弄得糊涂了,不明白 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);的意思了。然后也不明白什么时候该清楚标志位了。不知道这些问题属于小问题按照试验成功的来暂时不用管它呢还是这个真的是个问题呢?望前辈赐教
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 22:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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