首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不调用__HAL_RCC_USART1_CLK_ENABLE()?

为什么不调用__HAL_RCC_USART1_CLK_ENABLE()?
EN

Stack Overflow用户
提问于 2021-12-13 07:55:27
回答 1查看 138关注 0票数 0

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

代码语言:javascript
复制
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();

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-13 14:48:26

这两个电话都是必要的。

__HAL_RCC_USART1_CLK_ENABLEHAL_UART_MspInit (参见msp.c)调用,而后者又从HAL_UART_Init调用

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70331441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档