STM32外设应用技术博文:基于UART的温度传感器数据采集

在这里插入图片描述

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:Java案例分享专栏
✨特色专栏:国学周更-心性养成之路
🥭本文内容:STM32外设应用技术博文:基于UART的温度传感器数据采集

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

文章目录

    • 引言
    • 硬件环境
      • 1. 硬件组成
        • 1.1 STM32开发板
        • 1.2 温度传感器
        • 1.3 USB转TTL模块
        • 1.4 其他配件
      • 2. 连接方式
        • 2.1 DS18B20与STM32的连接
        • 2.2 USB转TTL模块与STM32的连接
      • 3. 硬件布局示意图
      • 4. 注意事项
    • 软件环境
      • 1. 开发工具
        • 1.1 STM32CubeIDE
        • 1.2 STM32CubeMX
      • 2. 项目设置
        • 2.1 创建新项目
        • 2.2 外设配置
        • 2.3 生成代码
      • 3. 编写代码
        • 3.1 代码结构
        • 3.2 代码实现
      • 4. 调试工具
        • 4.1 串口监视器
        • 4.2 调试器
      • 5. 注意事项
    • 代码实现
      • 1. 初始化UART和GPIO
        • 1.1 包含头文件
        • 1.2 UART和GPIO初始化函数
      • 2. 温度读取函数
      • 3. 数据发送
      • 4. 完整代码示例
      • 5. 注意事项
    • 结论
      • 1. 项目总结
      • 2. 技术优势
      • 3. 应用前景
      • 4. 未来工作
      • 5. 总结

引言

随着物联网(IoT)和智能设备的快速发展,嵌入式系统在各个领域的应用越来越广泛。STM32系列微控制器因其高性能、低功耗和丰富的外设接口,成为了开发者的热门选择。STM32不仅支持多种通信协议,还具备强大的处理能力,能够满足复杂应用的需求。

在众多外设中,UART(通用异步收发传输器)是最常用的串行通信接口之一。它的简单性和灵活性使得UART在微控制器与其他设备(如传感器、模块和计算机)之间的通信中得到了广泛应用。通过UART,开发者可以轻松实现数据的发送和接收,进行实时监控和数据采集。

本博文将围绕STM32的UART外设,结合具体案例,展示如何通过UART接口实现温度传感器的数据采集。我们将使用DS18B20温度传感器作为示例,介绍其基本原理、连接方式以及如何通过STM32进行数据读取和传输。通过这个案例,读者将能够深入理解STM32外设的应用,并掌握UART通信的基本操作。

在实际应用中,温度监测是许多系统的基本功能之一,如环境监测、智能家居和工业控制等。通过STM32与温度传感器的结合,开发者可以构建出高效、可靠的温度监测系统,为后续的数据处理和分析提供基础。希望通过本博文的介绍,能够激发读者对STM32外设应用的兴趣,并为他们的项目提供实用的参考和指导。

硬件环境

在进行STM32外设应用开发时,硬件环境的选择和配置至关重要。以下是本案例中所需的硬件组件的详细阐述。

1. 硬件组成

1.1 STM32开发板
  • 型号:STM32F103C8T6
  • 特点
    • 采用ARM Cortex-M3内核,主频高达72MHz。
    • 具有64KB的闪存和20KB的SRAM,适合中小型应用。
    • 提供丰富的外设接口,包括GPIO、UART、I2C、SPI等,方便与各种传感器和模块连接。
1.2 温度传感器
  • 型号:DS18B20
  • 特点
    • 数字温度传感器,具有较高的精度(±0.5°C)。
    • 采用单总线接口,支持多点连接,多个DS18B20可以共享同一数据线。
    • 工作温度范围广,从-55°C到+125°C,适合多种环境监测应用。
1.3 USB转TTL模块
  • 型号:FTDI FT232或CP2102
  • 特点
    • 用于将STM32的UART信号转换为USB信号,方便与计算机进行通信。
    • 提供调试功能,可以通过串口监视器查看STM32发送的数据。
    • 具有简单的接线方式,通常只需连接TX、RX、GND和VCC。
1.4 其他配件
  • 跳线:用于连接各个模块和开发板,确保信号的稳定传输。
  • 面包板:用于搭建原型电路,方便进行硬件连接和调试。

