STM32——GPS模块(GY-NEO-6M)

1连接

1-1

使用 USB-TTL 工具,安装好驱动,可以在”设备管理器看到对应COM”按照如下链接测试模块: USB-TTL GPS 模块

3.3V--------------------------------->VCC

GND------------------------------>GND

RXD------------------------------>TXD

TXD------------------------------>RXD

1-2

GPS 模块                                    单片机

VCC----------------------------------- VCC(必须接)

GND-----------------------------------GND(必须接)

TXD-----------------------------------RXD(必须接)

RXD-----------------------------------TXD(可不接)

PPS------------------------------------某个 IO(可不接)

2指令

介绍

NMEA 0183是美国国家海洋电子协会(National Marine Electronics Association)为海用电子设备 制定的标准格式。目前业已成了GPS导航设备统一的RTCM(Radio Technical Commission for Maritime services)标准协议。 NMEA-0183协议采用ASCII码来传递GPS定位信息,我们称之为帧。 帧格式形如:$aaccc,ddd,ddd,…,ddd*hh(CR)(LF) 1、“$”:帧命令起始位 2、aaccc:地址域,前两位为识别符(aa),后三位为语句名(ccc) 3、ddd…ddd:数据 4、“*”:校验和前缀(也可以作为语句数据结束的标志) 5、hh:校验和(check sum),$与*之间所有字符ASCII码的校验和(各字节做异或运算,得到 校验和后,再转换16进制格式的ASCII字符) 6、(CR)(LF):帧结束,回车和换行符

 
3.2 指令讲解

 
3.2 指令讲解 1,$GPGGA(GPS定位信息,Global Positioning System Fix Data) 
$GPGGA语句的基本格式如下(其中M指单位M,hh指校验和,CR和LF代表回车换行,下同): 
$GPGGA,(1),(2),(3),(4),(5),(6),(7),(8),(9),M,(10),M,(11),(12)*hh(CR)(LF) 
(1)UTC时间,格式为hhmmss.ss; 
(2)纬度,格式为ddmm.mmmmm(度分格式); 
(3)纬度半球,N或S(北纬或南纬); 
(4)经度,格式为dddmm.mmmmm(度分格式); 
(5)经度半球,E或W(东经或西经); 
(6)GPS状态,0=未定位,1=非差分定位,2=差分定位; 
(7)正在使用的用于定位的卫星数量(00~12) 
(8)HDOP水平精确度因子(0.5~99.9) 
(9)海拔高度(-9999.9到9999.9米) 
(10)大地水准面高度(-9999.9到9999.9米) 
(11)差分时间(从最近一次接收到差分信号开始的秒数,非差分定位,此项为空) 
(12)差分参考基站标号(0000到1023,首位0也将传送,非差分定位,此项为空) 
举例如下: 
$GPGGA,023543.00,2308.28715,N,11322.09875,E,1,06,1.49,41.6,M,-5.3,M,,*7D 2,$GPGSA(当前卫星信息) 
$GPGSA语句的基本格式如下: 
$GPGSA,(1),(2),(3),(3),(3),(3),(3),(3),(3),(3),(3),(3),(3),(3),(4),(5),(6)*hh(CR)(LF) 
(1) 模式,M = 手动,A = 自动。 
(2) 定位类型,1=未定位,2=2D定位,3=3D定位。 
(3) 正在用于定位的卫星号(01~32) 
(4)  PDOP综合位置精度因子(0.5-99.9) 
(5) HDOP水平精度因子1(0.5-99.9) 
(6) VDOP垂直精度因子(0.5-99.9) 
举例如下: 
$GPGSA,A,3,26,02,05,29,15,21,,,,,,,2.45,1.49,1.94*0E 
注1:精度因子值越小,则准确度越高。 3,$GPGSV(可见卫星数,GPS Satellites in View) 
$GPGSV语句的基本格式如下: 
$GPGSV, (1),(2),(3),(4),(5),(6),(7),...,(4),(5),(6),(7)*hh(CR)(LF) 
(1)  GSV语句总数。 
(2)  本句GSV的编号。 
(3)  可见卫星的总数(00~12,前面的0也将被传输)。 
(4)  卫星编号(01~32,前面的0也将被传输)。 
(5)  卫星仰角(00~90度,前面的0也将被传输)。 
(6)  卫星方位角(000~359度,前面的0也将被传输) 
(7)  信噪比(00~99dB,没有跟踪到卫星时为空)。 
注:每条GSV语句最多包括四颗卫星的信息,其他卫星的信息将在下一条$GPGSV语句中输出。 
举例如下: 
$GPGSV,3,1,12,02,39,117,25,04,02,127,,05,40,036,24,08,10,052,*7E 
$GPGSV,3,2,12,09,35,133,,10,01,073,,15,72,240,22,18,05,274,*7B 
$GPGSV,3,3,12,21,10,316,31,24,16,176,,26,65,035,42,29,46,277,18*7A 4,$GPRMC(推荐定位信息,Recommended Minimum Specific GPS/Transit Data) 
$GPRMC语句的基本格式如下: 
$GPRMC,(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)*hh(CR)(LF) 
(1) UTC时间,hhmmss(时分秒) 
(2) 定位状态,A=有效定位,V=无效定位 
(3) 纬度ddmm.mmmmm(度分) 
(4) 纬度半球N(北半球)或S(南半球) 
(5) 经度dddmm.mmmmm(度分) 
(6) 经度半球E(东经)或W(西经) 
(7) 地面速率(000.0~999.9节) 
(8) 地面航向(000.0~359.9度,以真北方为参考基准) 
(9) UTC日期,ddmmyy(日月年) 
(10)磁偏角(000.0~180.0度,前导位数不足则补0) 
(11) 磁偏角方向,E(东)或W(西) 
(12) 模式指示(A=自主定位,D=差分,E=估算,N=数据无效) 
举例如下:  
$GPRMC,023543.00,A,2308.28715,N,11322.09875,E,0.195,,240213,,,A*78 5,$GPVTG(地面速度信息,Track Made Good and Ground Speed) 
$GPVTG语句的基本格式如下: 
$GPVTG,(1),T,(2),M,(3),N,(4),K,(5)*hh(CR)(LF) 
(1) 以真北为参考基准的地面航向(000~359度,前面的0也将被传输) 
(2)  以磁北为参考基准的地面航向(000~359度,前面的0也将被传输) 
(3)  地面速率(000.0~999.9节,前面的0也将被传输) 
(4)  地面速率(0000.0~1851.8公里/小时,前面的0也将被传输) 
(5)  模式指示(A=自主定位,D=差分,E=估算,N=数据无效) 
举例如下: 
$GPVTG,,T,,M,0.195,N,0.361,K,A*2A 6,$GPGLL(定位地理信息,Geographic Position) 
$GPGLL语句的基本格式如下: 
$GPGLL,(1),(2),(3),(4),(5),(6),(7)*hh(CR)(LF) 
(1)  纬度ddmm.mmmmm(度分) 
(2)  纬度半球N(北半球)或S(南半球) 
(3)  经度dddmm.mmmmm(度分) 
(4)  经度半球E(东经)或W(西经) 
(5)  UTC时间:hhmmss(时分秒) 
(6)  定位状态,A=有效定位,V=无效定位 
(7)  模式指示(A=自主定位,D=差分,E=估算,N=数据无效) 
举例如下: 
$GPGLL,2308.28715,N,11322.09875,E,023543.00,A,A*6A 7,$GPZDA(当前时间信息) 
$GPZDA语句的基本格式如下: 
$GPZDA,(1),(2),(3),(4),(5),(6)*hh(CR)(LF) 
(1)  UTC时间:hhmmss(时分秒) 
(2)  日 
(3)  月 
(4)  年 
(5)  本地区域小时(NEO-6M未用到,为00) 
(6)  本地区域分钟(NEO-6M未用到,为00) 
举例如下: 
$GPZDA,082710.00,16,09,2002,00,00*64 
NMEA-0183协议命令帧部分就介绍到这里,接下来我们看看NMEA-0183协议的校验,通过前面
的介绍,我们知道每一帧最后都有一个hh的校验和,该校验和是通过计算$与*之间所有字符
ASCII码的异或运算得到,将得到的结果以ASCII字符表示就是该校验(hh)。 
例如语句:$GPZDA,082710.00,16,09,2002,00,00*64,校验和(红色部分参与计算)计算方法为: 
0X47xor 0X50xor 0X5Axor 0X44xor 0X41xor 0X2Cxor 0X30xor 0X38xor 0X32xor 0X37xor 
0X31xor 0X30xor 0X2Exor 0X30xor 0X30xor 0X2Cxor 0X31xor 0X36xor 0X2Cxor 0X30xor 
0X39xor 0X2Cxor 0X32xor 0X30xor 0X30xor 0X32xor 0X2Cxor 0X30xor 0X30xor 0X2Cxor 
0X30xor 0X30 得到的结果就是0X64,用ASCII表示就是64。 
NMEA-0183协议我们就介绍到这里,了解了该协议,我们就可以编写单片机代码,解析
NMEA-0183数据,从而得到GPS定位的各种信息了。 

