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

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

[复制链接]
星辰一方 提问时间:2015-9-9 12:20 /
阅读主题, 点击返回1楼
收藏 评论15 发布时间:2015-9-9 12:20
15个回答
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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版