2. 连接方式

2.1 DS18B20与STM32的连接
  • VCC引脚:连接到STM32的3.3V引脚,提供电源。
  • GND引脚:连接到STM32的GND引脚,形成电路的地。
  • 数据引脚:连接到STM32的某个GPIO引脚(如PA0),用于数据传输。
2.2 USB转TTL模块与STM32的连接
  • TX引脚:连接到STM32的RX引脚,接收STM32发送的数据。
  • RX引脚:连接到STM32的TX引脚,发送数据到STM32。
  • GND引脚:连接到STM32的GND引脚,确保信号的共地。
  • VCC引脚:可选,连接到STM32的3.3V引脚,为USB转TTL模块供电。

3. 硬件布局示意图

在实际搭建过程中,可以参考以下连接示意图(请根据具体硬件调整):

STM32F103C8T6          DS18B20
-----------------      ----------------
|               |      |              |
|   VCC ------->|----->| VCC          |
|   GND ------->|----->| GND          |
|   PA0 ------->|----->| Data         |
|               |      |              |
-----------------      ----------------

STM32F103C8T6          USB转TTL模块
-----------------      ----------------
|               |      |              |
|   TX -------> |----->| RX           |
|   RX <------- |<-----| TX           |
|   GND ------->|----->| GND          |
|               |      |              |
-----------------      ----------------

4. 注意事项

  • 电源电压:确保DS18B20和STM32的供电电压一致,通常为3.3V,避免损坏组件。
  • 数据线拉高:在DS18B20的数据引脚上添加一个4.7kΩ的上拉电阻,以确保数据传输的稳定性。
  • 接线牢固:在面包板上连接时,确保所有连接牢固,避免因接触不良导致的通信失败。

软件环境

在进行STM32外设应用开发时,软件环境的配置和选择同样重要。以下是本案例中所需的软件工具和配置的详细阐述。

1. 开发工具

1.1 STM32CubeIDE
  • 简介:STM32CubeIDE是STMicroelectronics提供的集成开发环境,基于Eclipse平台,支持STM32系列微控制器的开发。
  • 特点
    • 提供代码编辑、编译、调试等一体化功能,简化开发流程。
    • 集成了STM32CubeMX,方便进行外设配置和代码生成。
    • 支持多种编译器,如GCC和IAR,适合不同开发需求。
1.2 STM32CubeMX
  • 简介:STM32CubeMX是一个图形化配置工具,帮助开发者快速配置STM32微控制器的外设和时钟。
  • 特点
    • 通过图形界面配置GPIO、UART、I2C等外设,生成初始化代码。
    • 支持时钟树配置,确保系统时钟的稳定性。
    • 提供中间件支持,如FreeRTOS、USB等,方便开发复杂应用。

2. 项目设置

2.1 创建新项目
  1. 打开STM32CubeMX,选择“新建项目”。
  2. 选择目标微控制器,如STM32F103C8T6,点击“下一步”。
  3. 配置引脚
    • 在“Pinout & Configuration”中,选择UART1并配置为“异步模式”。
    • 配置PA0为GPIO,用于连接DS18B20的数据引脚。
2.2 外设配置
  1. UART配置

    • 在“Configuration”选项中,设置UART的波特率为115200,数据位为8位,停止位为1位,无奇偶校验。
    • 启用中断(可选),以便在接收数据时触发中断处理。
  2. GPIO配置

    • 配置PA0为推挽输出,确保与DS18B20的数据引脚连接稳定。
2.3 生成代码
  • 点击“Project”菜单,设置项目名称和保存路径,选择“STM32CubeIDE”作为工具链。
  • 点击“生成代码”,STM32CubeMX将自动生成初始化代码和项目结构。

3. 编写代码

3.1 代码结构

在STM32CubeIDE中,生成的项目结构通常包括以下几个重要文件:

  • main.c:主程序文件,包含主循环和外设初始化代码。
  • stm32f1xx_hal_conf.h:HAL库配置文件,包含外设的初始化和配置函数。
  • stm32f1xx_it.c:中断处理函数文件(如果启用中断)。
3.2 代码实现

main.c中,添加初始化UART和GPIO的代码,并实现温度读取和数据发送的逻辑。具体代码实现可参考前文中的代码示例。