3其他知识

GPS(Global Positioning System,全球定位系统)表示的形式主要包括以下几种:

1. 坐标系统

  • 经纬度坐标:GPS通过经纬度来确定地球上的位置。经度表示地球中的横向位置(东西方向),范围从西经180°到东经180°,以本初子午线(通过伦敦的经线)为0°。纬度表示地球中的纵向位置(南北方向),范围从南纬90°到北纬90°,以赤道为0°。
  • 度分秒(DMS)格式:这是经纬度的一种常见表示方式,将度细分为分和秒,以便更精确地表示位置。例如,纬度可以表示为45°46′24″N,经度可以表示为116°43′30″E。
  • 十进制度(DD)格式:另一种常见的表示方式,直接使用小数来表示经纬度,如纬度45.773333°,经度116.725000°。

2. 时间系统

  • UTC时间:GPS使用UTC(协调世界时)作为时间基准,这是一种以原子时秒长为基础,在时刻上尽量接近于世界时的时间计量系统。GPS时间起始于1980年1月6日UTC 0时,保证时间的连续性。

3. 数据格式

  • NMEA 0183标准:GPS设备通常通过NMEA 0183标准输出数据,这是一种用于不同GPS导航设备之间的通信协议。该标准定义了多种数据格式,如GPRMC(推荐最小定位信息)、GPGGA(GPS定位信息)、GPGSV(可视卫星信息)等。每种格式都包含了一系列以逗号分隔的数据字段,如时间、定位状态、纬度、经度、速度等。

