|
这里主要针对浮点型数据来说明,因为整型数据处理起来总要方便一些,但实际处理中数据又往往是浮点型的(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()。之前转载的博文中有它的介绍。凡是涉及到数据类型转换的就用它即可。这里现在的问题是,上位机上怎么接收字符串(当然肯定有办法,再学习一下)。
欢迎支持与建议!
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-9-27 11:55
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社