我正在使用STM32CUBEMX生成代码。在STM32WB55的示例(STM32WB55)中,我没有找到__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();
}发布于 2021-12-13 14:48:26
这两个电话都是必要的。
__HAL_RCC_USART1_CLK_ENABLE从HAL_UART_MspInit (参见msp.c)调用,而后者又从HAL_UART_Init调用
这就是如何组织库和立方体样本的方法。高级代码使用指向外围实例的指针填充主描述符(在您的情况下是huart1),基本初始化参数并使用此描述符调用Init函数。Init函数执行寄存器初始化,但首先调用必须在应用程序代码中实现的MspInit函数。MspInit函数执行额外的初始化,如启用时钟、GPIO配置等。
默认情况下,MspInit也被实现为具有weak属性的空函数,这意味着任何其他实现都将覆盖默认的实现。
https://stackoverflow.com/questions/70331441
复制相似问题