前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >13-ESP8266 SDK开发基础入门篇--上位机串口控制 Wi-Fi输出PWM的占空比,IEEE754规约

13-ESP8266 SDK开发基础入门篇--上位机串口控制 Wi-Fi输出PWM的占空比,IEEE754规约

作者头像
杨奉武
发布2019-07-03 11:50:09
7140
发布2019-07-03 11:50:09
举报
文章被收录于专栏:知识分享

https://cloud.tencent.com/developer/article/1451791

这节做个上位机控制Wi-Fi引脚输出的PWM占空比信号,灯的亮度就可以用上位机控制了

大家可以自己扩展程序控制舵机的旋转角度

 双击

代码语言:javascript
复制
textBox3.Text = trackBar1.Value.ToString();//显示当前滑动条的值

然后规定下协议  注意为了大家以后做项目的通用性  数据传输用

讲一个知识点

大家传输十进制数据怎么传输的,,传输浮点型数据怎么传输的  大家百度下IEEE754

 看一下用它做数据转换的妙用

我直接说了

假设你要发送220.5

这样做

咱们新建一个data_dispose.h文件

为了预防别人用我的源码在C++里面编译

代码语言:javascript
复制
typedef union Resolve//解析数据
{
    char  Data_Table[4];//16进制四字节表示形式
    float DataF;//浮点型
    long DataInt;//有符号整形
    unsigned long DatauInt;//无符号整形
}ResolveData;

现在看使用

假设我采集了仪器仪表  仪器仪表就是IEEE754规范 发过来的220.5的 浮点型数据   0x43  0x5C  0x80 0x00  

我现在需要转化为220.5

注意一件事情  0x43  0x5C  0x80 0x00   是高位数据在前

举个例子:259

化为16进制表示是  0x01  0x03      这样排序就是高位在前

16进制怎么转成259呢   就是   0x01==1    1乘于2的8次方  再  加上   0x03  就是  3

1*256 + 3 = 259

如果计算完以后内存里面是这样存储的    

说个名词:大端模式

如果数据的高位存储在了存储地址的低位   数据的低位存储在了存储地址的高位    -----名称:大端模式

与之相反的是小端模式

 数据的低位存储在了存储地址的低位   数据的高位存储在了存储地址的高位    -----名称:小端模式

如果你做过仪器仪表,或者用过仪器仪表  应该知道,工业里面经常用到

然后提醒一下

51单片机存储数据是大端模式

STM32  是小端模式

电脑:小端模式

手机:好像是大端模式...忘记了

咱用的这个8266  小端模式

有人可能会问,具体怎么看出来的....

接着看

首先要记着

注意一件事情  0x43  0x5C  0x80 0x00   是高位数据在前 低位数据在后

刚才我测试了下,官方给的printf不支持打印浮点数.......

所以我自己写了个printf功能

代码语言:javascript
复制
void sendstring(unsigned char *string)//此处*string相当于数组
{
    while(*string!='\0')//判断是否到字符串末尾
    {
        USART_SendData(UART0, *string);
        string++;
    }
}

void uart_printf(const char *fmt,...)//和printf一样使用
{
    va_list ap;
    char string[200];//缓存,如果发送的超过此数,请自行增大
    va_start(ap,fmt);
    vsprintf(string,fmt,ap);//此处也可以使用sprintf函数,用法差不多,稍加修改即可,此处略去
    sendstring(string);
    va_end(ap);
}

 先打印看看

现在咱 把浮点型的数据转16进制数组存储

出来是 0xcd 0x4c 0xbe 0x43 

由于8266是 小端模式  所以反着排的  低位在前 高位在后

上面主要说明的是 如何按照IEEE754规约 进行 16进制和浮点数的转化

其实测试大端 小端 很简单

你反正知道  259是   0x01  0x03   0x01是高位

你可以

 说明数据是低位存在低位  高位存在高位,所以是小端模式

其实只要知道就可以

真不行你解析的时候  一看解析不对颠倒一下

其余的还是放到下节吧,先消化消化

https://cloud.tencent.com/developer/article/1455500

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-06-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档