OpenEdv-开源电子网

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

请大佬们一个串口通信的问题,困扰我两天了 T_T

[复制链接]

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2019-4-30
在线时间
10 小时
发表于 2019-6-1 12:08:53 | 显示全部楼层 |阅读模式
我就想把USART_RX_BUF【】里的数据取出来嘛,我看原子哥的教程里不是说数据是一个一个发送出来的嘛,我就想把他们一个一个取出来,然后用if看看是否相等。但是一直不行,我问师兄他说取出来的数据是十六进制的,要转换成十进制的再相乘,但是我在网上找了好多C语言例程还是没转换出来T_T。望大佬细心指点
无标题34.png
无标题33.png
无标题35.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-6-1 13:21:35 | 显示全部楼层
虽然你没说明, 但我猜你接收的数据是ASCII码, 如果是就应该这样转换

a=USART_RX_BUF[0]-'0';
b=USART_RX_BUF[1]-'0';
c=USART_RX_BUF[2]-'0';
e=100*a+10*b+c;
回复 支持 反对

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14407
金钱
14407
注册时间
2018-8-3
在线时间
1156 小时
发表于 2019-6-1 13:28:26 | 显示全部楼层
楼上正解
回复 支持 反对

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14407
金钱
14407
注册时间
2018-8-3
在线时间
1156 小时
发表于 2019-6-1 13:31:31 | 显示全部楼层
e= (USART_RX_BUF[0]-'0')*100+(USART_RX_BUF[1]-'0')*10+(USART_RX_BUF[2]-'0')*0  试下这个
啊哈~加油!!
回复 支持 反对

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2019-4-30
在线时间
10 小时
 楼主| 发表于 2019-6-1 16:56:12 | 显示全部楼层
edmund1234 发表于 2019-6-1 13:21
虽然你没说明, 但我猜你接收的数据是ASCII码, 如果是就应该这样转换

a=USART_RX_BUF[0]-'0';

谢谢大佬!问题解决了,但是我有个问题想再请教一下,就是你后面减的那个‘0’是什么意思啊?我可能听不懂,但你能简单给我说一下吗?等我大二学了之后可能印象就会更深了。
回复 支持 反对

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-6-1 16:59:38 | 显示全部楼层
陆仁贾 发表于 2019-6-1 16:56
谢谢大佬!问题解决了,但是我有个问题想再请教一下,就是你后面减的那个‘0’是什么意思啊?我可能听不 ...

ASCII码的'1' 它是== ‘0’+ 1,
'2'=='0'+2
直到‘9’也是如此类推

找个ASCII表看一下
回复 支持 反对

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2019-4-30
在线时间
10 小时
 楼主| 发表于 2019-6-1 17:08:50 | 显示全部楼层
翼行园子 发表于 2019-6-1 13:31
e= (USART_RX_BUF[0]-'0')*100+(USART_RX_BUF[1]-'0')*10+(USART_RX_BUF[2]-'0')*0  试下这个

谢谢大佬!好像这样不行,我执行之后没有接收到数据,不知道为什么。
回复 支持 反对

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14407
金钱
14407
注册时间
2018-8-3
在线时间
1156 小时
发表于 2019-6-1 17:15:00 | 显示全部楼层
陆仁贾 发表于 2019-6-1 17:08
谢谢大佬!好像这样不行,我执行之后没有接收到数据,不知道为什么。

写错了..是这个:
e= (USART_RX_BUF[0]-'0')*100+(USART_RX_BUF[1]-'0')*10+(USART_RX_BUF[2]-'0')
啊哈~加油!!
回复 支持 反对

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2019-4-30
在线时间
10 小时
 楼主| 发表于 2019-6-1 17:36:01 | 显示全部楼层
edmund1234 发表于 2019-6-1 16:59
ASCII码的'1' 它是== ‘0’+ 1,
'2'=='0'+2
直到‘9’也是如此类推

哦,我知道了,就是像0~9这些字符对应的ASCII的值都是十进制。假如我输入的字符是9,然后再减去0对应的字符,就是057-048=9,这时得到的结果9就是十进制了
回复 支持 反对

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2019-4-30
在线时间
10 小时
 楼主| 发表于 2019-6-1 17:36:26 | 显示全部楼层
翼行园子 发表于 2019-6-1 17:15
写错了..是这个:
e= (USART_RX_BUF[0]-'0')*100+(USART_RX_BUF[1]-'0')*10+(USART_RX_BUF[2]-'0')

嗯嗯,现在可以了。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-14 18:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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