OpenEdv-开源电子网

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

stm32 串口接收缓冲区数据清除

[复制链接]

3

主题

7

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2012-12-25
在线时间
0 小时
发表于 2012-12-25 20:36:14 | 显示全部楼层 |阅读模式
void USART2_IRQHandler(void) 




    if(USART_GetFlagStatus(USART2,USART_IT_RXNE)==SET) 

    {               

        RX2 = USART_ReceiveData(USART2); 

        USART_SendData(USART1,RX2); 
       USART_ClearFlag(USART2,USART_FLAG_RXNE);
        while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET) ;              

    }


    if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) 

    { 

        /* 清接收中断标志*/ 

        USART_ClearITPendingBit(USART2, USART_IT_RXNE);

    }


}

  USART_ReceiveData(USART2)是返回最近接收的数据   如果没有新的数据接收  怎么样清除原来接收的数据 

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2012-12-25 21:37:45 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

7

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2012-12-25
在线时间
0 小时
 楼主| 发表于 2012-12-25 21:49:19 | 显示全部楼层

我现在在做串口发送指令 然后通过判断接收到的指令来调用其他函数 

回复 支持 反对

使用道具 举报

3

主题

7

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2012-12-25
在线时间
0 小时
 楼主| 发表于 2012-12-25 22:02:07 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我现在在做串口发送指令 然后通过判断接收到的指令来调用其他函数 

而这些判断语句存在主函数的while中 如果不对接收缓冲区数据进行清除处理 那么就一直调用某一函数 
while(1)
{
              if(USART_ReceiveData(USART2)==0x30)               
                  {
 GPIO_SetBits(GPIOB,GPIO_Pin_0);
 GPIO_ResetBits(GPIOB,GPIO_Pin_1);
 GPIO_SetBits(GPIOC,GPIO_Pin_8);
 GPIO_ResetBits(GPIOC,GPIO_Pin_9);

 } 
 else if(USART_ReceiveData(USART2)==0x31)
                            {    
                          GPIO_SetBits(GPIOB,GPIO_Pin_5);
 GPIO_ResetBits(GPIOB,GPIO_Pin_6);
 GPIO_SetBits(GPIOC,GPIO_Pin_10);    
 GPIO_ResetBits(GPIOC,GPIO_Pin_11);

 }
 else if(USART_ReceiveData(USART2)==0x32)
                {
  GPIO_SetBits(GPIOB,GPIO_Pin_7);
 GPIO_ResetBits(GPIOB,GPIO_Pin_8);
 GPIO_SetBits(GPIOC,GPIO_Pin_12);
 GPIO_ResetBits(GPIOC,GPIO_Pin_13);

   
 }
}
可以对USART2接收缓冲区数据进行清空处理吗 这样每次判断后进入调用函数后对接收缓冲区清空 等待新的数据接收再进行判断
回复 支持 反对

使用道具 举报

2

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2012-4-15
在线时间
0 小时
发表于 2012-12-26 20:53:44 | 显示全部楼层
回复【4楼】iamyj2007:
---------------------------------
数据是会覆盖的,你可以开辟一个缓存区,就是一个数组来试试 
回复 支持 反对

使用道具 举报

3

主题

7

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2012-12-25
在线时间
0 小时
 楼主| 发表于 2012-12-27 19:08:06 | 显示全部楼层
我知道可以覆盖, 但是我采用查询方式接收的。 在新数据来之前一直判断是上次接收的数据, 所以一直循环。 我想判断后执行一次清空接收缓冲区跳出循环。
用数组在中断方式下可以实现,但是我想可不可以直接清除接收缓冲区的数据。
回复 支持 反对

使用道具 举报

7

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2012-8-11
在线时间
0 小时
发表于 2013-11-30 05:06:17 | 显示全部楼层
回复【楼主位】iamyj2007:
---------------------------------
请问楼主找到解决办法了吗?我也有类似的需求,我想直接清除SPI发送缓冲区中的数据,如果已经有数据压入发送缓冲区了,我需要直接清除掉该数据.
回复 支持 反对

使用道具 举报

20

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
308
金钱
308
注册时间
2013-11-6
在线时间
23 小时
发表于 2013-12-2 09:11:56 | 显示全部楼层
請問樓主此問題有解決方法了嗎?
我目前也在尋求中..
如果已解決可否把原碼給我,謝謝.
回复 支持 反对

使用道具 举报

19

主题

302

帖子

2

精华

高级会员

Rank: 4

积分
727
金钱
727
注册时间
2011-11-22
在线时间
10 小时
发表于 2013-12-2 09:34:35 | 显示全部楼层
执行完指令清掉不就行了吗
世界如此美好,好好珍惜每一天吧!
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2014-12-12
在线时间
0 小时
发表于 2015-7-27 20:37:50 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
如果有新数据接受呢?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-7-27 23:24:58 | 显示全部楼层
回复【10楼】灰明A:
---------------------------------
继续存。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2014-12-12
在线时间
0 小时
发表于 2015-7-29 21:45:09 | 显示全部楼层
回复【11楼】正点原子:
---------------------------------
嗯嗯  谢了原子哥~
回复 支持 反对

使用道具 举报

5

主题

12

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2017-2-17
在线时间
6 小时
发表于 2017-2-20 10:59:41 | 显示全部楼层
同样问题,不知道解决没有,在while死循环中新数据没进来之前,会重复调用上一个数据,应该怎么解决
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2017-6-14
在线时间
2 小时
发表于 2017-6-15 11:46:57 | 显示全部楼层
我用液晶显示串口收到数据的时候也出现了这个问题,液晶老是会在末位数显示上一个收到的数据的末尾数,请问楼主解决了吗
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2020-1-3
在线时间
8 小时
发表于 2020-3-14 14:51:08 | 显示全部楼层
Internet 发表于 2017-2-20 10:59
同样问题,不知道解决没有,在while死循环中新数据没进来之前,会重复调用上一个数据,应该怎么解决

设置一个标志,每次用完数据之后就把标记清零,下一次就不会进去了
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2020-1-3
在线时间
8 小时
发表于 2020-3-14 14:52:28 | 显示全部楼层
灰明A 发表于 2015-7-27 20:37
回复【2楼】正点原子:
---------------------------------
如果有新数据接受呢?

用一个数组来寸数据,每次有新数据都会覆盖点前面的
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2020-3-17
在线时间
3 小时
发表于 2020-3-30 15:40:32 | 显示全部楼层
77777888
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-24 04:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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