OpenEdv-开源电子网

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

串口发送十六进制中函数printf和USART2->DR的区别

[复制链接]

8

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2017-8-16
在线时间
15 小时
发表于 2018-3-26 22:56:20 | 显示全部楼层 |阅读模式
1金钱
最近在做串口通讯。需要stm32发出十六进制数据给上位机。发现函数printf和USART2->DR发送出的16进制还是有很大的区别的。我做实验发现以下现象和问题:

(1)USART2->DR发的16进制在XCOM上十六进制显示即为十六进制显示,而用printf发出的十六进制为ASCII码。如果XCOM不是十六进制显示,USART2->DR是乱码,printf发出的数据是十六进制。
    问:printf怎么能发出显示为十六进制数,而不是点击XCOM后显示成ASCII码?
          XCOM默认接收是十进制数?还是?

(2)用)USART2->DR连续发送数据必须有延时(图中delay),若没有延时相当于赋值,只发出最后一个USART2->DR的赋值。而printf可以直接发。
    问:是不是因为printf发送数据要进行处理,而USART2->DR直接赋值给寄存器时间太短?


(3)我想输出带有变量的十六进制,怎么来定义?用那种方法发送十六进制到串口更省时?如果USART2->DR加延时更快的话,要延时多少ms?
   比如:我想把采集到的电压信号转换成十六进制实时发送。

有谁知道的,帮忙解决一下。小弟深知C语言和stm32学的不好。有说的不对的地方还请大家帮忙指出。谢谢各位!


不选十六进制显示

不选十六进制显示

十六进制显示

十六进制显示

此图为两种函数发送串口

此图为两种函数发送串口

最佳答案

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

直接写DR才能发送所有1进制数据,printf是方便观察和格式化输出的时候,采用的。 printf是通过f_putc里面完成发送的,里面有等待串口发送完成。串口发送数据,必须等待发送完成,才能发新的数据到DR。 否则就用不了的。这是基础知识啊,好好回去看看我们例程吧。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2018-3-26 22:56:21 | 显示全部楼层
直接写DR才能发送所有1进制数据,printf是方便观察和格式化输出的时候,采用的。
printf是通过f_putc里面完成发送的,里面有等待串口发送完成。串口发送数据,必须等待发送完成,才能发新的数据到DR。
否则就用不了的。这是基础知识啊,好好回去看看我们例程吧。
回复

使用道具 举报

25

主题

161

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2017-7-17
在线时间
149 小时
发表于 2018-3-26 23:35:23 | 显示全部楼层
这问题没遇到过,不懂。只回答你的问题2. 我用库函数操作,不用延时,通常是每发送一个字节后等待发送完成标志位被置位,然后发送下个字节。不知道你printf函数内部是怎么实现的,我自己写的话通常就是这种方法。
不忘初心,方得始终!
回复

使用道具 举报

8

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2017-8-16
在线时间
15 小时
 楼主| 发表于 2018-3-27 09:44:45 | 显示全部楼层
恩恩,谢谢您的指导。但是你说的只有DR才能发出所进制的数据,printf
回复

使用道具 举报

8

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2017-8-16
在线时间
15 小时
 楼主| 发表于 2018-3-27 09:50:53 | 显示全部楼层
正点原子 发表于 2018-3-26 22:56
直接写DR才能发送所有1进制数据,printf是方便观察和格式化输出的时候,采用的。
printf是通过f_putc里面 ...


恩恩,谢谢您的指导。对我基础不老深感内疚。但是你说的只有DR才能发出所进制的数据,printf是方便观察和格式化输出的。
(1)意思是不是printf(%02X,0x5A)发出来的不是16进制?
(2)假设我想不断的发出一个变量的十六进制数据应该怎么发比较合适?
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2022-5-6
在线时间
24 小时
发表于 2022-5-27 17:11:58 | 显示全部楼层
第三个问题解决了吗?我现在也遇到这个问题了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 02:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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