OpenEdv-开源电子网

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

串口试验中 为什么(USART_RX_STA&0x80)==0就表示没接收完成数据

[复制链接]

46

主题

177

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
381
金钱
381
注册时间
2012-5-2
在线时间
0 小时
发表于 2012-5-2 15:59:53 | 显示全部楼层 |阅读模式

为什么 (USART_RX_STA&0x80)==0表示接收数据未完成;

if(USART_RX_STA&0x40)//接收到了0x0d,,,,这里接收到0x0d又是什么意思?

请问有相关的资料吗?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165580
金钱
165580
注册时间
2010-12-1
在线时间
2118 小时
发表于 2014-3-20 17:44:02 | 显示全部楼层
回复【10楼】feel:
---------------------------------
估计是你的systick没初始化。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 0 反对 1

使用道具 举报

41

主题

98

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
282
金钱
282
注册时间
2012-4-28
在线时间
0 小时
发表于 2012-5-2 16:22:52 | 显示全部楼层
  因为这个资料里把USART_RX_STA当作变量用,自己设置的一个协议  如果有数据接收完  USART_RX_STA的最高位就置1
时时心存感激,事事全力以赴。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165580
金钱
165580
注册时间
2010-12-1
在线时间
2118 小时
发表于 2012-5-2 16:36:09 | 显示全部楼层
回复【楼主位】stm32007:
---------------------------------
看注释就好了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

21

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
257
金钱
257
注册时间
2013-3-27
在线时间
30 小时
发表于 2013-5-2 11:33:50 | 显示全部楼层
回复【楼主位】stm32007:
---------------------------------
u8 USART_RX_BUF[64];     //接收缓冲,最大64个字节. 
//接收状态 
//bit7,接收完成标志  
//bit6,接收到0x0d 
//bit5~0,接收到的有效字节数目 
u8 USART_RX_STA=0;       //接收状态标记 
第七位,用来标记是否接收完成的标记,如果接收完成了就置1,如果没有,就是0. 
第六位,用来标识是否接收到0X0D,如果收到,就置1,否则为0. 
第5~0位,用来统计接收到的字符数,最大可以支持到64个字符. 


USART_RX_STA&0x80取USART_RX_STA最高位也就是bit7
USART_RX_STA&0x40取次高位也就是bit6
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2014-3-18
在线时间
0 小时
发表于 2014-3-19 05:51:47 | 显示全部楼层
回复【3楼】 正点原子 :
---------------------------------
原子哥...
   我最近才学这个,关于串口部分的通讯协议我认为算是看懂了。
但是还是遇到一些问题,我在MAIN里面利用串口接受一个字符当作开光用。发现不行。

遇到几个问题总结下:
软件调试的时候     一直开着HSE那个位置进不去....百度查询不到    
硬件调试的时候     串口每次发送数据过来他每次都是获取到第一个字符串,第二个那些都没有。又卡在这里,所有没法设置到通讯完毕的标志位。就没法继续了。

实验问题:
串口发送一个Q,或者是W 控制一个U8 的KK 置为Q: 1 W:0
然后在循环下面写一个IF(kk){输出}else{关闭}

实际情况很神奇,系统运行提示的LED 会受到Q  和W的影响,Q就关闭了,W就闪。
 而我要控制的PB05没有任何反应。







回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165580
金钱
165580
注册时间
2010-12-1
在线时间
2118 小时
发表于 2014-3-19 17:46:26 | 显示全部楼层
回复【5楼】feel:
---------------------------------
我看你设了很多断电,仿真情况如何?
我看代码,没看出问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2014-3-18
在线时间
0 小时
发表于 2014-3-19 18:55:12 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
如上描述
就是无法调试与仿真,用软件仿真的时候 卡在等待HSE就绪的位置那个

  /* Wait till HSE is ready and if Time out is reached exit */
  do
  {
    HSEStatus = RCC->CR & RCC_CR_HSERDY;
    StartUpCounter++;  
  } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));


硬件仿真的时候,串口中断会进入。但是发送一串字符串QWERT+回车 。
串口中断只会进入一次Res显示是第一个字符串的ASCII
后面的无效。所以在硬件仿真的情况下,USART_RX_STA无法置位0X80。
MAIN.C while 的循环串口接受完成判断标志就不起作用KK一直为0。


由于4.2的KEIL没有代码提示...编程速度慢,所以我已经升级为KEIL5.0。
调试会不会有可能和这个软件版本有关?
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2014-3-18
在线时间
0 小时
发表于 2014-3-19 21:30:12 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
原子哥。。。关于KK部分,我百度实在是查询不到。然后一行一行代码注释运行,看大概是那部分影响的。惊奇的发现IF(KK)这里面的delay_ms()不使用延时函数 LED能正常的控制了,但是这个DELAY是你的代码复制过来的啊.....
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165580
金钱
165580
注册时间
2010-12-1
在线时间
2118 小时
发表于 2014-3-19 23:12:59 | 显示全部楼层
回复【8楼】feel:
---------------------------------
这个实在不影响才对啊。
delay_init,你执行了吧?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2014-3-18
在线时间
0 小时
发表于 2014-3-20 03:09:21 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
呜呜呜  原子哥说多了都是泪啊,原来弄arduino U3 做四轴的    串口不够转STM32  给奸商忽悠。。。没查资料!
   现在用到不是你的板子,目前调试出来确实是由于你那个延时导致的。注释就不影响了。

到时候我自己在多去看看SysTick,看能不能找出问题在来汇报。

软件调试的问题,注释了那个DO while 就能进去了很奇怪。但是新建逻辑分析仪的时候  寄存器又不存在。。。各种蛋疼的事情发送。

硬件调试问题,希望你指跳路啊....串口应该如何调试?


是不是用到你的板子就不会有这些问题了?唉..你的迷你感觉都大哦。。。飞控 伤不起!你快推出些面向这些的板子吧。
回复 支持 反对

使用道具 举报

12

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2014-9-13
在线时间
31 小时
发表于 2017-2-26 15:55:15 | 显示全部楼层
本帖最后由 xyz1015231411 于 2017-2-26 15:57 编辑
zhulifeng 发表于 2012-5-2 16:22
  因为这个资料里把USART_RX_STA当作变量用,自己设置的一个协议  如果有数据接收完&n ...

原子哥,如果有数据接收完USART_RX_STA的最高位就置1,中途是怎么实现置1的呢,是这个函数实现的吗USART_GetITStatus(USART1, USART_IT_RXNE),但它们两个的联系是怎么建立起来的?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-9-22 16:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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