【问题标题】:why __HAL_RCC_USART1_CLK_ENABLE() not be called?为什么不调用 __HAL_RCC_USART1_CLK_ENABLE() ?
【发布时间】:2022-01-16 17:39:17
【问题描述】:

我正在使用STM32CUBEMX 生成代码。在STM32WB55的示例(Examples\UART\UART_Printf)中,我没有找到__HAL_RCC_USART1_CLK_ENABLE()。我很困惑,为什么不需要开启USART1时钟,但我们需要开启GPIOB时钟?

static void MX_USART1_UART_Init(void)

{

  huart1.Instance = USART1;

  huart1.Init.BaudRate = 115200;

  huart1.Init.WordLength = UART_WORDLENGTH_8B;

  huart1.Init.StopBits = UART_STOPBITS_1;

  huart1.Init.Parity = UART_PARITY_ODD;

  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();
  }

}

static void MX_GPIO_Init(void)
{

  /* GPIO Ports Clock Enable */

  __HAL_RCC_GPIOB_CLK_ENABLE();

}

【问题讨论】:

    标签: stm32


    【解决方案1】:

    这两个调用都是必要的。

    __HAL_RCC_USART1_CLK_ENABLE 是从HAL_UART_MspInit 调用的(参见stm32wbxx_hal_msp.c),而HAL_UART_Init 又是从HAL_UART_Init 调用的

    这就是库和多维数据集样本的组织方式。更高级别的代码使用指向外围实例的指针、基本初始化参数填充主描述符(在您的情况下为 huart1),并使用此描述符调用 Init 函数。 Init 函数执行寄存器初始化,但首先调用必须在应用程序代码中实现的MspInit 函数。 MspInit 函数执行额外的初始化,如启用时钟、GPIO 配置等。所有不适合库代码的内容

    MspInit 也被默认实现为库中具有weak 属性的空函数,这意味着任何其他实现都将覆盖默认实现。

    【讨论】:

    • 我在STM32CUBEMX中配置时钟树的时候,发现有些部分被高亮了,即显示为蓝色。但其他人只显示灰色。这是否意味着启用了突出显示的部分?如果是这样,为什么 USART1 没有突出显示,因为 USART1 可以工作?我对此感到非常困惑。
    • 时钟配置中的蓝色突出显示值是正确的。将 PLL 配置更改为某个疯狂的值,大多数框会变成红色。而且我不确定您对 USART1 亮点的体验,当我在 Pinout 页面上启用 USART1 时,框 To USART1 在时钟页面上有蓝色转盘,并且时钟源选择也已启用。
    • 谢谢。 Flexz
    猜你喜欢
    • 2016-07-15
    • 2020-03-28
    • 2019-03-18
    • 2011-05-04
    • 2019-11-04
    • 2016-10-27
    • 2018-05-24
    • 2013-08-12
    • 1970-01-01
    相关资源
    最近更新 更多