4. 调试工具

4.1 串口监视器
  • 工具:可以使用如PuTTY、Tera Term或Arduino Serial Monitor等串口监视器。
  • 功能:用于接收STM32通过UART发送的数据,方便调试和验证程序的正确性。
  • 设置:确保串口监视器的波特率与STM32的UART配置一致(如115200),并选择正确的COM端口。
4.2 调试器
  • 工具:ST-LINK/V2或其他兼容的调试器。
  • 功能:用于单步调试、设置断点和查看变量值,帮助开发者快速定位问题。
  • 设置:在STM32CubeIDE中配置调试器,确保与开发板连接正常。

5. 注意事项

  • 库文件:确保在项目中包含STM32 HAL库,以便使用HAL函数进行外设操作。
  • 中断优先级:如果使用中断,合理设置中断优先级,避免数据丢失。
  • 编译选项:根据项目需求,选择合适的编译选项,确保代码的优化和稳定性。

代码实现

在本节中,我们将详细阐述如何在STM32上实现温度传感器数据采集的代码。代码实现包括外设初始化、温度读取、数据发送等步骤。我们将逐步分析每个部分的功能和实现方式。

1. 初始化UART和GPIO

首先,我们需要在main.c中初始化UART和GPIO,以便与DS18B20温度传感器进行通信。

1.1 包含头文件

在文件开头,确保包含必要的头文件:

#include "main.h"
#include "stm32f1xx_hal.h"
#include <stdio.h>
#include <string.h>
1.2 UART和GPIO初始化函数

main.c中,添加UART和GPIO的初始化函数:

UART_HandleTypeDef huart1;

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);

int main(void) {
    HAL_Init(); // 初始化HAL库
    SystemClock_Config(); // 配置系统时钟
    MX_GPIO_Init(); // 初始化GPIO
    MX_USART1_UART_Init(); // 初始化UART

    while (1) {
        // 主循环
    }
}

static void MX_USART1_UART_Init(void) {
    huart1.Instance = USART1;
    huart1.Init.BaudRate = 115200; // 设置波特率
    huart1.Init.WordLength = UART_WORDLENGTH_8B; // 数据位
    huart1.Init.StopBits = UART_STOPBITS_1; // 停止位
    huart1.Init.Parity = UART_PARITY_NONE; // 无奇偶校验
    huart1.Init.Mode = UART_MODE_TX_RX; // 发送和接收模式
    huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; // 无硬件流控制
    huart1.Init.OverSampling = UART_OVERSAMPLING_16; // 过采样
    HAL_UART_Init(&huart1); // 初始化UART
}

static void MX_GPIO_Init(void) {
    __HAL_RCC_GPIOA_CLK_ENABLE(); // 启用GPIOA时钟
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = GPIO_PIN_0; // DS18B20数据引脚
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出
    GPIO_InitStruct.Pull = GPIO_NOPULL; // 无上拉或下拉
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 低速
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIO
}

2. 温度读取函数

接下来,我们需要实现一个函数来读取DS18B20的温度数据。由于DS18B20使用单总线协议,具体的读取逻辑较为复杂,以下是一个简化的示例:

float Read_Temperature(void) {
    // 这里添加DS18B20的读取逻辑
    // 假设返回一个模拟的温度值
    return 25.0; // 示例温度
}

在实际应用中,您需要实现DS18B20的单总线协议,包括初始化、发送命令、读取数据等步骤。可以参考相关的库或文档来实现这一部分。

3. 数据发送

在主循环中,我们将定期读取温度并通过UART发送数据。以下是实现代码:

while (1) {
    float temperature = Read_Temperature(); // 读取温度
    char buffer[50]; // 数据缓冲区
    snprintf(buffer, sizeof(buffer), "Temperature: %.2f C\r\n", temperature); // 格式化字符串
    HAL_UART_Transmit(&huart1, (uint8_t*)buffer, strlen(buffer), HAL_MAX_DELAY); // 发送数据
    HAL_Delay(1000); // 每秒发送一次
}

4. 完整代码示例

将上述代码整合,完整的main.c文件如下:

#include "main.h"
#include "stm32f1xx_hal.h"
#include <stdio.h>
#include <string.h>

UART_HandleTypeDef huart1;

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
float Read_Temperature(void);

