你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于cubeMX的printf重定向,哪位大神可以帮忙?

[复制链接]
星辰一方 提问时间:2015-9-9 12:20 /
阅读主题, 点击返回1楼
收藏 评论15 发布时间:2015-9-9 12:20
15个回答
数码小叶 回答时间:2015-9-10 17:06:52
学习学习,还没试过
watershade 回答时间:2015-9-10 20:11:23
谢谢楼主,一不小心成最佳答案了。
楼主其实是自己解决的。
Paderboy 回答时间:2015-9-10 20:40:28
星辰一方 发表于 2015-9-10 16:33
可惜最佳答案只能选一个,多谢大神帮助!

解决问题就好。。。
星辰一方 回答时间:2015-9-11 08:20:32
Paderboy 发表于 2015-9-10 20:40
解决问题就好。。。

谢谢!
星辰一方 回答时间:2015-9-11 08:22:21
watershade 发表于 2015-9-10 20:11
谢谢楼主,一不小心成最佳答案了。
楼主其实是自己解决的。

大神我还有一个疑问,如果不用printf我怎么控制串口传送的格式呢?比如我要将大量数据通过串口DMA方式传送给上位机,但是我需要的是十进制数据,不是十六进制,可能还需要标点符号间隔……求指点!
watershade 回答时间:2015-9-11 23:11:25
星辰一方 发表于 2015-9-11 08:22
大神我还有一个疑问,如果不用printf我怎么控制串口传送的格式呢?比如我要将大量数据通过串口DMA方式传 ...

是这样的,数据传送有多种目的。一种目的就是纯粹的信息传输,重要的是数据的应用和处理而非展示(好吧,展示也是一种使用,但你知道我的意思)。这种目的一般会尽可能的只保留必要信息,为了软件的处理方便还需要添加帧头,帧尾,命令字等。另一种目的主要用于数据的展示,交互的对象一般是人,而非软件。这时候需要通过相关技术,尽可能的只输出有效信息。比如键值和状态变化,才发送信息。或者隔一段时间再输出信息。这时候信息的展示页就成了一个问题。

上面啰嗦这么多,是为了为下面做一个铺垫。你说用DMA传送大量数据,这没有错误。这是第一种用法。然后你又说我要在上位机上需要十进制数据,这一点就有点值得斟酌了。

你应该知道十进制和十六进制其实到底都是二进制的数据,本身没有什么区别。如果我没有理解错误的话,就是你想在上位机的界面上展示便于人直接读取的信息。当然,你甚至有可能需要float形式的。那么上位机如果是你自己编写的。这就好办,你的重点就放在上位机上怎么来展示数据的问题。只要你的传送信息有一定的格式,比如: 帧头(0x7e)+帧ID+数据+帧尾,数据部分是两个int型整数,一个long型正整数,一个float数据。那么你在上位机就定义一个同样类型的结构体,使用指针来指定位置之后再用float或者cout输出。
但是如果你的上位机是一个写好的串口通讯工具(我才这正是你的情况),那么数据的传输一种就是用printf。另一种就是自己来写几个特定的处理程序。
比如你想输出"AD0:[float], AD1:[10进制],LED:亮",这样的信息。就需要分别为float,十进制和中文字符编写处理程序。这时候整个信息就要全部翻译成字符串,比如你想输出145这个十进制数,你就需要分别输出1,4,5各自的ascII或者Unicode的编码。在串口监视器也需要设置相应的编码格式。这种情况下,你不需要DMA也不要传送大量信息。因为这样的话,你自己也看不过来。
这种情况下最好的办法是站在巨人的肩膀上,用pringf吧。


以上是自己拙劣的总结,若有不当。请大神指导。
12

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版