GPT对话代码库——HAL库下 USART 的配置及问题(STM32G431CBT6)
目录
1,问:
1,答:
示例代码
正确的HAL库初始化方式
自定义初始化方式(不推荐)
总结
2,问:
2,答:
代码详细解释
初始部分
主初始化部分
初始化调用
FIFO阈值设置和FIFO模式禁用
结尾部分
特定代码的作用
1. huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
2. huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
3. huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
总结
3,问:
3,答:
HAL_UART_MspInit 函数
HAL_UART_MspDeInit 函数
总结
提问模型:GPT-4o-Free
提问时间:2024.07.01
1,问:
为什么一定要在HAL_UART_MspInit中配置GPIO引脚,不能自己创建一个函数吗
1,答:
在STM32 HAL库的框架下,HAL_UART_MspInit函数是专门用于配置UART外设的相关资源的,包括GPIO引脚、时钟和中断。这是一个约定俗成的机制,旨在确保外设的初始化过程清晰、有序且易于维护。虽然你可以创建自己的函数来配置这些资源,但在HAL_UART_MspInit中配置GPIO引脚有几个重要原因:
HAL库的设计规范:
- HAL库在初始化UART外设时,会自动调用相应的
MspInit函数,比如HAL_UART_MspInit。这是库设计的一部分,确保所有外设的初始化步骤都集中管理,不会遗漏任何必要的配置。代码的可维护性和一致性:
- 使用HAL库提供的
MspInit函数,可以保持代码的一致性,使得所有外设的初始化过程都遵循同样的模式,方便阅读和维护。- 开发团队或后续开发者可以快速理解和修改代码,而不需要查找自定义的初始化函数。
防止遗漏关键步骤:
HAL_UART_MspInit不仅用于配置GPIO引脚,还用于启用时钟、配置中断等。如果在其他地方进行这些配置,可能会遗漏某些步骤,导致外设无法正常工作。分离硬件相关配置和业务逻辑:
- 将硬件相关的配置(如GPIO、时钟、中断)集中在
MspInit函数中,可以使业务逻辑与硬件配置分离,增强代码的模块化和可移植性。自动调用机制:
- 当调用
HAL_UART_Init时,HAL库会自动调用HAL_UART_MspInit。如果配置散落在其他自定义函数中,这种自动调用机制将失效,必须手动确保所有初始化步骤都已执行,增加了出错的可能性。
示例代码
正确的HAL库初始化方式
void HAL_UART_MspInit(UART_HandleTypeDef* huart) {GPIO_InitTypeDef GPIO_InitStruct = {0};if(huart->Instance == USART2) {__HAL_RCC_USART2_CLK_ENABLE(); // 使能USART2时钟__HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA时钟/**USART2 GPIO ConfigurationPA2 ------> USART2_TXPA3 ------> USART2_RX*/GPIO_InitStruct.Pin = GPIO_PIN_2 | GPIO_PIN_3;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;GPIO_InitStruct.Alternate = GPIO_AF7_USART2;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);// USART2中断配置(如果需要)HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);HAL_NVIC_EnableIRQ(USART2_IRQn);}
}
自定义初始化方式(不推荐)
虽然你可以创建一个自定义函数,但这不符合HAL库的最佳实践:
void My_UART_Init(void) {GPIO_InitTypeDef GPIO_InitStruct = {0};__HAL_RCC_USART2_CLK_ENABLE(); // 使能USART2时钟__HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA时钟/**USART2 GPIO ConfigurationPA2 ------> USART2_TXPA3 ------> USART2_RX*/GPIO_InitStruct.Pin = GPIO_PIN_2 | GPIO_PIN_3;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;GPIO_InitStruct.Alternate = GPIO_AF7_USART2;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);// USART2中断配置(如果需要)HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);HAL_NVIC_EnableIRQ(USART2_IRQn);
}// 然后在初始化UART时手动调用这个函数
void USART2_Init(void) {huart2.Instance = USART2;huart2.Init.BaudRate = 9600;huart2.Init.WordLength = UART_WORDLENGTH_8B;huart2.Init.StopBits = UART_STOPBITS_1;huart2.Init.Parity = UART_PARITY_NONE;huart2.Init.Mode = UART_MODE_TX_RX;huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart2.Init.OverSampling = UART_OVERSAMPLING_16;My_UART_Init(); // 手动调用自定义的初始化函数if (HAL_UART_Init(&huart2) != HAL_OK) {// 初始化错误处理Error_Handler();}
}
总结
虽然你可以自己创建一个函数来配置GPIO引脚,但遵循HAL库的规范使用HAL_UART_MspInit进行配置,可以提高代码的可维护性、一致性和可靠性,避免遗漏重要的配置步骤。这种方法确保了代码的模块化和可读性,尤其在团队开发和长期维护中具有明显的优势。
2,问:
void MX_USART1_UART_Init(void)
{/* USER CODE BEGIN USART1_Init 0 */
/* USER CODE END USART1_Init 0 */
/* USER CODE BEGIN USART1_Init 1 */
/* USER CODE END USART1_Init 1 */
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;
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
Error_Handler();
}
if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
{
Error_Handler();
}
if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
{
Error_Handler();
}
if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN USART1_Init 2 *//* USER CODE END USART1_Init 2 */
}
详细解释这段代码
并且说明这几句的作用
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
2,答:
这段代码是用来初始化STM32微控制器上的USART1外设的。它使用了HAL库提供的API来配置USART1的各种参数。下面是对这段代码的详细解释,以及对指定几句的作用说明。
代码详细解释
初始部分
void MX_USART1_UART_Init(void)
{/* USER CODE BEGIN USART1_Init 0 *//* USER CODE END USART1_Init 0 *//* USER CODE BEGIN USART1_Init 1 *//* USER CODE END USART1_Init 1 */
这些部分是用户代码的插入点,可以在这些地方添加用户定义的代码,通常用于初始化前的预处理和初始化后的后处理。
主初始化部分
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;huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
这些代码设置了USART1的各种初始化参数:
huart1.Instance = USART1;:指定要初始化的USART外设实例为USART1。huart1.Init.BaudRate = 115200;:设置波特率为115200。huart1.Init.WordLength = UART_WORDLENGTH_8B;:设置数据字长度为8位。huart1.Init.StopBits = UART_STOPBITS_1;:设置停止位为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;:设置过采样为16倍。huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;:禁用单比特采样。huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;:设置时钟预分频器为1。huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;:不初始化高级特性。
初始化调用
if (HAL_UART_Init(&huart1) != HAL_OK){Error_Handler();}
调用HAL库的HAL_UART_Init函数来初始化USART1。如果初始化失败,调用Error_Handler处理错误。
FIFO阈值设置和FIFO模式禁用
if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK){Error_Handler();}if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK){Error_Handler();}if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK){Error_Handler();}
这些代码进一步配置USART1的FIFO设置:
HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8):设置发送FIFO的阈值为1/8。HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8):设置接收FIFO的阈值为1/8。HAL_UARTEx_DisableFifoMode(&huart1):禁用FIFO模式。
结尾部分
/* USER CODE BEGIN USART1_Init 2 *//* USER CODE END USART1_Init 2 */
}
这些部分是用户代码的插入点,可以在这些地方添加用户定义的代码,通常用于初始化后的后处理。
特定代码的作用
1.
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;这一行代码禁用单比特采样模式。单比特采样模式用于在低速率下减少误码率,通过多次采样决定一个比特的值。禁用它表示系统在正常的单次采样模式下工作。
2.
huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;这一行代码设置时钟预分频器为1。这意味着输入时钟直接用于UART,不进行任何分频。预分频器可以用来调整UART时钟以匹配不同的波特率要求。
3.
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;这一行代码表示不初始化任何高级特性。UART的高级特性可能包括自动波特率检测、数据反转、MSB/LSB优先级选择等。这行代码禁用这些特性,保持UART的基本配置。
总结
这段代码配置了STM32的USART1外设,设置了波特率、数据长度、停止位、奇偶校验、工作模式、硬件流控制、过采样率、FIFO设置等参数。通过调用HAL_UART_Init等函数,确保USART1能够按照指定配置正常工作。
3,问:
void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{GPIO_InitTypeDef GPIO_InitStruct = {0};
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
if(uartHandle->Instance==USART1)
{
/* USER CODE BEGIN USART1_MspInit 0 *//* USER CODE END USART1_MspInit 0 */
/** Initializes the peripherals clocks
*/
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1;
PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
{
Error_Handler();
}/* USART1 clock enable */
__HAL_RCC_USART1_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();
/**USART1 GPIO Configuration
PA9 ------> USART1_TX
PA10 ------> USART1_RX
*/
GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);/* USART1 interrupt Init */
HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART1_IRQn);
/* USER CODE BEGIN USART1_MspInit 1 *//* USER CODE END USART1_MspInit 1 */
}
}void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
{if(uartHandle->Instance==USART1)
{
/* USER CODE BEGIN USART1_MspDeInit 0 *//* USER CODE END USART1_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_USART1_CLK_DISABLE();/**USART1 GPIO Configuration
PA9 ------> USART1_TX
PA10 ------> USART1_RX
*/
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);/* USART1 interrupt Deinit */
HAL_NVIC_DisableIRQ(USART1_IRQn);
/* USER CODE BEGIN USART1_MspDeInit 1 *//* USER CODE END USART1_MspDeInit 1 */
}
}
详细解释这段代码
3,答:
这段代码包含了两个函数:HAL_UART_MspInit 和 HAL_UART_MspDeInit,分别用于初始化和反初始化USART1的相关硬件资源。这些函数通常在使用HAL库进行外设初始化和反初始化时被自动调用。下面是对这段代码的详细解释。
HAL_UART_MspInit 函数
HAL_UART_MspInit函数用于配置USART1的相关硬件资源,包括时钟、GPIO引脚和中断。
void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{GPIO_InitTypeDef GPIO_InitStruct = {0};RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};if(uartHandle->Instance==USART1){/* USER CODE BEGIN USART1_MspInit 0 *//* USER CODE END USART1_MspInit 0 *//** Initializes the peripherals clocks*/PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1;PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK){Error_Handler();}
- 时钟配置:
- 设置外设时钟的选择。
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1表示选择USART1的外设时钟。 - 设置USART1的时钟源为PCLK2。
PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2。 - 调用
HAL_RCCEx_PeriphCLKConfig函数应用时钟配置。如果配置失败,调用Error_Handler处理错误。
- 设置外设时钟的选择。
/* USART1 clock enable */
__HAL_RCC_USART1_CLK_ENABLE();
- 使能USART1时钟:调用
__HAL_RCC_USART1_CLK_ENABLE函数使能USART1外设的时钟。
__HAL_RCC_GPIOA_CLK_ENABLE();/**USART1 GPIO ConfigurationPA9 ------> USART1_TXPA10 ------> USART1_RX*/GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.Alternate = GPIO_AF7_USART1;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- 使能GPIOA时钟:调用
__HAL_RCC_GPIOA_CLK_ENABLE函数使能GPIOA端口的时钟。 - 配置GPIO引脚:
- 设置GPIO引脚9和10为USART1的TX和RX功能。
- 设置GPIO模式为复用推挽输出(
GPIO_MODE_AF_PP)。 - 设置引脚不上拉(
GPIO_NOPULL)。 - 设置引脚速度为低速(
GPIO_SPEED_FREQ_LOW)。 - 设置引脚的复用功能为USART1(
GPIO_AF7_USART1)。 - 调用
HAL_GPIO_Init函数应用GPIO配置。
/* USART1 interrupt Init */HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);HAL_NVIC_EnableIRQ(USART1_IRQn);
- USART1中断配置:
- 设置USART1中断的优先级为0。
- 启用USART1中断。
/* USER CODE BEGIN USART1_MspInit 1 *//* USER CODE END USART1_MspInit 1 */}
}
- 用户代码插入点:这些部分是用户代码的插入点,可以在这些地方添加自定义代码,以便在初始化过程中执行额外的操作。
HAL_UART_MspDeInit 函数
HAL_UART_MspDeInit函数用于反初始化USART1的相关硬件资源,包括时钟、GPIO引脚和中断。
void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
{if(uartHandle->Instance==USART1){/* USER CODE BEGIN USART1_MspDeInit 0 *//* USER CODE END USART1_MspDeInit 0 */
- 条件判断:检查传入的
uartHandle实例是否为USART1。
/* Peripheral clock disable */__HAL_RCC_USART1_CLK_DISABLE();
- 关闭USART1时钟:调用
__HAL_RCC_USART1_CLK_DISABLE函数关闭USART1外设的时钟。
/**USART1 GPIO ConfigurationPA9 ------> USART1_TXPA10 ------> USART1_RX*/HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);
- 反初始化GPIO引脚:调用
HAL_GPIO_DeInit函数反初始化GPIO引脚9和10,将其配置恢复到复位状态。
/* USART1 interrupt Deinit */HAL_NVIC_DisableIRQ(USART1_IRQn);
- 禁用USART1中断:调用
HAL_NVIC_DisableIRQ函数禁用USART1中断。
/* USER CODE BEGIN USART1_MspDeInit 1 *//* USER CODE END USART1_MspDeInit 1 */}
}
- 用户代码插入点:这些部分是用户代码的插入点,可以在这些地方添加自定义代码,以便在反初始化过程中执行额外的操作。
总结
HAL_UART_MspInit函数用于初始化USART1的相关硬件资源,包括时钟、GPIO引脚和中断。HAL_UART_MspDeInit函数用于反初始化USART1的相关硬件资源,将其配置恢复到复位状态。- 使用这些函数可以确保外设的硬件资源在初始化和反初始化过程中得到正确配置和释放,从而保证系统的正常运行和资源管理。
相关文章:
GPT对话代码库——HAL库下 USART 的配置及问题(STM32G431CBT6)
目录 1,问: 1,答: 示例代码 正确的HAL库初始化方式 自定义初始化方式(不推荐) 总结 2,问: 2,答: 代码详细解释 初始部分 主初始化部分 初始化调用…...
ExoPlayer架构详解与源码分析(14)——ProgressiveMediaPeriod
系列文章目录 ExoPlayer架构详解与源码分析(1)——前言 ExoPlayer架构详解与源码分析(2)——Player ExoPlayer架构详解与源码分析(3)——Timeline ExoPlayer架构详解与源码分析(4)—…...
docker部署kafka(单节点) + Springboot集成kafka
环境: 操作系统:win10 Docker:Docker Desktop 4.21.1 (114176)、Docker Engine v24.0.2 SpringBoot:2.7.15 步骤1:创建网络: docker network create --subnet172.18.0.0/16 net-kafka 步骤2:安…...
一.1.(3)半导体二极管基本电路的分析方法及常见应用电路
1.二极管基本电路的分析方法 先标正负极,再看是否理想二极管 将二极管视为断路,求两端电压 两端电压均大于导通电压,压差大的先导通(由于电源不是完全的阶跃,而是有一个电压爬升的过程) 2.常见应用电路 1.求…...
银河麒麟V10 SP1 审计工具 auditd更新
前言 银河麒麟V10 SP1 审计工具 auditd 引发的内存占用过高, 内存使用率一直在 60% 以上, 内存一直不释放 排查 可以使用ps或者top查看系统进程使用情况 ps -aux|sort -k4nr|head -n 5 发现银河麒麟审计工具 auditd 一直占用内存不释放 解决 办法一…...
JWT(Json Web Token)在.NET Core中的使用
登录成功时生成JWT字符串目录 JWT是什么? JWT的优点: JWT在.NET Core 中的使用 JWT是什么? JWT把登录信息(也称作令牌)保存在客户端为了防止客户端的数据造假,保存在客户端的令牌经过了签名处理…...
《QT从基础到进阶·四十三》QPlugin插件多线程问题和只有插件dll没有头文件和lib文件时调用插件中的方法
1、插件和多线程问题: 创建插件对象不能放到多线程执行,不然报错:ASSERT failure in QWidget: "Widgets must be created in the GUlthread. //不能放在多线程执行 QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName))…...
Android SurfaceFlinger——屏幕状态初始化(二十二)
对于开机启动动画前期准备的相关步骤,我们已经分析了前 5 个,对于第 6 步调用 eglGetDisplay() 函数对 OpenGL ES 初始化并获取默认屏幕,我们在介绍 OpenGL ES 的时候也进行了详细的分析,下一步我们我们来分析对屏幕的状态进行初始化。 1)getInternalDisplayToken:获取显…...
3101. 交替子数组计数 Medium
给你一个 二进制数组 nums 。 如果一个 子数组 中 不存在 两个 相邻 元素的值 相同 的情况,我们称这样的子数组为 交替子数组 。 返回数组 nums 中交替子数组的数量。 示例 1: 输入: nums [0,1,1,1] 输出: 5 解释&…...
Linux系统基础命令行指令——Ubuntu
基础指令 更新指令 sudo apt update sudo apt upgrade 切换超级管理员 su root 切换路径 //相对、绝对 cd 路径回上一级路径 cd ..cd ../.. 退两级路径 查看当前目录 pwd查看指定路径内容 ls //常见搭配 ls -al 创建目录 mkdir 路径 创建文件 touc…...
qt 读取配置文件
在Qt中读取配置文件,主要有以下几种方法: 使用QFile和QTextStream类: 这种方法适用于读取任意文本文件,包括配置文件。使用QFile的open()方法打开配置文件。使用QTextStream的readLine()方法逐行读取配置数据。使用QXmlStreamRea…...
拉格朗日插值法【python,算法】
拉格朗日插值是一种在数值分析中用来构建通过一系列已知数据点的多项式插值的方法。这种方法以 18 世纪的法国数学家约瑟夫拉格朗日命名。当给定一组离散的数据点(𝑥_0,𝑦_0),(𝑥_1,𝑦_1),...,(𝑥_𝑛,&…...
定个小目标之刷LeetCode热题(41)
338. 比特位计数 给你一个整数 n ,对于 0 < i < n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n 1 的数组 ans 作为答案。 今天看一下这道简单题,主要考查位运算,代码如下 class Solution {pu…...
Kotlin中的关键字
Kotlin 中的关键字可分为几个大类: 声明/定义关键字: class:用于定义类interface:用于定义接口object:用于声明对象,Kotlin中实现单例模式的关键字fun:用于声明函数var:用于声明可变…...
LabVIEW新能源汽车电池性能测试系统
新能源汽车的核心部件之一是电池,其性能直接关系到整车的续航里程、安全性和寿命。为了确保电池的性能和可靠性,测试是必不可少的环节。本文介绍了一种基于LabVIEW的新能源汽车电池性能测试系统,通过LabVIEW与数据采集设备的无缝集成…...
Elasticsearch 实现 Word、PDF,TXT 文件的全文内容提取与检索
文章目录 一、安装软件:1.通过docker安装好Es、kibana安装kibana:2.安装原文检索与分词插件:之后我们可以通过doc命令查看下载的镜像以及运行的状态:二、创建管道pipeline名称为attachment二、创建索引映射:用于存放上传文件的信息三、SpringBoot整合对于原文检索1、导入依赖…...
深度学习赋能数据分析,联蔚盘云引领业务革新
一、引言 随着大数据时代的到来,深度学习技术正逐渐成为企业数据分析的新引擎。联蔚盘云凭借其在深度学习领域的深厚积累,为企业提供高效、精准的数据分析解决方案,助力企业实现业务革新与增长。 二、深度学习与数据分析的完美结合 联蔚盘…...
Arthas实战(5)- 项目性能调优
1、接口耗时查询:trace命令 trace 命令能主动搜索 class-pattern/method-pattern 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。 1.1 准备测试应用 新建一个 SpringBoot 应用,写一耗时久的代码&…...
昇思25天学习打卡营第7天|Pix2Pix实现图像转换
文章目录 昇思MindSpore应用实践基于MindSpore的Pix2Pix图像转换1、Pix2Pix 概述2、U-Net架构定义UNet Skip Connection Block 2、生成器部分3、基于PatchGAN的判别器4、Pix2Pix的生成器和判别器初始化5、模型训练6、模型推理 Reference 昇思MindSpore应用实践 本系列文章主要…...
单选多选提交问卷,代码示例
element中 需要对接口返回的数据进行分析。多选问题使用checkbox,单选题使用radio。 多选时可以绑定min/ma&am…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...
前端调试HTTP状态码
1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...
文件上传漏洞防御全攻略
要全面防范文件上传漏洞,需构建多层防御体系,结合技术验证、存储隔离与权限控制: 🔒 一、基础防护层 前端校验(仅辅助) 通过JavaScript限制文件后缀名(白名单)和大小,提…...