int main(void) {
    HAL_Init(); // 初始化HAL库
    SystemClock_Config(); // 配置系统时钟
    MX_GPIO_Init(); // 初始化GPIO
    MX_USART1_UART_Init(); // 初始化UART

    while (1) {
        float temperature = Read_Temperature(); // 读取温度
        char buffer[50]; // 数据缓冲区
        snprintf(buffer, sizeof(buffer), "Temperature: %.2f C\r\n", temperature); // 格式化字符串
        HAL_UART_Transmit(&huart1, (uint8_t*)buffer, strlen(buffer), HAL_MAX_DELAY); // 发送数据
        HAL_Delay(1000); // 每秒发送一次
    }
}

static void MX_USART1_UART_Init(void) {
    huart1.Instance = USART1;
    huart1.Init.BaudRate = 115200; // 设置波特率
    huart1.Init.WordLength = UART_WORDLENGTH_8B; // 数据位
    huart1.Init.StopBits = UART_STOPBITS_1; // 停止位
    huart1.Init.Parity = UART_PARITY_NONE; // 无奇偶校验
    huart1.Init.Mode = UART_MODE_TX_RX; // 发送和接收模式
    huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; // 无硬件流控制
    huart1.Init.OverSampling = UART_OVERSAMPLING_16; // 过采样
    HAL_UART_Init(&huart1); // 初始化UART
}

static void MX_GPIO_Init(void) {
    __HAL_RCC_GPIOA_CLK_ENABLE(); // 启用GPIOA时钟
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = GPIO_PIN_0; // DS18B20数据引脚
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出
    GPIO_InitStruct.Pull = GPIO_NOPULL; // 无上拉或下拉
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 低速
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIO
}

float Read_Temperature(void) {
    // 这里添加DS18B20的读取逻辑
    return 25.0; // 示例温度
}

5. 注意事项

  • 温度读取逻辑:实际的温度读取逻辑需要实现DS18B20的单总线协议,确保正确读取温度数据。
  • 数据格式:确保发送的数据格式符合接收端的解析要求。
  • 延时设置:根据实际需求调整发送数据的频率,避免过于频繁的发送导致数据丢失。

通过以上详细的代码实现,读者可以清晰地理解如何在STM32上实现温度传感器的数据采集和UART通信。这为后续的项目开发和功能扩展提供了基础。

结论

通过本博文,我们深入探讨了如何利用STM32微控制器和UART外设实现温度传感器的数据采集。以下是对整个过程的总结和未来展望。

1. 项目总结

在本案例中,我们使用了STM32F103C8T6开发板和DS18B20温度传感器,成功实现了以下功能:

  • 外设初始化:通过STM32CubeMX配置UART和GPIO,生成初始化代码,确保硬件能够正常工作。
  • 温度读取:实现了一个简化的温度读取函数,尽管在实际应用中需要更复杂的单总线协议,但我们提供了一个基础框架。
  • 数据传输:通过UART将温度数据发送到PC,利用串口监视器进行实时监控,验证了数据传输的正确性。

2. 技术优势

  • 高效性:STM32的高性能处理能力和丰富的外设接口,使得数据采集和处理变得高效且灵活。
  • 易于扩展:通过UART接口,系统可以轻松与其他设备(如Wi-Fi模块、蓝牙模块等)进行通信,扩展功能。
  • 实时性:温度数据的实时采集和传输,使得系统能够快速响应环境变化,适用于智能家居、工业监控等应用场景。

3. 应用前景

随着物联网和智能设备的普及,温度监测系统的需求日益增长。基于STM32的温度监测解决方案可以广泛应用于以下领域:

  • 环境监测:实时监测室内外温度,提供数据支持,帮助用户优化环境条件。
  • 智能家居:集成到智能家居系统中,实现自动调节空调、暖气等设备的功能。
  • 工业控制:在工业设备中监测温度,确保设备在安全范围内运行,防止过热等故障。

4. 未来工作

尽管本案例提供了一个基础的温度监测系统,但仍有许多方面可以进一步改进和扩展:

  • 完善温度读取逻辑:实现完整的DS18B20单总线协议,确保准确读取温度数据。
  • 数据存储:将温度数据存储到SD卡或EEPROM中,以便后续分析和记录。
  • 网络功能:通过Wi-Fi或蓝牙模块,将数据上传到云端,实现远程监控和管理。
  • 用户界面:开发图形化用户界面(GUI),使用户能够更直观地查看和分析温度数据。