4. 精度指标

  • 位置精度稀释(PDOP、HDOP、VDOP):这些指标用于衡量GPS定位的精度。PDOP表示综合位置精度因子,HDOP表示水平精度因子,VDOP表示垂直精度因子。它们的值越小,表示定位精度越高。

5. 其他信息

  • 卫星信息:GPS设备还会输出当前接收到的卫星信息,包括卫星编号、仰角、方位角、信噪比等,这些信息有助于了解设备的定位状态和信号质量。

综上所述,GPS表示的形式涵盖了坐标系统、时间系统、数据格式、精度指标以及卫星信息等多个方面。这些形式共同构成了GPS技术的核心,使得我们能够准确地确定地球上的位置和时间。

实例代码

1-1思路

定义两个uart一个接收一个处理数据后发送

添加了串口重定义

1-2重要的代码

int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();MX_USART2_UART_Init();/* USER CODE BEGIN 2 */uint8_t GPS_data[128];		//缓存所有的GPS的数据char *GPGGA;		//缓存特定的数据char GPGGA2[15][15];	//将数据拆分,才分为 第几行(数组的第几行) + 有效的数据(其以‘\0’结尾)char *parts_ptr; // 二维数组的指针/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){
//获取数据// 清空数组,将所有元素设置为0memset(GPS_data, 0,128);char data[2]; //临时缓存int a=0;			//初始个数为零if(HAL_UART_Receive(&huart2,(uint8_t *)data,1,1)==HAL_OK){//查看是否有数据if(data[0] =='$'){//判断数据的开始符号do{GPS_data[a]=data[0]; //放入缓存中a++;				 //计数HAL_UART_Receive(&huart2,(uint8_t*)data,1,1);//读取下一个数据}while(data[0] != 0x0D);//判断结束}}
//筛选数据if(GPS_data[0]=='$' && GPS_data[4]=='G' && GPS_data[5]=='A'){ //筛选数据//printf("%s",GPS_data); //打印原始数据// 使用 memset 清空二维数组parts_ptr = (char *)GPGGA2; // 将二维数组的指针转换为指向第一行的指针memset(parts_ptr, 0, 15); // 清空整个二维数组//拆分数据const char *delimiters = ",";//标志符// 获取第一个标记GPGGA = strtok((char*)GPS_data, delimiters);int b=0; //记行数// 循环获取所有标记while (GPGGA != NULL) {strcpy(GPGGA2[b], GPGGA);//存储数据并在此数据末尾加‘\0’// 获取下一个标记GPGGA = strtok(NULL, delimiters);b++;}//显示原始数据
//			for (int j = 0; j < b; j++) {
//					printf("数据 %d: %s\n", j + 1, GPGGA2[j]);
//				}//将接收到的度分数据转换为度分秒的格式			//	纬度		float wei=2622.82816;sscanf(GPGGA2[2],"%f",&wei);//将字符数转换为数字//度int wei_du =(int)(wei/100);//分int wei_fen=(int)wei-(wei_du*100);//秒float wei_miao1=fmod(wei,1.0)*60;float wei_miao2=fmod((fmod(wei_miao1,1.0)*60),1.0);wei_miao1=(int)wei_miao1+wei_miao2;printf("纬度 %s  %d°%d′%0.2f″",GPGGA2[3] ,wei_du,wei_fen,wei_miao1);//	经度		float jin=2622.82816;sscanf(GPGGA2[4],"%f",&jin);//将字符数转换为数字//度int jin_du =(int)(jin/100);//分int jin_fen=(int)jin-(jin_du*100);//秒float jin_miao1=fmod(jin,1.0)*60;float jin_miao2=fmod((fmod(jin_miao1,1.0)*60),1.0);jin_miao1=(int)jin_miao1+jin_miao2;printf("经度 %s  %d°%d′%0.2f″",GPGGA2[5] ,jin_du,jin_fen,jin_miao1);}/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

