zhongzejiang的个人博客分享 http://blog.sciencenet.cn/u/zhongzejiang

博文

stm32通过USART发送(实时)数据到上位机的两种方法

已有 14812 次阅读 2013-7-17 19:21 |系统分类:科研笔记

      这里主要针对浮点型数据来说明,因为整型数据处理起来总要方便一些,但实际处理中数据又往往是浮点型的(float和double)。

      方法一:直接发送二进制。先弄清在STM32和上位机的编译器上,double类型的数据都是怎么定义的。对于数据类型在内存中的存储格式,网上说不是处理器定义的,而是具体的编译器定义的。多数情况下是一样的,如果定义不一样,就不太好处理了,要另想办法。如果一样的话,使用下面的方法即可:

          “ byte* tem=&floatdata;
              SendByte(USART1,tem[3]);
              SendByte(USART1,tem[2]);​
               SendByte(USART1,tem[1]);
              SendByte(USART1,tem[0]);
              大概就是这样的感觉,上位机收到后把这个过程反向就行了”(此例中是float型)

上位机接收到了之后,比特的顺序别错了就行。然后再恢复成原来的数据类型。

      如果数据是实时的,特别是对实时性要求非常高的场合,可以用USART的DMA传输方式。具体就是,STM32有一个DMA控制器,并且有的外设支持DMA功能,它是一个单独的模块,CPU只要使能它,接下来它便自己工作,不需要CPU参与了。这样在DMA工作的同时,CPU可以被编程去做其它的事情,节省了时间,提高了效率。特别是在要用到多个外设的场合,每个外设都用CPU去控制,和第个外设都使用DMA方式相比,能浪费不少时间,这时DMA的优越性就体现出来了。总之,DMA是处理器上处理数据的一个必备本领,必须要深入掌握

      方法二:转成字符串—>用printf函数发送字符串—>上位机接收字符串并转成原来类型。这里在STM32上非常好用的一个类型转换函数是sprintf()。之前转载的博文中有它的介绍。凡是涉及到数据类型转换的就用它即可。这里现在的问题是,上位机上怎么接收字符串(当然肯定有办法,再学习一下)。

     

 

        欢迎支持与建议!



https://wap.sciencenet.cn/blog-948919-708988.html

上一篇:中断interrupt
收藏 IP: 59.64.255.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-26 23:00

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部