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引脚有几个重要原因:

  1. HAL库的设计规范

    • HAL库在初始化UART外设时,会自动调用相应的MspInit函数,比如HAL_UART_MspInit。这是库设计的一部分,确保所有外设的初始化步骤都集中管理,不会遗漏任何必要的配置。
  2. 代码的可维护性和一致性

    • 使用HAL库提供的MspInit函数,可以保持代码的一致性,使得所有外设的初始化过程都遵循同样的模式,方便阅读和维护。
    • 开发团队或后续开发者可以快速理解和修改代码,而不需要查找自定义的初始化函数。
  3. 防止遗漏关键步骤

    • HAL_UART_MspInit不仅用于配置GPIO引脚,还用于启用时钟、配置中断等。如果在其他地方进行这些配置,可能会遗漏某些步骤,导致外设无法正常工作。
  4. 分离硬件相关配置和业务逻辑

    • 将硬件相关的配置(如GPIO、时钟、中断)集中在MspInit函数中,可以使业务逻辑与硬件配置分离,增强代码的模块化和可移植性。
  5. 自动调用机制

    • 当调用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 Configuration
        PA2     ------> USART2_TX
        PA3     ------> 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 Configuration
    PA2     ------> USART2_TX
    PA3     ------> 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 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);
  • 使能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 Configuration
    PA9     ------> USART1_TX
    PA10     ------> 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的相关硬件资源,将其配置恢复到复位状态。
  • 使用这些函数可以确保外设的硬件资源在初始化和反初始化过程中得到正确配置和释放,从而保证系统的正常运行和资源管理。

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

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

相关文章

抠图后怎么跟背景自然融合?分享3款工具

抠图后怎么跟背景自然融合?将抠图后的图片与背景自然融合可以极大地提升图像的整体视觉效果,使我们能够更方便地创造出丰富多彩、独具特色的设计作品。无论是广告海报、产品展示还是社交媒体分享,自然融合的背景都能让抠图元素与周围环境融为…

【Kaggle】Telco Customer Churn 数据编码与模型训练

💬在上一部分中,我们已经完成了对数据集背景解读、数据预处理与探索性分析。在数据背景解读中,我们介绍了数据集来源、电信用户流失分析的基本业务背景,并详细解释了每个字段的基本含义;在数据预处理过程中&#xff0c…

11集在Docker上编译tensorFlow Lite MCU例子工程-《MCU嵌入式AI开发笔记》

【11集在Docker上编译tensorFlow Lite MCU例子工程-《MCU嵌入式AI开发笔记》】 这一集咱们一步一步的在doc下面编译TensorFlow Lite的例程 https://tensorflow.google.cn/lite/tutorials?hlzh-cn 进入这个例子: https://codelabs.developers.google.cn/codelabs/…

Python学习笔记六

1.实现4*4随机矩阵 #生成一个随机4*4的数组 import numpy as np np.random.seed(1)#固定随机数 每次都是同一个 ()里面的数字不同 对应的随机数也不同 np.random.rand() anp.random.randint(0,100,16).reshape(4,4)#0~100的随机整数 包含16个元素 pri…

Java学习 (六) 面向对象--this、继承、方法重写、super