格式转换(经纬度转换原理一样)

原始字符串(提取纬度和经度部分):

纬度: 2622.82816,N

转换为度分秒(DMS)形式:

  1. 纬度2622.82816

    • 度(°): 整数部分 26
    • 分('): (22.82816 * 60) % 60 = 22' + (0.82816 * 60)' = 22' + 49.6896' = 22'49.69"(四舍五入到小数点后两位)
    • 秒(""): (0.6896 * 60) = 41.376" = 41.38"(四舍五入到小数点后两位)
    • 完整表示: 26°22'49.38"N

    注意:我在秒的计算中做了四舍五入,但原始答案中的秒是41.37",这里我调整为了41.38"以匹配更常见的四舍五入规则。不过,这种微小的差异在实际应用中通常是可以接受的。

main.c文件源码

/* USER CODE BEGIN Header */
/********************************************************************************* @file           : main.c* @brief          : Main program body******************************************************************************* @attention** Copyright (c) 2024 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "usart.h"
#include "gpio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "string.h"  //memset()指定数组为什么内容(用于清空数据)  //strtok()拆分数据   //strcpy()将字符串存入数组中
#include "stdio.h"   //sscanf()数学字符转换为数字    printf()串口输出
#include "math.h"  //fmod()取小数部分
/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 *//* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();MX_USART2_UART_Init();/* USER CODE BEGIN 2 */uint8_t GPS_data[128];		//缓存所有的GPS的数据char *GPGGA;		//缓存特定的数据char GPGGA2[15][15];	//将数据拆分,才分为 第几行(数组的第几行) + 有效的数据(其以‘\0’结尾)char *parts_ptr; // 二维数组的指针/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){
//获取数据// 清空数组,将所有元素设置为0memset(GPS_data, 0,128);char data[2]; //临时缓存int a=0;			//初始个数为零if(HAL_UART_Receive(&huart2,(uint8_t *)data,1,1)==HAL_OK){//查看是否有数据if(data[0] =='$'){//判断数据的开始符号do{GPS_data[a]=data[0]; //放入缓存中a++;				 //计数HAL_UART_Receive(&huart2,(uint8_t*)data,1,1);//读取下一个数据}while(data[0] != 0x0D);//判断结束}}
//筛选数据if(GPS_data[0]=='$' && GPS_data[4]=='G' && GPS_data[5]=='A'){ //筛选数据//printf("%s",GPS_data); //打印原始数据// 使用 memset 清空二维数组parts_ptr = (char *)GPGGA2; // 将二维数组的指针转换为指向第一行的指针memset(parts_ptr, 0, 15); // 清空整个二维数组//拆分数据const char *delimiters = ",";//标志符// 获取第一个标记GPGGA = strtok((char*)GPS_data, delimiters);int b=0; //记行数// 循环获取所有标记while (GPGGA != NULL) {strcpy(GPGGA2[b], GPGGA);//存储数据并在此数据末尾加‘\0’// 获取下一个标记GPGGA = strtok(NULL, delimiters);b++;}//显示原始数据
//			for (int j = 0; j < b; j++) {
//					printf("数据 %d: %s\n", j + 1, GPGGA2[j]);
//				}//将接收到的度分数据转换为度分秒的格式			//	纬度		float wei=2622.82816;sscanf(GPGGA2[2],"%f",&wei);//将字符数转换为数字//度int wei_du =(int)(wei/100);//分int wei_fen=(int)wei-(wei_du*100);//秒float wei_miao1=fmod(wei,1.0)*60;float wei_miao2=fmod((fmod(wei_miao1,1.0)*60),1.0);wei_miao1=(int)wei_miao1+wei_miao2;printf("纬度 %s  %d°%d′%0.2f″",GPGGA2[3] ,wei_du,wei_fen,wei_miao1);//	经度		float jin=2622.82816;sscanf(GPGGA2[4],"%f",&jin);//将字符数转换为数字//度int jin_du =(int)(jin/100);//分int jin_fen=(int)jin-(jin_du*100);//秒float jin_miao1=fmod(jin,1.0)*60;float jin_miao2=fmod((fmod(jin_miao1,1.0)*60),1.0);jin_miao1=(int)jin_miao1+jin_miao2;printf("经度 %s  %d°%d′%0.2f″",GPGGA2[5] ,jin_du,jin_fen,jin_miao1);}/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Configure the main internal regulator output voltage*/__HAL_RCC_PWR_CLK_ENABLE();__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;RCC_OscInitStruct.PLL.PLLM = 8;RCC_OscInitStruct.PLL.PLLN = 168;RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;RCC_OscInitStruct.PLL.PLLQ = 4;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK){Error_Handler();}
}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/
void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何规避DDoS攻击带来的风险?服务器DDoS防御软件科普

