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

时间:2023-03-09 02:55:20
13-ESP8266 SDK开发基础入门篇--上位机串口控制 Wi-Fi输出PWM的占空比,IEEE754规约

https://www.cnblogs.com/yangfengwu/p/11100552.html

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

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

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

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

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

双击

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

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

textBox3.Text = trackBar1.Value.ToString();//显示当前滑动条的值

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

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

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

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

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

讲一个知识点

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

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

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

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

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

我直接说了

假设你要发送220.5

这样做

咱们新建一个data_dispose.h文件

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

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

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

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

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

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

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

现在看使用

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

我现在需要转化为220.5

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

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

举个例子:259

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

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

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

1*256 + 3 = 259

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

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

说个名词:大端模式

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

与之相反的是小端模式

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

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

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

然后提醒一下

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

STM32  是小端模式

电脑:小端模式

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

咱用的这个8266  小端模式

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

接着看

首先要记着

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

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

所以我自己写了个printf功能

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

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

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[];//缓存,如果发送的超过此数,请自行增大
va_start(ap,fmt);
vsprintf(string,fmt,ap);//此处也可以使用sprintf函数,用法差不多,稍加修改即可,此处略去
sendstring(string);
va_end(ap);
}

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

先打印看看

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

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

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

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

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

出来是 0xcd 0x4c 0xbe 0x43

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

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

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

其实测试大端 小端 很简单

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

你可以

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

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

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

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

其实只要知道就可以

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

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

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

https://www.cnblogs.com/yangfengwu/p/11104167.html