【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)
后续继续补充......
其他笔记跳转链接:【CubeMX-HAL库】STM32H743—学习笔记
一、工程创建
本实验通过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…...
vue3 点击图标从相册选择二维码图片,并使用jsqr解析二维码(含crypto-js加密解密过程)
vue3 点击图标从相册选择二维码图片,并使用jsqr解析二维码(含crypto-js加密解密过程) 1.安装 jsqr 和 crypto-js npm install -d jsqr npm install crypto-js2.在util目录下新建encryptionHelper.js文件,写加密解密方法。 // e…...
kafka 3.5.0 raft协议安装
前言 最近做项目,需要使用kafka进行通信,且只能使用kafka,笔者没有测试集群,就自己搭建了kafka集群,实际上笔者在很早之前就搭建了,因为当时还是zookeeper(简称ZK)注册元数据&#…...
用Kibana实现Elasticsearch索引的增删改查:实战指南
在大数据时代,Elasticsearch(简称 ES)和 Kibana 作为强大的数据搜索与可视化工具,受到了众多开发者的青睐。Kibana 提供了一个直观的界面,可以方便地对 Elasticsearch 中的数据进行操作。本文将详细介绍如何使用 Kiban…...
Redis基础笔记
一、基础知识 连接方式 CLI (Command Line Interface)API (Application Programming Interface)GUI (Graphical User Interface) 启动 redis-server连接到Redis(Redis CLI Client) redis redis-cli telnet 127.0.0.1 6379退出 quit/exit查看过期时…...
前后端服务配置
1、安装虚拟机(VirtualBox或者vmware),在虚拟机上配置centos(选择你需要的Linux版本),配置如nginx服务器等 1.1 VMware 下载路径Sign In注册下载 1.2 VirtualBox 下载路径https://www.virtualbox.org/wiki/Downloads 2、配置服…...
springboot 事务管理
在Spring Boot中,事务管理是通过Spring框架的事务管理模块来实现的。Spring提供了声明式事务管理和编程式事务管理两种方式。通常,我们使用声明式事务管理,因为它更简洁且易于维护。 1. 声明式事务管理 声明式事务管理是通过注解来实现的。…...
基于Typescript,使用Vite构建融合Vue.js的Babylon.js开发环境
一、创建Vite项目 使用Vite初始化一个VueTypeScript项目: npm create vitelatest my-babylon-app -- --template vue-ts cd my-babylon-app npm create vitelatest my-babylon-app -- --template vue-ts 命令用于快速创建一个基于 Vite 的 Vue TypeScript 项目。…...
在阿里云ECS上一键部署DeepSeek-R1
DeepSeek-R1 是一款开源模型,也提供了 API(接口)调用方式。据 DeepSeek介绍,DeepSeek-R1 后训练阶段大规模使用了强化学习技术,在只有极少标注数据的情况下提升了模型推理能力,该模型性能对标 OpenAl o1 正式版。DeepSeek-R1 推出…...
git SourceTree 使用
Source Tree 使用原理 文件的状态 创建仓库和提交 验证 再克隆的时候发发现一个问题,就是有一个 这个验证,起始很简单 就是 gitee 的账号和密码,但是要搞清楚的是账号不是名称,我之前一直再使用名称登录老是出问题 这个很简单的…...
游戏引擎学习第94天
仓库:https://gitee.com/mrxiao_com/2d_game_2 回顾上周的渲染器工作 完成一款游戏的开发,完全不依赖任何库和引擎,这样我们能够全面掌握游戏的开发过程,确保没有任何细节被隐藏。我们将深入探索每一个环节,犹如拿着手电筒翻看床…...
win32汇编环境,结构体的使用示例二
;运行效果 ;win32汇编环境,结构体的使用示例二 ;举例说明结构体的定义,如何访问其中的成员,使用assume指令指向某个结构体,计算结构数组所需的偏移量得到某个成员值等 ;直接抄进RadAsm可编译运行。重要部分加备注。 ;下面为asm文件 ;>>…...
DeepSeek从入门到精通教程PDF清华大学出版
DeepSeek爆火以来,各种应用方式层出不穷,对于很多人来说,还是特别模糊,有种雾里看花水中望月的感觉。 最近,清华大学新闻与传播学院新媒体研究中心,推出了一篇DeepSeek的使用教程,从最基础的是…...
【PDF提取内容】如何批量提取PDF里面的文字内容,把内容到处表格或者批量给PDF文件改名,基于C++的实现方案和步骤
以下分别介绍基于 C 批量提取 PDF 里文字内容并导出到表格,以及批量给 PDF 文件改名的实现方案、步骤和应用场景。 批量提取 PDF 文字内容并导出到表格 应用场景 文档数据整理:在处理大量学术论文、报告等 PDF 文档时,需要提取其中的关键信…...
SSA-TCN麻雀算法优化时间卷积神经网络时间序列预测未来Matlab实现
SSA-TCN麻雀算法优化时间卷积神经网络时间序列预测未来Matlab实现 目录 SSA-TCN麻雀算法优化时间卷积神经网络时间序列预测未来Matlab实现预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现SSA-TCN麻雀算法优化时间卷积神经网络时间序列预测未来(优…...
大模型推理——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…...
深度学习-神经机器翻译模型
以下为你介绍使用Python和深度学习框架Keras(基于TensorFlow后端)实现一个简单的神经机器翻译模型的详细步骤和代码示例,该示例主要处理英 - 法翻译任务。 1. 安装必要的库 首先,确保你已经安装了以下库: pip insta…...
Android Camera API 介绍
一 StreamConfigurationMap 1. StreamConfigurationMap 的作用 StreamConfigurationMap 是 Android Camera2 API 中的一个核心类,用于描述相机设备支持的输出流配置,包含以下信息: 支持的格式与分辨率:例如 YUV_420_888、JPEG、…...
大数据项目2:基于hadoop的电影推荐和分析系统设计和实现
前言 大数据项目源码资料说明: 大数据项目资料来自我多年工作中的开发积累与沉淀。 我分享的每个项目都有完整代码、数据、文档、效果图、部署文档及讲解视频。 可用于毕设、课设、学习、工作或者二次开发等,极大提升效率! 1、项目目标 本…...
Windows逆向工程入门之汇编环境搭建
公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 Visual Studio逆向工程配置 基础环境搭建 Visual Studio 官方下载地址安装配置选项(后期可随时通过VS调整) 使用C的桌面开发 拓展可选选项 MASM汇编框架 配置MASM汇编项目 创建新项目 选择空…...
gc buffer busy acquire导致的重大数据库性能故障
📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验 Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯…...
前端学习-页面加载事件和页面滚动事件(三十二)
目录 前言 页面加载事件和页面滚动事件 页面加载事件 load事件 语法 注意 DOMContentLoaded事件 语法 总结 页面加载事件有哪两个?如何添加? load 事件 DOMContentLoaded事件 页面滚动事件 存在原因 scroll监听整个页面滚动 页面滚动事件-获取位置 scrollLef…...
C++:将函数参数定义为const T的意义
C++很多函数的参数都会定义为const T&,那么这么做的意义是什么呢? 避免拷贝:通过引用传递参数而不是值传递,可以避免对象的拷贝,从而提高性能,特别是当对象较大时。 保护数据:使用const关键字可以防止函数修改传入的参数,确保数据的安全性和一致性。 对于保护数据这…...
Formily 如何进行表单验证
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
安宝特方案 | AR眼镜:远程医疗的“时空折叠者”,如何为生命争夺每一分钟?
行业痛点:当“千里求医”遇上“资源鸿沟” 20世纪50年代,远程会诊的诞生曾让医疗界为之一振——患者不必跨越山河,专家无需舟车劳顿,一根电话线、一张传真纸便能架起问诊的桥梁。然而,传统远程医疗的局限也日益凸显&a…...
使用git commit时‘“node“‘ 不是内部或外部命令,也不是可运行的程序
第一种: 使用git commit -m "xxx"时会报错,我看网上的方法是在命令行后面添加--no-verify:git commit -m "主题更新" --no-verify,但是不可能每次都添加。 最后解决办法是:使用git config --lis…...
Python分享20个Excel自动化脚本
在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式。通过Python,我们可以实现对Excel文件的各种自动化操作,提高工作效率。 本文将分享20个实用的Excel自动化脚本,以帮助新手小白更轻松地掌握这些技能。 1. Excel单…...
nodejs - vue 视频切片上传,本地正常,线上环境导致磁盘爆满bug
nodejs 视频切片上传,本地正常,线上环境导致磁盘爆满bug 原因: 然后在每隔一分钟执行du -sh ls ,发现文件变得越来越大,即文件下的mp4文件越来越大 最后导致磁盘直接爆满 排查原因 1、尝试将m3u8文件夹下的所有视…...
瑞友天翼应用虚拟化系统 GetPwdPolicy SQL注入漏洞复现
免责声明 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在使…...
【MySQL — 数据库基础】深入解析MySQL的聚合查询
1. 聚合查询 1.1 聚合函数 函数说明COUNT ( [DISTINCT] expr)返回查询到的数据的数量( 行数 )SUM ( [DISTINCT] expr)返回查询到的数据的总和,不是数字没有意义AVG ( [DISTINCT] expr)返回查询到的数据的平均值,不是数字没有意义MAX( [DISTINCT] expr)…...