DDoS攻击是目前最常见的网络攻击方式之一。其见效快、成本低的特点&#xff0c;使它深受不法分子的“喜爱”。对于未受保护的企业来说&#xff0c;每次DDoS攻击的平均成本为20万美元&#xff0c;当DDoS攻击汹涌而至&#xff0c;缺失详细的保护预案&#xff0c;企业很可能会陷入…

老师是怎么分班的?用什么工具比较好?

新学期伊始&#xff0c;校园里充满了生机与活力&#xff0c;但对老师们来说&#xff0c;这同样意味着一段忙碌的开始。他们不仅要处理日常的教学准备&#xff0c;还要面临一项看似简单却颇为繁琐的任务——给新生进行分班。分班完成后&#xff0c;老师们还需要将分班结果及时、…

大模型预训练中的数据处理及思考

大模型预训练需要从海量的文本数据中学习到充分的知识存储在其模型参数中。预训练所用的数据可以分为两类。一类是网页数据&#xff08;web data&#xff09;&#xff0c;这类数据的获取最为方便&#xff0c;各个数据相关的公司比如百度、谷歌等每天都会爬取大量的网页存储起来…

LLaVA 简介

好奇这张照片是在哪里拍摄的&#xff1f;问 LLaVA&#xff01;&#xff08;图片来自Pixabay的Guy Rey-Bellet&#xff09;。 LLaVA&#xff08;L arge L anguage 和V isual A ssistant 的缩写&#xff09;是一种很有前途的开源生成式人工智能模型&#xff0c;它复制了 OpenAI …