5. 总结

本博文展示了STM32外设应用的基本思路,通过具体的案例和代码实现,帮助读者理解如何利用STM32进行温度传感器的数据采集。希望这篇文章能够激发读者的兴趣,鼓励他们在嵌入式系统开发中探索更多的可能性。通过不断学习和实践,读者将能够构建出更复杂、更智能的系统,为物联网的发展贡献力量。


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/895640.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入理解Redis锁与Backoff重试机制在Go中的实现

文章目录 流程图Redis锁的深入实现Backoff重试策略的深入探讨结合Redis锁与Backoff策略的高级应用具体实现结论 在构建分布式系统时&#xff0c;确保数据的一致性和操作的原子性是至关重要的。Redis锁作为一种高效且广泛使用的分布式锁机制&#xff0c;能够帮助我们在多进程或分…

构建高效在线考试平台:Spring Boot与JavaWeb的融合

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理基于JavaWeb技术的在线考试系统设计与实现…

汽车零部件行业CRM应用数字化解决方案解析

1.行业背景与挑战分析 近年来&#xff0c;随着国家对新能源汽车行业的大力支持&#xff0c;国内汽车产业不仅在国内市场实现了弯道超车&#xff0c;而且新能源汽车的海外出口也开拓了新的市场&#xff0c;为自主品牌的新能源战略贡献了新的增长点&#xff1b;这一迅猛发展的趋…

Pollard‘s p-1算法

概述 光滑数 (Smooth number)&#xff1a;指可以分解为多个小素数乘积的正整数 当p是N 的因数&#xff0c;并且p−1是光滑数&#xff0c;可以考虑使用Pollards p-1算法来分解N 当p是N的因数&#xff0c;并且p1是光滑数&#xff0c;可以考虑使用Williamss p1算法来分解N 这里…

打造卓越APP体验:13款界面设计软件推荐

你知道如何选择正确的UI设计软件吗&#xff1f;你知道设计美观的用户界面&#xff0c;及带来良好用户体验的APP&#xff0c;需要什么界面设计软件吗&#xff1f;基于APP界面的功能不同&#xff0c;选择的APP界面设计软件也会有所不同。然而&#xff0c;并不是要把所有APP界面设…

权限(补充)

在上一篇Linux权限&#xff08;想了解的可以点击看看哦&#xff09;中已经见识了一部分权限&#xff0c;但是少了很重要的一部分&#xff1a; 那就是用户之间的转换&#xff0c;文件读写的关系&#xff0c;这里就简单的介绍一些&#xff1b; 我们在Linux权限知道了目录权限的关…

无人机之放电速率篇

无人机的放电速率是指电池在一定时间内放出其储存电能的能力&#xff0c;这一参数对无人机的飞行时间、性能以及安全性都有重要影响。 一、放电速率的表示方法 放电速率通常用C数来表示。C数越大&#xff0c;表示放电速率越快。例如&#xff0c;一个2C的电池可以在1/2小时内放…

屏蔽小米电视广告的方法

小米电视那个广告&#xff0c;太多&#xff0c;时间太长&#xff0c;影响观看感受&#xff0c;经过处理&#xff0c;成功屏蔽了小米电视的广告&#xff0c;提升了观影体验。 手动添加AD域名到 hosts 列表 小米(红米)电视关闭开机AD屏蔽hosts方法。 在路由器的hosts中配置。 …

Redis --- 第四讲 --- 常用数据结构 --- Hash、List

一、Hash哈希类型的基本介绍。 哈希表&#xff1a;之前学过的所有数据结构中&#xff0c;最最重要的。 1、日常开发中&#xff0c;出场频率非常高。 2、面试中&#xff0c;非常重要的考点。 Redis自身已经是键值对结构了。Redis自身的键值对就是通过哈希的方式来组织的。把…

12月17-19日 | 2024南京软博会,持续升级中!

2024中国&#xff08;南京&#xff09;软件产业博览会&#xff08;简称“南京软博会”&#xff09;自2005年以来&#xff0c;已连续举办19年&#xff0c;集新品发布、产品交易、人才交流、项目对接等功能为一体&#xff0c;成为全国软件产业品牌展会和对外窗口。 今年是南京软…