一、this 关键字 1、this 演示 vi Person.java public class Person {String name;int age;//显示声明构造器public Person(String s , int i){name s;age i;}public void setAge(int age){age age;}}vi PersonTest.java public class PersonTest {public static void m…

FuTalk设计周刊-Vol.063

#AI漫谈 热点捕手 1.设计师必看!GPTs让你的创意飞起来! 我们将深入探讨什么是GPTs、其强大功能和独特优势,以及一些值得推荐的GPT应用和获取途径。 链接https://mp.weixin.qq.com/s/EtVxF9XYvCu6ANFfotortA 2.Figma Config 2024 大会内容回…

考研生活day2--王道课后习题2.3.1、2.3.2、2.3.3

2.3.1 题目描述: 这题和曾经做过的LeetCode203.移除元素一模一样,所以我们就使用LeetCode进行书写,题目链接203. 移除链表元素 - 力扣(LeetCode) 解题思路 大家的第一反应肯定是根据书上所学的书写方法一样书写&…

为什么这几年参加PMP考试的人越来越多

参加PMP认证的人越来越多的原因我认为和社会发展、职场竞争、个人提升等等方面有着不小的关系。国际认证与国内认证的性质、发展途径会有一些区别,PMP引进到中国二十余年,报考人数持增长状态也是正常的。 具体可以从下面这几个点来展开论述。 市场竞争…

【技术追踪】SegGuidedDiff:基于分割引导扩散模型实现解剖学可控的医学图像生成(MICCAI-2024)

它来了它来了,它带着 mask 做生成了~ SegGuidedDiff:提出一种用于解剖学可控医学图像生成的扩散模型,在每个采样步骤都遵循多类解剖分割掩码并结合了随机掩码消融训练算法,可助力乳房 MRI 和 腹部/颈部到骨盆 CT 等任务涨点。 论文…

python中的包和模块

目录 一、包与模块 二、第三方包的安装 2.1 pip install 2.2使用 curl 管道 2.3其他安装方法 三、导入单元的构成 3.1pip的使用 四、模块的缓存 一、包与模块 Python 中除了函数库以外,还有非常多且优秀的第三方库、包、模块。 模块Module:以…

LangChain 开发智能Agent,你学会了吗?

Prompt Enginnering 是打开LLM宝库的一把金钥匙,如果prompt得法,并能将其技巧与某项工作深度结合,那必将大大增效。今天我们来聊聊如何优化Prompt设计、Prompt Template管理等技术和体力活,并赋能老喻干货店的营销活动。 LLM Pro…

基于机器学习的零售商品销售数据预测系统

1 项目介绍 1.1 研究目的和意义 在电子商务日益繁荣的今天,精准预测商品销售数据成为商家提升运营效率、优化库存管理以及制定营销策略的关键。为此,开发了一个基于深度学习的商品销售数据预测系统,该系统利用Python编程语言与Django框架&a…

Java服务器代码远程调试(IDEA版)

Java服务器代码远程调试 配置启动脚本参数配置IDEA远程调试工具操作步骤 注意:远程调试的代码需要与本地代码一致,远程调试目的是解决本地环境无法支持调试的情况下,解决线上(测试)环境调试问题。 配置启动脚本参数 n…

昇思25天学习打卡营第10天|linchenfengxue

基于MobileNetv2的垃圾分类 通过读取本地图像数据作为输入,对图像中的垃圾物体进行检测,并且将检测结果图片保存到文件中。 MobileNetv2模型原理介绍 MobileNet网络是由Google团队于2017年提出的专注于移动端、嵌入式或IoT设备的轻量级CNN网络&#x…

TikTok直播限流与网络的关系及解决方法

TikTok作为一款热门的社交平台,其直播功能吸引了大量用户。然而,一些用户可能会遇到TikTok直播限流的问题,例如直播过程中出现播放量低、直播画面质量差等情况。那么,TikTok直播限流与所使用的网络线路是否有关系?是否…

TypeScript Project References npm 包构建小实践

npm 包输出 es/cjs 产物 在开发一个 npm 包时,通常需要同时输出 ES 模块和 CommonJS 模块的产物供不同的构建进行使用。在只使用tsc进行产物编译的情况下,我们通常可以通过配置两个独立的 tsconfig.json 配置文件,并在一个 npm script 中 执…

typescript学习回顾(五)

今天来分享一下ts的泛型,最后来做一个练习 泛型 有时候,我们在书写某些函数的时候,会丢失一些类型信息,比如我下面有一个例子,我想提取一个数组的某个索引之前的所有数据 function getArraySomeData(newArr, n:numb…

Mouse Prealbumin ELISA Kit小鼠前白蛋白ELISA试剂盒

前白蛋白(PRE)是一种由4条相同的多肽链组成的四聚体蛋白。电泳时,它比血清白蛋白的迁移速度更快,PRE可以作为多种疾病患者营养评价的标志物。ICL的Mouse Prealbumin ELISA Kit应用双抗体夹心法测定小鼠样本中前白蛋白水平&#xf…

CentOS7源码安装nginx并编写服务脚本

华子目录 准备下载nginx源码包关闭防火墙关闭selinux安装依赖环境 解压编译安装测试编写服务脚本,通过systemctl实现服务启动与关闭测试 准备 下载nginx源码包 在源码安装前,我们得先下载nginx源码包https://nginx.org/download/这里我下载的是nginx-1…

《梦醒蝶飞:释放Excel函数与公式的力量》8.2 COUNTA函数

8.2 COUNTA函数 COUNTA函数是Excel中用于统计指定区域内所有非空单元格数量的函数。它能够统计数值、文本、错误值以及公式返回的结果,是数据分析中常用的统计工具。 8.2.1 函数简介 COUNTA函数用于统计指定区域中所有非空单元格的数量。它与COUNT函数不同&#…