OpenEdv-开源电子网

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

关于串口通信中USART_RX_BUF接收缓冲的问题

[复制链接]

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2022-8-2
在线时间
13 小时
发表于 2022-8-25 14:13:24 | 显示全部楼层 |阅读模式
1金钱
通过中断将串口接收到的值存储到USART_RX_BUF[]中,再通过串口send出去,那USART_RX_BUF中的值是如何清除的呢,下次串口传输,是接着上次结束的指针继续写入吗
  1. if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
  2.         {
  3.                 Res =USART_ReceiveData(USART1);//(USART1->DR);        //读取接收到的数据
  4.                
  5.                 if((USART_RX_STA&0x8000)==0)//接收未完成 判断最高位
  6.                 {
  7.                         if(USART_RX_STA&0x4000)//接收到了0x0d   
  8.                         {
  9.                                 if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
  10.                                 else USART_RX_STA|=0x8000;        //接收完成了
  11.                         }
  12.                         else //还没收到0X0D
  13.                         {       
  14.                                 if(Res== 0x0d)USART_RX_STA|=0x4000;
  15.                                 else
  16.                                 {
  17. <font color="#ff0000">                                        USART_RX_BUF</font>[USART_RX_STA&0X3FFF]=Res ;
  18.                                         USART_RX_STA++;
  19.                                         if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收          
  20.                                 }                 
  21.                         }
  22.                 }                    
  23.   }
复制代码


最佳答案

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

你可以使用memset函数来清除内存,同时设置USART_RX_STA指针为0就可以保证从0开始写入
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1389
金钱
1389
注册时间
2019-5-29
在线时间
163 小时
发表于 2022-8-25 14:13:25 | 显示全部楼层
你可以使用memset函数来清除内存,同时设置USART_RX_STA指针为0就可以保证从0开始写入
偷偷摸鱼
回复

使用道具 举报

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2765
金钱
2765
注册时间
2018-11-8
在线时间
438 小时
发表于 2022-8-26 13:36:15 | 显示全部楼层
原子的例程不清除 下次直接从头开始写入 覆盖原数据 以回车+换行作为数据结束标志
回复

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2022-8-2
在线时间
13 小时
 楼主| 发表于 2022-8-30 16:08:23 | 显示全部楼层
babyrabbit 发表于 2022-8-26 13:36
原子的例程不清除 下次直接从头开始写入 覆盖原数据 以回车+换行作为数据结束标志

那如果下次写入的字节比上次的少,也就意味着只会覆盖前面的值,会和第一次发送的拼接起来
回复

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2022-8-2
在线时间
13 小时
 楼主| 发表于 2022-8-30 16:09:55 | 显示全部楼层
Havefun 发表于 2022-8-25 15:41
你可以使用memset函数来清除内存,同时设置USART_RX_STA指针为0就可以保证从0开始写入

memset向buf中写0就达到清空的目的了嘛
回复

使用道具 举报

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2765
金钱
2765
注册时间
2018-11-8
在线时间
438 小时
发表于 2022-8-30 19:58:53 | 显示全部楼层
zhangwei9331 发表于 2022-8-30 16:08
那如果下次写入的字节比上次的少,也就意味着只会覆盖前面的值,会和第一次发送的拼接起来

对 只覆盖一部分 不过数据以回车换行为结尾 后面没被覆盖的部分 程序也不去读了
回复

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2022-8-2
在线时间
13 小时
 楼主| 发表于 2022-10-20 11:16:33 | 显示全部楼层
babyrabbit 发表于 2022-8-30 19:58
对 只覆盖一部分 不过数据以回车换行为结尾 后面没被覆盖的部分 程序也不去读了

明白了,感谢您的回复
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 23:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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