OpenEdv-开源电子网

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

请教一下大家, 串口1接收到一串十六进制数组,res=USART_ReceiveData(USART1); 如何对res接收到的数据进行遍历?

[复制链接]

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
发表于 2020-8-20 14:19:29 | 显示全部楼层 |阅读模式
10金钱
请教一下大家, 串口1接收到一串十六进制数组,res=USART_ReceiveData(USART1); 如何对res接收到的数据进行遍历?

最佳答案

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

得有i++才行啊。 或 还要想好什么时候清0. 如果是处理一帧数据,我们的做法是这样:
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

3397

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8670
金钱
8670
注册时间
2020-5-11
在线时间
4135 小时
发表于 2020-8-20 14:19:30 | 显示全部楼层
本帖最后由 LcwSwust 于 2020-8-20 15:53 编辑
支持者2400 发表于 2020-8-20 14:55
我想这样,但是不成功,实在想不起来以前咋做的了

得有i++才行啊。
  1. RxBuffer1[i++]=res;
复制代码


  1. RxBuffer1[i]=res;i++;
复制代码

还要想好什么时候清0.
如果是处理一帧数据,我们的做法是这样:
  1. //--------------------------------------------------
  2. //全局变量
  3. //--------------------------------------------------
  4. U8        uart1rec  =0;        //数据域收到的字节数
  5. U8        uart1buf_rx[20];//接收缓冲
  6. //--------------------------------------------------
  7. //模拟串口1中断
  8. //数据直接存入数组
  9. //--------------------------------------------------
  10. void uart1_mint(U8 ud)
  11. {
  12.         uart1tick=5;//帧计时
  13.         if(uart1rec==0)//帧头 16 09 01
  14.         {
  15.                 if(ud==0x16)
  16.                         uart1buf_rx[uart1rec++]=ud;
  17.         }
  18.         else if(uart1rec==1)
  19.         {
  20.                 if(ud==0x09)
  21.                         uart1buf_rx[uart1rec++]=ud;
  22.                 else
  23.                         uart1rec=0;
  24.         }
  25.         else if(uart1rec==2)
  26.         {
  27.                 if(ud==0x01)
  28.                         uart1buf_rx[uart1rec++]=ud;
  29.                 else
  30.                         uart1rec=0;
  31.         }        
  32.         else
  33.         {
  34.                 uart1buf_rx[uart1rec++]=ud;
  35.                 if(uart1rec>=10)//帧长10字节
  36.                 {
  37.                         uart1_proc();//处理数据
  38.                         uart1rec=0;
  39.                 }
  40.         }
  41. }
复制代码

专治疑难杂症
回复

使用道具 举报

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
 楼主| 发表于 2020-8-20 14:20:06 | 显示全部楼层
        这样可以吗?没调通        RxBuffer1[i]=res;
回复

使用道具 举报

12

主题

3397

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8670
金钱
8670
注册时间
2020-5-11
在线时间
4135 小时
发表于 2020-8-20 14:49:17 | 显示全部楼层
存入数组?用i计数的话要将其定义为全局变量或静态变量,建议取个长一点的名字,以免重复。
专治疑难杂症
回复

使用道具 举报

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
 楼主| 发表于 2020-8-20 14:53:49 | 显示全部楼层
LcwSwust 发表于 2020-8-20 14:49
存入数组?用i计数的话要将其定义为全局变量或静态变量,建议取个长一点的名字,以免重复。

就是把res的数组进行遍历,以前弄过,时间长了,就是想不起来咋做的
回复

使用道具 举报

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
 楼主| 发表于 2020-8-20 14:55:30 | 显示全部楼层
LcwSwust 发表于 2020-8-20 14:49
存入数组?用i计数的话要将其定义为全局变量或静态变量,建议取个长一点的名字,以免重复。

我想这样,但是不成功,实在想不起来以前咋做的了
  1. RxBuffer1[i]=res;
  2.            
  3.         if((0x16==RxBuffer1[0])&&(0x09==RxBuffer1[1])&&0x01==RxBuffer1[2])
  4.        {
  5.                             LED0=0;
  6.                  
  7.              }
复制代码
回复

使用道具 举报

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
 楼主| 发表于 2020-8-20 16:00:18 | 显示全部楼层
LcwSwust 发表于 2020-8-20 15:51
得有i++才行啊。


没啥反应,我以前做这个,代码量很少,就能完成的,现在不知道咋做的了
回复

使用道具 举报

0

主题

79

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1928
金钱
1928
注册时间
2018-10-11
在线时间
256 小时
发表于 2020-8-20 16:39:31 | 显示全部楼层
支持者2400 发表于 2020-8-20 14:55
我想这样,但是不成功,实在想不起来以前咋做的了

这个方法没有问题,但i要设置为全局变量...
另外还要处理好i值的清零问题...
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 10:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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