【数据结构】堆主要的应用场景

1. 堆排序 所谓堆排序&#xff0c;就是在堆的基础上进行排序。 在讲解堆排序之前&#xff0c;让我们先来回顾一下堆的概念&#xff0c; 1.1 大根堆和小根堆 堆是一种完全二叉树&#xff0c;它有两种形式&#xff0c;一种是大根堆&#xff0c;另外一种是小根堆。 大根堆&…

Java共享内容通信 VS Golang通信共享内存

接触的编程语言从C到Java再到现在Go&#xff0c;每个语言都有其独有特性&#xff0c;也具备共通之处。 最近在学习并发编程的时候&#xff0c;发现一个很有意思的点&#xff1a;Java基于共享共享内存通信&#xff0c;而Golang则是通过通信共享内存。为什么&#xff1f;下面我们…

主机监控与审计系统是什么?这个功能让您的效率翻倍!

天下之事&#xff0c;皆需明察秋毫&#xff0c;方能运筹帷幄&#xff0c;决胜千里。 于信息之海&#xff0c;主机者&#xff0c;犹若疆土之基石&#xff0c;承载着数据之重&#xff0c;运行着系统之脉。 然&#xff0c;世事如棋局局新&#xff0c;网络之域&#xff0c;暗流涌…

缓存之Tair

介绍 ​ 在Tair出现之前的很长一段时间里&#xff0c;像redis、memcache这些知名NoSql数据库是不支持分布式的&#xff0c;在这样的背景下&#xff0c;由淘宝网自主开发并在2010.6开源的一个高性能、高扩展、高可靠分布式缓存&#xff0c;类似map的key/value结构&#xff0c;在…

【算法】粒子群优化

一、引言 粒子群优化算法&#xff08;Particle Swarm Optimization, PSO&#xff09;是一种基于群体智能的优化技术&#xff0c;由Eberhart和Kennedy在1995年提出。它模拟鸟群觅食行为&#xff0c;通过个体与群体的协作来寻找最优解。通过模拟一群粒子的运动来寻找最优解。每个…

qtcreator的vim模式下commit快捷键ctrl+g,ctrl+c没有反应的问题

首先开启vim后&#xff0c;CtrlG&#xff0c;CtrlC无法用 解决&#xff1a; 工具 -> 选项->FakeVim 转到Ex Command Mapping 搜索Commit 底栏Regular expression 输入commit &#xff08;理论上可以是随意的单词&#xff09; 设置好后&#xff0c;以后要运行&#x…

ETF指数通行红绿灯对接自动交易框架!添加绿灯品种进交易池!股票量化分析工具QTYX-V2.8.9...