ubuntu 安装keepalived+haproxy

一、安装keepalived sudo apt update sudo apt install keepalived sudo systemctl start keepalived sudo systemctl enable keepalived sudo systemctl status keepalived#配置Keepalived sudo cp /etc/keepalived/keepalived.conf.sample /etc/keepalived/keepalived.conf …

informer学习笔记

一、informer讲解 infomer 要解决的三大问题&#xff1a; Attention计算的更快Decoder要一次性输出所有预测堆叠encoder也要更快 1. Attention 在长序列中&#xff0c;并非每一个位置的Attention都重要&#xff0c;对于每一个Q来说&#xff0c;只有一小部分的K与其有较强的…

java互联网医院智能导诊系统源码,Uniapp前端开发框架,支持一次编写,多端运行

智慧导诊系统源码&#xff0c;java源码&#xff0c;大屏机自动导诊&#xff0c;互联网医院智能导诊系统源码 老是全身无力&#xff0c;挂什么科&#xff1f; 经常头痛&#xff0c;挂什么科&#xff1f; 总是失眠&#xff0c;又得挂哪个科&#xff1f; 世界上最遥远的距离再加…

企业内训|LLM大模型技术在金融领域的应用及实践-某商业银行分行IT团队

本企业培训是TsingtaoAI技术团队专们为某商业银行分行IT团队开发的LLM大模型技术课程。课程深入分析大模型在金融行业中的发展趋势、底层技术及应用场景&#xff0c;重点提升学员在大模型应用中的实际操作能力与业务场景适应力。通过对全球商用 LLM 产品及国内外技术生态的深度…

每天五分钟深度学习框架pytorch:基于pytorch搭建多变量回归模型

本文重点 前面我们学习了基于pytorch搭建多项式回归模型,我们也知道了它和多变量回归模型的区别,本文我们使用pytorch搭建多变量回归模型 模型搭建 class Multivariable_Regression(nn.Module):def __init__(self):super(Multivariable_Regression,self).__init__()self.po…

基于PHP+MySQL+Vue的网上订餐系统

摘要 本文介绍了一个基于PHPMySQLVue技术的网上订餐系统。该系统旨在为用户提供便捷的在线订餐服务&#xff0c;同时提高餐厅的运营效率。系统后端采用PHP语言开发&#xff0c;利用MySQL数据库进行数据存储与管理&#xff0c;实现了用户注册登录、菜品浏览、购物车管理、订单提…

hi3798mv100 linux 移植

# Linux开发环境搭建 ## uboot编译 1. 必须先安装gcc&#xff0c;要不然make 等命令无法使用 2. 配置arm 交叉编译链 # gcc sudo apt-get install gcc-9 gcc -v# 安装 Linaro gcc-arm-linux-gnueabihf&#xff0c;注意不是arm-linux-gnueabihf-gcc sudo apt-get install ar…

老机MicroServer Gen8再玩 OCP万兆光口+IT直通

手上有一台放了很久的GEN8微型服务器&#xff0c;放了很多年&#xff0c;具体什么时候买的我居然已经记不清了 只记得开始装修的时候搬家出去就没用了&#xff0c;结果搬出去有了第1个孩子&#xff0c;孩子小的时候也没时间折腾&#xff0c;等孩子大一点的时候&#xff0c;又有…

流量PID控制(开度前馈量计算+辅助PID)

和流体流速(瞬时流量)相关的计算请参考下面文章链接: 1、PLC通过伯努利方程近似计算水箱流量 PLC通过伯努利方程近似计算水箱流量(FC)-CSDN博客文章浏览阅读1.6k次。本文介绍了如何使用PLC通过伯努利方程近似计算水箱中的液体流量,主要涉及流量计算、模型验证、梯形图编程及…

【NLP】GloVe模型

一、Glove简介 GloVe (Global Vectors for Word Representation) 是一种基于词共现矩阵的词向量生成方法&#xff0c;由斯坦福大学的 Jeffrey Pennington、Richard Socher 和 Christopher D. Manning 提出。与 Word2Vec 不同&#xff0c;GloVe 通过全局统计信息&#xff08;词…