发同一个字母,为什么串口助手发送和单片机发送区别和单片机的波形正好相反?

那里有很多 单片机仿真实例包括仿真图 和 源码

加我QQ吧,看看帮你解决一下!
串口的波特率初值不对单片机的晶振不对。串口波特率的定时器使用的不对
把单片机的UART驅动写好,将收到的数据通过UART发送回去即可注意硬件上要有232电平转换芯片,呵呵

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

1. 原始字节 按原始字节数据发送這也是我个人比较倾向的方式。首先位、字节和字节流本身没有任何意义,如果按约定的方式去解析才能有具体的含义。


用什么约定方式呢使用符合IEEE 754的浮点数标准,每个浮点数为4个字节按标准解析就可以了。
其实这个标准包括STM32在内的很多微控制器,都是支持的內部的表达方式都是一致的,而且效率很快
技巧就是定义好一个联合体,这一步很关键:
然后在USART的串口中断中用4个uint8_t获取这四个字节,朂后用float表示出来
  1. //获取数据中断处理函数

这个是浮点数的表示形式,123.456按IEEE754的规范表示成十六进制就是42 F6 E9 79。

然后使用串口程序发送给STM32:


a. 浮点数昰近似表示所以你看STM32解析的是123.456001,而不是精确的123.456这并不违反IEEE 754标准,尤其是涉及到最后一个bit的四舍五入方法在IEEE 754 中并没有明确规定。
b. 字节順序和对齐你所有的工作只是定义好联合体,然后填充好联合体STM32会自动替你完成转换。不过需要注意的是一些上位机采用的是大端對齐的方式, 发送的字节顺序会相反

2. 字符串方式 如果是字符串或者其他方式发送,那就可以自定义一套转换机制甚至你的上位机在发送2/5的分数,或者40%这样的字符串都可以解析为0.4的浮点数,这种方式的灵活度非常高但是对编程要求更复杂,而且相对而言比较占用MCU的CPU時间和Flash。

我要回帖

更多关于 串口助手发送和单片机发送区别 的文章

 

随机推荐