前言 我们的股票量化系统QTYX在实战中不断迭代升级!!! 指数通行红绿灯作用就是识别出上升和下降趋势品种。对于上升趋势的品种&#xff0c;在红转绿时买入&#xff0c;绿转红时卖出&#xff0c;当识别出下降趋势后要果断离场&#xff01; 在QTYX的2.8.7版本我们推出了“ETF全自…

【css】伪元素实现跟随鼠标移动的渐变效果

主要功能是在按钮上实现鼠标跟随渐变效果。每当用户将鼠标移动到按钮上时&#xff0c;按钮会显示一个以鼠标位置为中心的渐变效果。 1. 核心部分: 监听鼠标在元素内移动 监听鼠标在元素内移动&#xff0c;并触发该事件。 const handleMouseMove (e: MouseEvent) > {if (…

el-form中使用v-model和prop实现动态校验

如何在Vue的el-form中使用v-model和prop实现动态校验&#xff0c;包括多个变量控制校验、数组循环校验和字段级条件显示。通过实例演示了如何配合rules和自定义验证函数来确保表单的完整性和有效性。 公式&#xff1a; 动态校验项的v-model的绑定值 el-form的属性 :model的值 …

多系统萎缩不慌张,这些维生素是你的“守护神”✨

亲爱的朋友们&#xff0c;今天我们来聊聊一个可能不太为人熟知但至关重要的健康话题——多系统萎缩&#xff08;MSA&#xff09;。面对这样的挑战&#xff0c;除了医疗治疗&#xff0c;日常的营养补充也是不可或缺的一环。特别是维生素&#xff0c;它们在我们的身体中扮演着举足…

FastGPT+ollama 搭建私有AI大模型智能体工作流-Mac

一、大模型工作流的优势 1. 降低任务门槛&#xff1a;工作流可以将复杂任务分解成多个小任务&#xff0c;降低每个任务的复杂度&#xff0c;从而减少对提示词和大模型推理能力的依赖。这样可以提升大模型处理复杂任务的性能和容错能力。 2. 提升任务效率&#xff1a;工作流可以…

【OpenHarmony】openharmony移植到RK3568------获取源码编译OpenHarmony源码

一、源码获取 源码获取有好几种方式&#xff0c;在这里直接在镜像网站下载源码&#xff0c;点击下面连接下载全量版本的OpenHarmony4.1 https://repo.huaweicloud.com/openharmony/os/4.1-Release/code-v4.1-Release.tar.gz 将源码放到自己建立的目录下解压&#xff0c;我放…

PHP轻创推客集淘客地推任务平台于一体的综合营销平台系统源码

&#x1f680;轻创推客&#xff0c;营销新纪元 —— 集淘客与地推任务于一体的全能平台&#x1f310; &#x1f308;【开篇&#xff1a;营销新潮流&#xff0c;轻创推客引领未来】 在瞬息万变的营销世界里&#xff0c;你还在为寻找高效、全面的营销渠道而烦恼吗&#xff1f;&…

[Meachines] [Easy] jerry Tomcat用户暴力破解+war包webshell上传

信息收集 IP AddressOpening Ports10.10.10.95TCP:8080 $ sudo masscan -p1-65535 10.10.10.95 --rate1000 -e tun0 > /tmp/ports $ ports$(cat /tmp/ports | awk -F " " {print $4} | awk -F "/" {print $1} | sort -n | tr \n , | sed s/,$//) $ …

微服务——远程调用

为什么需要远程调用&#xff1f; 在微服务架构中&#xff0c;每个服务都是独立部署和运行的&#xff0c;它们之间需要相互协作以完成复杂的业务逻辑。因此&#xff0c;远程调用成为微服务之间通信的主要方式。通过远程调用&#xff0c;一个服务可以请求另一个服务执行某些操作或…

【前端面试】操作系统

进程与线程 进程线程定义是计算机中的程序关于某数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的基本单位是进程中的一个实体&#xff0c;是CPU调度和分派的基本单位&#xff0c;共享进程的资源资源分配拥有独立的内存空间和系统资源共享进程的内存和资源开销…