【CubeMX-HAL库】STM32F407—无刷电机学习笔记
目录
简介:
学习资料:
跳转目录:
一、工程创建
二、板载LED
三、用户按键
四、蜂鸣器
1.完整IO控制代码
五、TFT彩屏驱动
六、ADC多通道
1.通道确认
2.CubeMX配置
①开启对应的ADC通道
②选择规则组通道
③开启DMA
④开启ADC中断
3.KEIL配置
①内部温度传感器
②NTC热敏电阻
查表法计算NTC温度
公式法计算NTC温度
实际效果
③INA240A2电流传感器
4.完整ADC代码
①BSP_ADC.c
②BSP_ADC.h
七、SPI_NOR FLASH
八、SDIO_SD卡
九、I2C_AS5600编码器
1.Cube MX配置
2.KEIL配置
①AS5600.c
②AS5600.h
3.演示效果
简介:
本系列使用硬件:
1.核心板:【立创·天空星STM32F407VxT6】开发板
2.控制板:STM32天空星_无刷电机拓展板
3.电机:1806无刷云台电机
学习资料:
立创天空星STM32开发板资料
DENGFOC文档
LVGL官网
百问网-LVGL中文开发手册
跳转目录:
【CubeMX-HAL库】STM32F407—无刷电机学习笔记
【CubeMX-HAL库】STM32F407—无刷电机基础知识
【CubeMX-HAL库】STM32F407—无刷电机开环控制
【CubeMX-HAL库】STM32F407—无刷电机闭环控制(速度环,位置环,力矩环)
【CubeMX-HAL库】STM32F407—无刷电机电流闭环控制
【CubeMX-HAL库】STM32F407—无刷电机SVPWM控制
【CubeMX-HAL库】软件、硬件SPI+DMA驱动TFT彩屏(LVGL)
后续继续补充......
一、工程创建
本实验通过Cube MX配置使用Keil5编写程序代码。
①打开Cube MX创建新工程,在搜索框输入STM32F407ZET6选择对应芯片。
②在系统核心配置中选择RCC->打开外部时钟源HSE和LSE。
③在DEBUG栏中使能SW引脚。
④将时钟频率设置为168MHz。
⑤设置文件路径及工程名,配置生成Keil-MDK文件。
⑥ 选择复制必要的文件,并且’.c/.h‘独立分开后点击"GENERATE CODE"生成代码。
⑦打开生成的Keil工程,可以先将编码设置为UTF-8格式(LVGL中字库大部分为UTF-8编码,防止之后乱码),进入魔术棒勾选使用LIB库,选择对应的下载器并勾复位并运行,然后编译工程,顺便将部件框都拖到习惯的位置,编译成功后即可下载程序。
二、板载LED
通过原理图可知核心板上LED接在PB2引脚,高电平点亮。
#define LED_OFF HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET)
#define LED_ON HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_RESET)
#define LED HAL_GPIO_ReadPin(LED_GPIO_Port,LED_Pin)
#define LED_TOG HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin)
三、用户按键
由原理图可知,按键为PA0,拨动开关引脚分别为PD8,PD9,PD14。
CubeMX设置对应IO,并配置相应上拉下拉。
#define KEY_R HAL_GPIO_ReadPin(KEY_R_GPIO_Port,KEY_R_Pin)
#define KEY_D HAL_GPIO_ReadPin(KEY_D_GPIO_Port,KEY_D_Pin)
#define KEY_L HAL_GPIO_ReadPin(KEY_L_GPIO_Port,KEY_L_Pin)
#define KEY_UP HAL_GPIO_ReadPin(KEY_WKUP_GPIO_Port,KEY_WKUP_Pin)uint8_t key_scan(uint8_t mode)
{static uint8_t key = 1;if(mode)key = 1;if(key == 1 && (KEY_R == 0 || KEY_D == 0 || KEY_L == 0 || KEY_UP == 1)){key = 0;HAL_Delay(2);if(KEY_R == 0) return 1;else if(KEY_D == 0) return 2;else if(KEY_L == 0) return 3;else if(KEY_UP == 1) return 4;}else if(KEY_R == 1 && KEY_D == 1 && KEY_L == 1 && KEY_UP == 0)key = 1;return 0;
}
四、蜂鸣器
由原理图可知无源蜂鸣器在PB1,刚好在ITM3_CH4通道可使用PWM驱动。
CubeMX配置TIM3的CH4通道,使用2KHz频率驱动蜂鸣器。
#define BEEP_Init HAL_TIM_PWM_Start_IT(&htim3,TIM_CHANNEL_4)//2KHz NO Source BEEP
#define BEEP_ON TIM3->CCR4 = 50
#define BEEP_OFF TIM3->CCR4 = 100
1.完整IO控制代码
#ifndef __key_H__
#define __key_H__#include "main.h"#define BEEP_Init HAL_TIM_PWM_Start_IT(&htim3,TIM_CHANNEL_4)//2KHz NO Source BEEP
#define BEEP_ON TIM3->CCR4 = 50
#define BEEP_OFF TIM3->CCR4 = 100#define LED_OFF HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET)
#define LED_ON HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_RESET)
#define LED HAL_GPIO_ReadPin(LED_GPIO_Port,LED_Pin)
#define LED_TOG HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin)#define KEY_R HAL_GPIO_ReadPin(KEY_R_GPIO_Port,KEY_R_Pin)
#define KEY_D HAL_GPIO_ReadPin(KEY_D_GPIO_Port,KEY_D_Pin)
#define KEY_L HAL_GPIO_ReadPin(KEY_L_GPIO_Port,KEY_L_Pin)
#define KEY_UP HAL_GPIO_ReadPin(KEY_WKUP_GPIO_Port,KEY_WKUP_Pin)uint8_t key_scan(uint8_t mode)
{static uint8_t key = 1;if(mode)key = 1;if(key == 1 && (KEY_R == 0 || KEY_D == 0 || KEY_L == 0 || KEY_UP == 1)){key = 0;HAL_Delay(2);if(KEY_R == 0) return 1;else if(KEY_D == 0) return 2;else if(KEY_L == 0) return 3;else if(KEY_UP == 1) return 4;}else if(KEY_R == 1 && KEY_D == 1 && KEY_L == 1 && KEY_UP == 0)key = 1;return 0;
}#endif
五、TFT彩屏驱动
屏幕使用SPI+DMA驱动,背光引脚暂未使用调光设置没开启PWM。
详细代码介绍可转【CubeMX-HAL库】软件、硬件SPI+DMA驱动TFT彩屏(LVGL)
六、ADC多通道
1.通道确认
由原理图可知,我们本次需要采集的ADC主要有两个三项电流部分、NTC控制板温度、芯片内部温度。
2.CubeMX配置
①开启对应的ADC通道
②选择规则组通道
③开启DMA
④开启ADC中断
可进行DMA采集一定次数之后,在中断中进行滤波。
3.KEIL配置
①内部温度传感器
#define Vsense 0.76f //温度传感器在25℃时的电压值
#define Avg_Slope 0.0025f //温度与Vsense曲线的平均斜率
float ADC_Get_MCU_Temperature(void)//获取内部温度传感器温度
{float adc_vol,temp;adc_vol = ADC_T * 3.3f / 4096;temp = (adc_vol - Vsense) / Avg_Slope + 25;return temp;
}
②NTC热敏电阻
本次NTC使用10K ±1%精度的电阻,
由原理图中的NTC电路,推算采集的电压值,然后在反推当前NTC的阻值。(下面3.3V改为5V)
(当10K在下,NTC在上时计算如下:)
查表法计算NTC温度
#define data0 28017
#define data1 26826
#define data2 25697
#define data3 24629
#define data4 23618
#define data5 22660
#define data6 21752
#define data7 20892
#define data8 20075
#define data9 19299
#define data10 18560
#define data11 18482
#define data12 18149
#define data13 17632
#define data14 16992
#define data15 16280
#define data16 15535
#define data17 14787
#define data18 14055
#define data19 13354
#define data20 12690
#define data21 12068
#define data22 11490
#define data23 10954
#define data24 10458
#define data25 10000
#define data26 9576
#define data27 9184
#define data28 8819
#define data29 8478
#define data30 8160
#define data31 7861
#define data32 7579
#define data33 7311
#define data34 7056
#define data35 6813
#define data36 6581
#define data37 6357
#define data38 6142
#define data39 5934
#define data40 5734
#define data41 5541
#define data42 5353
#define data43 5173
#define data44 4998
#define data45 4829
#define data46 4665
#define data47 4507
#define data48 4355
#define data49 4208
#define data50 4065
#define data51 3927
#define data52 3794
#define data53 3664
#define data54 3538
#define data55 3415
#define data56 3294
#define data57 3175
#define data58 3058
#define data59 2941
#define data60 2825
#define data61 2776
#define data62 2718
#define data63 2652
#define data64 2582
#define data65 2508
#define data66 2432
#define data67 2356
#define data68 2280
#define data69 2207
#define data70 2135
#define data71 2066
#define data72 2000
#define data73 1938
#define data74 1879
#define data75 1823
#define data76 1770
#define data77 1720
#define data78 1673
#define data79 1628
#define data80 1586
#define data81 1546
#define data82 1508
#define data83 1471
#define data84 1435
#define data85 1401
#define data86 1367
#define data87 1334
#define data88 1301
#define data89 1268
#define data90 1236
#define data91 1204
#define data92 1171
#define data93 1139
#define data94 1107
#define data95 1074
#define data96 1042
#define data97 1010const uint16_t NTC_Table[98]={data0,data1,data2,data3,data4,data5,data6,data7,data8,data9,data10,data11,data12,data13,data14,data15,data16,data17,data18,data19,data20,data21,data22,data23,data24,data25,data26,data27,data28,data29,data30,data31,data32,data33,data34,data35,data36,data37,data38,data39,data40,data41,data42,data43,data44,data45,data46,data47,data48,data49,data50,data51,data52,data53,data54,data55,data56,data57,data58,data59,data60,data61,data62,data63,data64,data65,data66,data67,data68,data69,data70,data71,data72,data73,data74,data75,data76,data77,data78,data79,data80,data81,data82,data83,data84,data85,data86,data87,data88,data89,data90,data91,data92,data93,data94,data95,data96,data97,
};uint16_t NTC_Get_Temp_Array(void)//NTC温度查表计算(放大了10倍)
{ float t;unsigned int dat,max,min,mid,da,j;t=ADC_NTC;t=t/4096;t=t*3300;//计算mV电压t=t/(5-t/1000); dat=t*10;da=dat;max=97;min=0;while(1) {mid=(max+min)/2;if(NTC_Table[mid]<da)max=mid;elsemin=mid;if((max-min)<=1)break;}if(max==min)da=min*10;else {j=(NTC_Table[min]-NTC_Table[max])/10;j=(NTC_Table[min]-da)/j;da=j;da=10*min+da; //采集的温度放大了10倍}return da;
}
公式法计算NTC温度
#include "math.h"
/*Rt = Rp *exp(B*(1/T1-1/T2))Rt 是热敏电阻在T1温度下的阻值;Rp是热敏电阻在T2常温下的标称阻值;exp是e的n次方,e是自然常数,就是自然对数的底数,近似等于2.7182818;B值是热敏电阻的重要参数,教程中用到的热敏电阻B值为3380;这里T1和T2指的是开尔文温度,T2是常温25℃,即(273.15+25)KT1就是所求的温度
*/
#define Rp 10000.0f/* 10K */
#define T2 (273.15f + 25.0f)/* T2 */
#define Bx 3380.0f/* B */
#define Ka 273.15f/*** @brief 计算温度值* @note 计算温度分为两步:1.根据ADC采集到的值计算当前对应的Rt2.根据Rt计算对应的温度值* @param para: 温度采集对应ADC通道的值(已滤波)* @retval 温度值*/
float NTC_Get_Temp_Count(uint16_t ADC_VALUE)//计算温度值
{float Rt;float temp;/*NTC在上,分压电阻在下时:Rt = 5.0 * 10000 / VTEMP - 10000,其中VTEMP就是温度检测通道采集回来的电压值,VTEMP = ADC值* 3.3/4096由此我们可以计算出当前Rt的值:Rt = 5.0f * 10000.0f / (para * 3.3f / 4096.0f ) - 10000.0f; NTC在下,分压电阻在上时:Rt = (10k * VTEMP) / (3.3 - VTEMP)Rt = 10000.0f * (para * 3.3f / 4096.0f) / (5.0f - (para * 3.3f / 4096.0f));*/ Rt = 10000.0f * (ADC_VALUE * 3.3f / 4096.0f) / (5.0f - (ADC_VALUE * 3.3f / 4096.0f));/*根据当前ADC值计算出Rt的值*//*根据当前Rt的值来计算对应温度值:Rt = Rp *exp(B*(1/T1-1/T2))*/temp = Rt / Rp;/* 解出exp(B*(1/T1-1/T2)) ,即temp = exp(B*(1/T1-1/T2)) */temp = log(temp);/* 解出B*(1/T1-1/T2) ,即temp = B*(1/T1-1/T2) */temp /= Bx;/* 解出1/T1-1/T2 ,即temp = 1/T1-1/T2 */temp += (1.0f / T2);/* 解出1/T1 ,即temp = 1/T1 */temp = 1.0f / (temp);/* 解出T1 ,即temp = T1 */temp -= Ka;/* 计算T1对应的摄氏度 */return temp;/* 返回温度值 */
}
实际效果
③INA240A2电流传感器
4.完整ADC代码
①BSP_ADC.c
②BSP_ADC.h
七、SPI_NOR FLASH
八、SDIO_SD卡
九、I2C_AS5600编码器
1.Cube MX配置
快速模式
2.KEIL配置
①AS5600.c
#include "AS5600.h"uint16_t AS5600_1_ReadRaw(void)//获取原始角度寄存器
{uint8_t data[2]={AS5600_RAW_ANGLE_H,0x00};HAL_I2C_Master_Transmit(&hi2c1,AS5600_ADDRESS_W,data,1,Time_Out);HAL_I2C_Master_Receive(&hi2c1,AS5600_ADDRESS_R,data,2,Time_Out);
// I2C_Start();
// I2C_SendByte(AS5600_ADDRESS_W);
// I2C_RecviveAck();
// I2C_SendByte(AS5600_RAW_ANGLE_H);
// I2C_RecviveAck();
//
// I2C_Start();
// I2C_SendByte(AS5600_ADDRESS_R);
// I2C_RecviveAck();
// Data_H = I2C_RecviveData();
// I2C_RecviveAck();
//
// I2C_Start();
// I2C_SendByte(AS5600_ADDRESS_R);
// I2C_RecviveAck();
// Data_L = I2C_RecviveData();
// I2C_SendAck(1);
// I2C_Stop();return (data[0] << 8) | data[1];
}float AS5600_1_GetAngle_0_2PI(void)//读取角度(0-2PI)
{float Angle = 0.0;Angle = AS5600_1_ReadRaw() * _2PI / 4096;
// Angle = (Angle/4096) * 360;return Angle;
}float AS5600_1_Full_Angle = 0.0;
float AS5600_1_Last_Angle = 0.0;
float AS5600_1_GetAngle_Cycles(void)//读取圈数
{float Now_Angle = 0.0;float Angle = AS5600_1_GetAngle_0_2PI();Now_Angle = Angle - AS5600_1_Last_Angle;if(fabs(Now_Angle) > (0.8f*2*PI)){AS5600_1_Full_Angle = AS5600_1_Full_Angle + ((Now_Angle > 0) ? -1 :1);}AS5600_1_Last_Angle = Angle;return (AS5600_1_Full_Angle * 2 * PI + AS5600_1_Last_Angle);
}uint16_t AS5600_2_ReadRaw(void)//获取原始角度寄存器
{uint8_t data[2]={AS5600_RAW_ANGLE_H,0x00};HAL_I2C_Master_Transmit(&hi2c2,AS5600_ADDRESS_W,data,1,Time_Out);HAL_I2C_Master_Receive(&hi2c2,AS5600_ADDRESS_R,data,2,Time_Out);return (data[0] << 8) | data[1];
}float AS5600_2_GetAngle_0_2PI(void)//读取角度(0-2PI)
{float Angle = 0.0;Angle = AS5600_2_ReadRaw() * _2PI / 4096;return Angle;
}float AS5600_2_Full_Angle = 0.0;
float AS5600_2_Last_Angle = 0.0;
float AS5600_2_GetAngle_Cycles(void)//读取圈数
{float Now_Angle = 0.0;float Angle = AS5600_2_GetAngle_0_2PI();Now_Angle = Angle - AS5600_2_Last_Angle;if(fabs(Now_Angle) > (0.8f*2*PI)){AS5600_2_Full_Angle = AS5600_2_Full_Angle + ((Now_Angle > 0) ? -1 :1);}AS5600_2_Last_Angle = Angle;return (AS5600_2_Full_Angle * 2 * PI + AS5600_2_Last_Angle);
}float Last_Vel_ts = 0.0;
float Vel_Last_Angle = 0.0;
float AS5600_2_GetVelocity(void)
{float dt = 0.0;float Vel_ts = SysTick -> VAL;if(Vel_ts < Last_Vel_ts) dt = (Last_Vel_ts - Vel_ts)/9*1e-6f;else dt = (0xFFFFFF - Vel_ts + Last_Vel_ts)/9*1e-6f;if(dt < 0.0001f) dt = 10000;float Vel_Angle = AS5600_2_GetAngle_Cycles();float dv = Vel_Angle - Vel_Last_Angle;float velocity = (Vel_Angle - Vel_Last_Angle)/dt;Last_Vel_ts = Vel_ts;Vel_Last_Angle = Vel_Angle;return velocity;
}
②AS5600.h
#ifndef __AS5600_H
#define __AS5600_H#include "main.h"
#include <stdio.h>
#include <math.h>
#include "i2c.h"#define Time_Out 100//超时时间#define AS5600_ADDRESS_W 0X6C//加上读写位(1位1/0)
#define AS5600_ADDRESS_R 0X6D
#define AS5600_RAW_ANGLE_H 0X0C//原始角度寄存器[11:8]共12位分辨率
#define AS5600_RAW_ANGLE_L 0X0D//原始角度寄存器[7:0]#define PI 3.14159265359f
#define _2PI 6.28318530718fuint16_t AS5600_1_ReadRaw(void);//获取原始角度寄存器
float AS5600_1_GetAngle_0_2PI(void);//读取角度(0-2PI)
float AS5600_1_GetAngle_Cycles(void);//读取圈数uint16_t AS5600_2_ReadRaw(void);//获取原始角度寄存器
float AS5600_2_GetAngle_0_2PI(void);//读取角度(0-2PI)
float AS5600_2_GetAngle_Cycles(void);//读取圈数
float AS5600_2_GetVelocity(void);#endif
3.演示效果
相关文章:
【CubeMX-HAL库】STM32F407—无刷电机学习笔记
目录 简介: 学习资料: 跳转目录: 一、工程创建 二、板载LED 三、用户按键 四、蜂鸣器 1.完整IO控制代码 五、TFT彩屏驱动 六、ADC多通道 1.通道确认 2.CubeMX配置 ①开启对应的ADC通道 ②选择规则组通道 ③开启DMA ④开启ADC…...
mysql8 sql语法错误,错误信息是怎么通过网络发送给客户端的,C++源码展示
在 MySQL 8 中,错误信息通过网络发送给客户端的过程涉及多个步骤,主要包括错误信息的生成、格式化、以及通过网络协议(如 TCP/IP)将错误信息发送给客户端。以下是详细的流程和相关代码分析: 1. 错误信息的生成 当 My…...
人工智能D* Lite 算法-动态障碍物处理、多步预测和启发式函数优化
在智能驾驶领域,D* Lite 算法是一种高效的动态路径规划算法,适用于处理环境变化时的路径重规划问题。以下将为你展示 D* Lite 算法的高级用法,包含动态障碍物处理、多步预测和启发式函数优化等方面的代码实现。 代码实现 import heapq impo…...
【学术投稿】第五届计算机网络安全与软件工程(CNSSE 2025)
重要信息 官网:www.cnsse.org 时间:2025年2月21-23日 地点:中国-青岛 简介 第五届计算机网络安全与软件工程(CNSSE 2025)将于2025年2月21-23日在中国-青岛举行。CNSSE 2025专注于计算机网络安全、软件工程、信号处…...
spring学习(spring 配置文件详解)
一 了解如何创建基本的spring 配置文件 步骤 1 导入 spring-context 依赖 <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context&l…...
创建一个javaWeb Project
文章目录 前言一、eclipse创建web工程二、web.xmlservlet.xml< mvc:annotation-driven/ > Spring MVC 驱动< context:component - scan >:扫描< bean > ... < /bean >< import > config/beans.xml beans.xmlmybatis.xml 前言 javaWe…...
大模型推理——MLA实现方案
1.整体流程 先上一张图来整体理解下MLA的计算过程 2.实现代码 import math import torch import torch.nn as nn# rms归一化 class RMSNorm(nn.Module):""""""def __init__(self, hidden_size, eps1e-6):super().__init__()self.weight nn.Pa…...
洛谷网站: P3029 [USACO11NOV] Cow Lineup S 题解
题目传送门: P3029 [USACO11NOV] Cow Lineup S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 前言: 这道题的核心问题是在一条直线上分布着不同品种的牛,要找出一个连续区间,使得这个区间内包含所有不同品种的牛,…...
DeepSeek-R1 云环境搭建部署流程
DeepSeek横空出世,在国际AI圈备受关注,作为个人开发者,AI的应用可以有效地提高个人开发效率。除此之外,DeepSeek的思考过程、思考能力是开放的,这对我们对结果调优有很好的帮助效果。 DeepSeek是一个基于人工智能技术…...
【Go语言快速上手】第二部分:Go语言进阶
文章目录 并发编程goroutine:创建和调度 goroutinechannel:无缓冲 channel、有缓冲 channel、select 语句无缓冲 channel有缓冲 channelselect 语句 sync 包:Mutex、RWMutex、WaitGroup 等同步原语Mutex:互斥锁RWMutex:…...
自定义多功能输入对话框:基于 Qt 打造灵活交互界面
一、引言 在使用 Qt 进行应用程序开发时,我们经常需要与用户进行交互,获取他们输入的各种信息。QInputDialog 是 Qt 提供的一个便捷工具,可用于简单的输入场景,但当需求变得复杂,需要支持更多类型的输入控件࿰…...
计算机毕业设计SparkStreaming+Kafka广告推荐系统 广告预测 广告数据分析可视化 广告爬虫 大数据毕业设计 深度学习 机器学习
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
企业FTP替代升级,实现传输大文件提升100倍!
随着信息技术的飞速发展,网络安全环境也变得越来越复杂。在这种背景下,传统的FTP(文件传输协议)已经很难满足现代企业对文件传输的需求了。FTP虽然用起来简单,但它的局限性和安全漏洞让它在面对高效、安全的数据交换时…...
盘姬工具箱:完全免费的电脑工具箱
今天给大家介绍一个非常好用的系统工具箱,里面内含100多个工具,完全免费使用,而且没有广告,非常的棒。 盘姬工具箱:完全免费的电脑工具箱 盘姬工具箱是一款完全免费的电脑工具箱,功能丰富且实用。软件下载并…...
【个人开发】macbook m1 Lora微调qwen大模型
本项目参考网上各类教程整理而成,为个人学习记录。 项目github源码地址:Lora微调大模型 项目中微调模型为:qwen/Qwen1.5-4B-Chat。 去年新发布的Qwen/Qwen2.5-3B-Instruct同样也适用。 微调步骤 step0: 环境准备 conda create --name fin…...
开源项目OpenIM单机部署生产环境异常处理及数据恢复
在生产环境中,通常会采用集群部署来保证组件和服务的高可用性。然而,在资源有限的情况下,一些开发者可能会选择在生产环境中进行单机部署(使用源码部署或docker容器)。本文将介绍在单机部署环境下如何进行数据备份、异…...
天津三石峰科技——汽车生产厂的设备振动检测项目案例
汽车产线有很多传动设备需要长期在线运行,会出现老化、疲劳、磨损等 问题,为了避免意外停机造成损失,需要加装一些健康监测设备,监测设备运 行状态。天津三石峰科技采用 12 通道振动信号采集卡(下图 1)对…...
MySQL-5.7.44安装(CentOS7)
目录 1、下载安装包并解压 2、创建数据目录与日志目录 3、设置环境变量 4、刷新环境变量 5、执行初始化 6、创建配置文件目录 7、新建配置文件 8、为安装目录赋予可执行权限 9、创建服务启动脚本 10、启动服务并将启动脚本加入开机自启动 11、查看服务状态 12、创建…...
什么是网络安全
1) 什么是网络安全 作为程序员,主要是面向产品的安全的问题。比如sql注入,xss,csrf,cookie窃取等等,都值得我们去思考。保证网站运行正常,客户数据安全。 2) sql注入 简单的说,就是利用表单提…...
即时通讯开源项目OpenIM配置离线推送全攻略
如何进行二次开发 如果您需要基于 OpenIM 开发新特性,首先要确定是针对业务侧还是即时通讯核心逻辑。 由于 OpenIM 系统本身已经做好了比较多的抽象,大部分聊天的功能已经具备了,不建议修改 IM 本身。 如果需要增加 IM 的能力,可以…...
快速上手——.net封装使用DeekSeek-V3 模型
📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,用爱发电,去丈量人心,是否能达到人机合一?开工大吉 新的一年就这么水灵灵的开始了,在这里,祝各位读者新春快乐,万事如意! 新年伊…...
【原创】Android Studio Ladybug 中Gradle配置
使用Android Studio创建项目后,由于需要下载的一下文件在国外,加上网速的问题,以及防火墙的问题,不少文件难以下载。常常导致项目创建后,要等很长时间,各种折腾,结果一个demo都跑不起来。 经过…...
Java版本与JDK版本
两者关联 Java版本指的Java语言和平台的版本,例如Java8、Java11、Java17等,每个版本会引入新特性、改进和修复。 JDK(Java Development Kit)版本则是开发工具包,包含编译器、调试器等工具,通常与Java版本对应,例如JDK…...
【GeeRPC】Day3:服务注册(Service Register)
Day3:服务注册(Service Register) 今天的任务是: 通过反射实现服务注册功能;在服务端实现服务调用,代码约 150 行; 结构体映射为服务 RPC 框架的一个基本能力是:像调用本地程序一…...
c/c++蓝桥杯经典编程题100道(17)二叉树遍历
二叉树遍历 ->返回c/c蓝桥杯经典编程题100道-目录 目录 二叉树遍历 一、题型解释 二、例题问题描述 三、C语言实现 解法1:递归前序遍历(难度★) 解法2:迭代中序遍历(难度★★) 解法3:…...
mysql系统库介绍,数据字典(介绍,存储方式,常见表,访问权限),系统表(介绍,不同功能的表)
目录 mysql系统库 介绍 数据字典 介绍 不同版本下的存储方式 常见的数据字典表 访问权限 系统表 介绍 权限授予系统表 对象信息系统表 服务器端帮助系统表 时区系统表 mysql系统库 介绍 MySQL 默认创建 的特殊数据库,主要用于存储服务器运行时所需的信…...
如何在macOS上安装Ollama
安装Ollama 安装Ollama的步骤相对简单,以下是基本的安装指南: 访问官方网站:打开浏览器,访问Ollama的官方网站。 下载安装包:根据你的操作系统,选择相应的安装包进行下载。 运行安装程序:下载完…...
【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter6-集合引用类型
六、集合引用类型 Object 是 ECMAScript 中最常用的类型之一。虽然 Object 的实例没有多少功能,但很适合存储和在应用程序间交换数据。 显式地创建 Object 的实例有两种方式。第一种是使用 new 操作符和 Object 构造函数。另一种方式是使用对象字面量(ob…...
Spring Boot Actuator使用
说明:本文介绍Spring Boot Actuator的使用,关于Spring Boot Actuator介绍,下面这篇博客写得很好,珠玉在前,我就不多介绍了。 Spring Boot Actuator 简单使用 项目里引入下面这个依赖 <!--Spring Boot Actuator依…...
SwanLab x verl:可视化LLM强化学习后训练教程
文章目录 介绍Verl和SwanLab1. 环境安装2. 使用方法3. 查看训练日志 介绍Verl和SwanLab verl 是一个灵活、高效且可用于生产环境的强化学习(RL)训练框架,专为大型语言模型(LLMs)的后训练设计。它由字节跳动火山引擎团…...
linux安装oracle19c
安装 安装前检查配置: 挂载50g盘: vgcreate oravg /dev/sdb lvcreate -L 49.8G -n oralv oravg lvscan mkfs.xfs /dev/oravg/oralv 查看uuid blkid 复制分区表 cp /etc/fstab /etc/fstab.bakvi /etc/fstab内容为: /dev/oravg/oralv /u01 xfs defau…...
半导体制造工艺讲解
目录 一、半导体制造工艺的概述 二、单晶硅片的制造 1.单晶硅的制造 2.晶棒的切割、研磨 3.晶棒的切片、倒角和打磨 4.晶圆的检测和清洗 三、晶圆制造 1.氧化与涂胶 2.光刻与显影 3.刻蚀与脱胶 4.掺杂与退火 5.薄膜沉积、金属化和晶圆减薄 6.MOSFET在晶圆表面的形…...
VMware下Linux和macOS安装VSCode一些总结
本文介绍VMware下Linux和macOS安装VSCode的一些内容,包括VSCode编译器显示中文以及安装.NET环境和Python环境。 VSCode下载地址:Download Visual Studio Code - Mac, Linux, Windows 一.Linux系统下 1.安装中文包 按 Ctrl Shift P 打开命令面板。输…...
STC51 单片机中,定时器 / 计数器相关的寄存器
在 STC51 单片机中,定时器 / 计数器相关的寄存器主要有定时器控制寄存器(TCON)、定时器工作方式寄存器(TMOD)以及定时器初值寄存器(TH0、TL0、TH1、TL1),下面详细解释这些寄存器各位…...
DeepSeek与人工智能的结合:探索搜索技术的未来
云边有个稻草人-CSDN博客 目录 引言 一、DeepSeek的技术背景 1.1 传统搜索引擎的局限性 1.2 深度学习在搜索中的优势 二、DeepSeek与人工智能的结合 2.1 自然语言处理(NLP) 示例代码:基于BERT的语义搜索 2.2 多模态搜索 示例代码&…...
OpenCV:图像修复
目录 简述 1. 原理说明 1.1 Navier-Stokes方法(INPAINT_NS) 1.2 快速行进方法(INPAINT_TELEA) 2. 实现步骤 2.1 输入图像和掩膜(Mask) 2.2 调用cv2.inpaint()函数 2.3 完整代码示例 2.4 运行结果 …...
解决基于FastAPI Swagger UI的文档打不开的问题
基于FastAPI Swagger UI的文档链接/docs和/redoc在没有外网的状态下无法打开,原因是Swagger依赖的JS和CSS来自CDN。 https://cdn.jsdelivr.net/npm/swagger-ui-dist5/swagger-ui-bundle.js https://cdn.jsdelivr.net/npm/swagger-ui-dist5/swagger-ui.css https://…...
前端开发知识梳理 - HTMLCSS
1. 盒模型 由内容区(content)、内边距(padding)、边框(border)和外边距(margin)组成。 (1)标准盒模型(box-sizing默认值, content-boxÿ…...
Win10环境使用ChatBox集成Deep Seek解锁更多玩法
Win10环境使用ChatBox集成Deep Seek解锁更多玩法 前言 之前部署了14b的Deep Seek小模型,已经验证了命令行及接口方式的可行性。但是纯命令行或者PostMan方式调用接口显然不是那么友好: https://lizhiyong.blog.csdn.net/article/details/145505686 纯…...
LM Studio 部署本地大语言模型
一、下载安装 1.搜索:lm studio LM Studio - Discover, download, and run local LLMs 2.下载 3.安装 4.更改成中文 二、下载模型(软件内下载) 1.选择使用代理,否则无法下载 2.更改模型下载目录 默认下载位置 C:\Users\用户名\.lmstudio\models 3.搜…...
Qt:QWidget核心属性
目录 QWidget核心属性 enab geometry WindowFrame的影响 windowTitle windowIcon qrc文件管理资源 windowOpacity cursor font toolTip focusPolicy styleSheet QWidget核心属性 在Qt中使用QWidget类表示"控件",如按钮、视图、输入框、滚动…...
unity学习29:摄像机camera相关skybox 和 Render Texture测试效果
目录 1 摄像机 1.1 每个Scene里都自带一个摄像机 camera 1.2 可以创建多个camera 1.3 下面先看backgroundtype: 2 backgroundtype: 天空盒 skybox 2.1 清除标志,清除:天空盒 自选天空盒 2.2 window /Asset Store 2.3 导入skybox 3 backgroundtype: 纯色…...
吴恩达深度学习——卷积神经网络的特殊应用
内容来自https://www.bilibili.com/video/BV1FT4y1E74V,仅为本人学习使用。 文章目录 人脸识别相关定义Similarity函数使用Siamese网络实现函数d使用Triplet损失学习参数 神经风格迁移深度卷积网络可视化神经风格迁移的代价函数内容损失函数风格损失函数 人脸识别 …...
go语言文件和目录
打开和关闭文件 os.Open()函数能够打开一个文件,返回一个*File 和一个 err。操作完成文件对象以后一定要记得关闭文件。 package mainimport ("fmt""os" )func main() {// 只读方式打开当前目录下的 main.go 文件file, err : os.Open(".…...
c++ 面试题
C 面试题通常涵盖基础知识、面向对象编程、内存管理、模板、STL(标准模板库)等方面。以下是一些常见的 C 面试题及其简要解答,供你参考: 1. C 基础知识 1.1 C 和 C 的区别是什么? C 是 C 的超集,支持面向…...
JAVA安全—FastJson反序列化利用链跟踪autoType绕过
前言 FastJson这个漏洞我们之前讲过了,今天主要是对它的链条进行分析一下,明白链条的构造原理。 Java安全—log4j日志&FastJson序列化&JNDI注入_log4j漏洞-CSDN博客 漏洞版本 1.2.24及以下没有对序列化的类做校验,导致漏洞产生 1.2.25-1.2.41增加了黑名单限制,…...
Java Stream API:高效数据处理的利器引言
Java Stream API:高效数据处理的利器引言 在 Java 编程中,数据处理是一项极为常见且关键的任务。传统的 for 循环在处理数据集合时,往往会导致代码变得冗长、复杂,这不仅增加了代码的编写难度,还降低了代码的可读性和…...
kubeadm构建k8s源码阅读环境
目标 前面看了minikube的源码了解到其本质是调用了kubeadm来启动k8s集群,并没有达到最初看代码的目的。 所以继续看看kubeadm的代码,看看能否用来方便地构建源码调试环境。 k8s源码编译 kubeadm源码在k8s源码库中,所以要先克隆k8s源码。之…...
Java架构设计亿级流量场景下的本地缓存方案选型
在当今的互联网时代,亿级流量的应用场景已经司空见惯。无论是大型电商平台的促销活动,还是热门社交应用的日常运营,都可能面临每秒数万甚至数十万的请求流量。在这样的高并发、高流量场景下,系统的性能和稳定性面临着巨大的挑战。…...
ChatGPT怎么回事?
纯属发现,调侃一下~ 这段时间deepseek不是特别火吗,尤其是它的推理功能,突发奇想,想用deepseek回答一些问题,回答一个问题之后就回复服务器繁忙(估计还在被攻击吧~_~) 然后就转向了GPT…...